Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- HTTP
- mysql
- spring cloud
- computer science
- CS
- virtualization
- 데이터베이스
- Spring Security
- 배포
- Java
- web server
- 도커
- JPA
- spring boot
- vm
- Spring
- 스프링 배치
- 컨테이너
- ORM
- 가상화
- 영속성 컨텍스트
- spring batch
- Container
- CI/CD
- 자바
- 스프링
- 백엔드
- 스프링 부트
- 스프링 시큐리티
- 웹 서버
Archives
- Today
- Total
개발 일기
[Computer Network] OSI 7계층 본문
이전에 컴퓨터 네트워크 시간에 열심히 배웠었지만 한 순간에 까먹어버렸고 중간 중간 개발 공부를 하다보면 튀어나오는 이 용어에 대해 다시 기억을 되살릴 필요가 있다고 생각되어 정리해보게 됐다.
OSI 7계층
SI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것으로 각 레이어 별로 역할이 다르다.
하나씩 뜯어보자.
Application Layer(응용 계층)
- 사용자와 직접 연결되어 네트워크 접근을 돕는 계층
- 데이터 전송을 위한 인터페이스 제공
- 사용자로부터 입력 받은 정보를 하위 계층에 전달한다.
Presentation Layer(표현 계층)
- 데이터를 응용 계층에 사용하는 표현으로 변환해주는 계층
- 데이터의 인코딩과 디코딩이 이루어 진다. ex) 문자열을 아스키 코드로
Session Layer(세션 계층)
- 컴퓨터간 연결인 세션의 생성과 유지를 관리하는 계층
- 오류 발생 시 복구 역할을 수행
- 이떄 세션은 프로세스들 사이에 통신을 하기 위해 메시지 교환을 통해 서로를 인식한 이후부터 통신을 마칠때 까지의 기간
Transport Layer(전송 계층)
- 종단 간 데이터를 신뢰성 있게 전송하기 위한 계층
- 데이터를 쪼개어 앞에 헤더를 붙혀 Segment 단위로 나누어 전송하고, 실패한 경우 다시 패킷을 보내는 등의 역할
- 포트 결정
- TCP프로토콜 / UDP 프로토콜
Network Layer(네트워크 계층)
- 데이터 전송 경로, 순서 등을 결정하는 계층 (가장 효율적인 루트) = 빠르게 빠르게
- Segment 앞에 또 헤더를 붙혀 Packet으로 구성하여 전송하고, 수신 시 합치는 역할을 한다.
- IP 주소를 통해 데이터를 빠르게 전송
- 라우터를 통해 전송을하는데 주소 정보는 packet에 있기 때문에 패킷 전송 패킷 전송하는 것.
Data Link Layer(데이터 링크 계층)
- 물리적인 기기(인접한 노드)들 사이에 신뢰성 있는 데이터를 전송하는 계층
- 패킷 앞에 또 헤더를 붙혀 Frame으로 구성하고 각 프레임에 대한 에러 검사와 수정을 수행한다.
- MAC 주소를 사용하여 데이터를 전송
- 허브, 리피터
Physical Layer(물리 계층)
- 데이터를 물리적인 신호로 변환하는 계층
- 단순 전달만 수행하며, 데이터를 검증하지 않음
- 프레임을 비트 단위의 전기 신호를 전달한다.
우리가 흔히들 TCP/IP라고 말하는데 그 이유가 TCP는 Transport Layer로 신뢰성 있는, IP는 Network Layer로 빠르게 전달 하는 역할을 하고 있기 때문이다.
TCP 3-way Handshake(커넥션 연결)
TCP 프로토콜로 통신하기 위해 데이터 전송 전 상호 연결을 수립하는 과정으로 상대방과 논리적 세션을 맺는 시작점으로 해당 과정을 거친 후에 데이터들을 정상적으로 송수신하는 절차를 가진다.
즉, 데이터를 전송할 준비가 되었다는 것을 보장 및 데이터 전송 준비 확인하는 과정이며 3-Way Handshake 과정에서 정상적으로 세션이 맺어 지지 않으면 통신을 중단한다.
SYN → SYN-ACK → ACK의 세 번의 패킷 교환을 통해 TCP 연결을 설정하는 과정이라 3-way handshake라고 한다.
- 클라이언트에서 서버로 커넥션을 요청할때 SYN 플래그를 1로하여 패킷 송신
- SYN, ACK비트를 1로 설정해 패킷 송신
- 클라이언트에서 다시 ACK를 1로 설정해 패킷 송신 이렇게되면 ESTABLISHED LISTEN상태가된다.
- 그래서 이제 클라이언트에서 패킷을 보내고 잘 받았으면 서버는 클라이언트로 ACK를 보낸다.
- 클라이언트에서 ACK를 받지 못하면 재전송한다.
- 데이터를 전부 송신한 클라이언트는 연결을 끊고자 FIN=1로 하여 송신한다.
- 서버는 ACK를 보내주고 서버에서 혹시 아직 보낼 패킷이 남아있다면 남은 패킷 송신(일정 시간 대기)
- 다 보내면 서버도 FIN을 송신한다.
- Client가 FIN을 확인하고 ACK를 보내면 통신이 종료된다.