개요
오늘은 OSI 7 계층 중 4 계층에 속한 전송 계층을 정리할 차례이다.
레츠기릿
전송 계층의 역할
3계층인 네트워크 계층의 주요 역할은 목적지까지 안전하고 효율적으로 도달하기 위해 라우팅을 지원하고, 이러한 정보를 지닌 IP 헤더를 추가하는 작업을 수행한다.
결국 네트워크 계층과, 데이터 링크 계층을 크게 바라보면 다른 컴퓨터와 통신을 시도하고자 사용되는 계층인 것이다.
전송 계층은 여기서 더 들어가 다른 컴퓨터 내부의 애플리케이션 프로세스와 통신을 시도하는 역할을 한다.
만약 내가 서울에 있는 철수에게 카톡을 보낸다면, 단순히 철수의 컴퓨터에 톡이 도착하는 것이 아니라 철수의 컴퓨터 내부에서 실행 중인 ‘카카오톡’이라는 애플리케이션에 톡이 도착해야 하는 것이다.
정리하자면 전송 계층은 서로 다른 컴퓨터에서 실행중인 프로세스 간의 통신을 위해 사용되는 계층인 것을 알 수 있다.
전송 계층 작업
전송 계층은 데이터를 세그먼트로 나누고, 각 세그먼트에 포트 번호와 같은 제어 정보를 추가한다.
그리고 이러한 제어 정보는 각 세그먼트들의 헤더에 추가된다.
세그먼트란, 전송 계층에서 사용되는 기본 데이터 유닛으로 상위 계층에게 받은 데이터를 세그먼트 형태로 분할하여 다음 계층인 네트워크 계층에 전달하는 것이다. 세그먼트는 주로 TCP와 UDP 프로토콜을 통해 전송된다.
만약 TCP 프로토콜을 사용하여 목직지 컴퓨터와 전송자 컴퓨터 간의 통신이 정상적으로 이루어진 경우, 분할된 세그먼트들이 세그먼트 헤더의 순서 번호(Sequence Number)를 토대로 재조립되는 것이다.
세그먼트 헤더의 구조는 아래와 같다.
- 순서 번호(Sequence Number): 송신된 데이터의 순서를 표시
- ACK 번호(Acknowledgment Number): 수신된 데이터에 대한 확인 응답
- 플래그(Flags): 전송 제어를 위한 플래그(예: SYN, ACK, FIN 등)
- 윈도우 크기(Window Size): 수신 측 버퍼의 크기, 흐름 제어에 사용
- 체크섬(Checksum): 데이터 오류 검출을 위한 값
(참고) 패킷과 세그먼트의 차이
세그먼트는 포트 번호와 같은 전송 계층의 정보를 포함하고, 패킷은 IP 주소와 같은 네트워크 계층의 정보를 포함한다.
예를 들면 패킷의 목적지 관련 정보는 구미시 송정동 123번지라면, MAC 주소는 101동 303호이고, 세그먼트의 목적지 관련 정보는 그 집에서 실행되는 컴퓨터에서 실행되고 있는 응용 프로그램의 포트번호를 가지고 있는 것이다.
TCP ・ UDP
전송 계층에서 절대 빠질 수 없는 두 기술이다.
TCP는 Transfer Control Protocl의 약자로 전송 제어 프로토콜이다.
TCP는 통신할 컴퓨터끼리 논리적인 경로의 수립, 즉 서로 간의 연결을 진행한 후, 통신을 진행한다.
이러한 경로 덕분에 더 신뢰성 있는 통신이 가능하지만 그 만큼 많은 시간이 소요된다.
이렇게 논리적인 경로를 수립하는 과정을 3 Way HandShake라고 한다.
TCP - 3 Way HandShake
- SYN (Synchronize) 패킷 전송 (1단계)
- 클라이언트(송신자)는 서버(수신자)와의 연결을 시작하기 위해 SYN 패킷을 보낸다.
- 수신자에게 현재 통신이 가능한 상태인지 묻는 과정이다. 그렇기 때문에 아직 데이터 전송은 하지 않는다.
- SYN-ACK (SYN + ACK) 패킷 전송 (2단계)
- 서버는 클라이언트의 SYN 패킷을 수신한 후, SYN-ACK 패킷을 보낸다.
- 이 SYN-ACK 패킷은 연결을 수락하는 응답이다.
- TCP의 기능에 속한 흐름제어와 같은 기능을 위해 수신자의 윈도우 크기와 같은 수신자의 정보도 함께 전달한다.
- ACK (Acknowledgment) 패킷 전송 (3단계)
- 마지막으로 클라이언트는 SYN-ACK 패킷을 수신한 후, 연결이 수립되었음을 확인하는 ACK 패킷을 서버에게 보낸다.
UDP
UDP는 User Datagram Protocol의 약자로 전송 계층에서 사용되는 비연결형 프로토콜이다.
이는 TCP와는 달리, 연결을 설정하지 않고 데이터를 전송하는 방식으로, 빠른 데이터 전송을 제공한다.
그러나 서로의 상태를 확인하는 3 Way HandShake와 같은 과정이 없기 때문에 서로의 상태를 확인한 채로 통신하지 않고, 더군다나 TCP
에 사용되는 세그먼트 헤더엔 많은 정보가 들어있지만, UDP에 사용되는 세그먼트 헤더엔 TCP만큼의 정보가 들어가 있지 않다.
결국 신뢰성있는 통신이 힘들다.
하지만 그 만큼 빠르다는 장점을 이용하기 때문에, 스트리밍 서비스와 같은 곳에선 유용할 수 있다.
느낀 점
공부하는 계층의 수가 늘어날수록 점점 쉽게 이해할 수 있는 것 같다.
전송 계층에서 사용되는 기술인 TCP나 UDP를 알고 있었던 것이 큰 이유이지 않을까..
참고
https://www.cloudflare.com/ko-kr/learning/ddos/glossary/tcp-ip/
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.01.11 - OSI 7계층 (표현 계층) (0) | 2025.01.11 |
---|---|
[개발 일기] 2025.01.10 - OSI 7계층 (세션 계층) (0) | 2025.01.10 |
[개발 일기] 2025.01.08 - OSI 7계층 (네트워크 계층) (0) | 2025.01.08 |
[개발 일기] 2025.01.07 - OSI 7계층 (데이터 링크 계층) (0) | 2025.01.07 |
[개발 일기] 2025.01.06 - OSI 7계층 (물리 계층) (0) | 2025.01.06 |