본문 바로가기

[Network] TCP 프로토콜에 대한 이해 본문

Infra

[Network] TCP 프로토콜에 대한 이해

겨울바람_ 2024. 7. 23. 21:30

OSI 7 Layer

 

User Mode 레벨에서의 OSI 7계층은 각각 Application Layer, Presentation Layer, Session Layer가 존재한다. User Mode 레벨에서의 계층의 전송 단위는 Data로 표현되며, 호스트(PC 혹은 노트북)가 주요 장비라고 볼 수 있다.

  • Application Layer
    • 사용자와 가장 밀접한 계층으로 인터페이스 역할
    • 응용 프로세스 간의 정보 교환을 담당
    • Protocol
      • HTTP
      • FTP
  • Presentation Layer
    • 데이터 형식을 설정한다
    • 송신자에게서 온 데이터를 해석하기 위한 Application Layer 데이터 부호화
    • 수신자 측에서 데이터의 압축을 풀수 있는 방식으로 데이터 압축
    • 데이터의 암호화 및 복호화
    • Protocol
      • JPEG
      • MPEG
  • Session Layer
    • 통신 장치 간 상호작용 및 동기화를 제공
    • 연결 세션에서 데이터 교환과 에러 발생 시의 복구를 관리
    • Protocol
      • RPC

Kernel Mode 레벨에서의 OSI 7계층은 각각 Tranport Layer와 Network Layer가 존재한다. Transport Layer의 전송 단위는 Segment이며, Network Layer의 전송 단위는 Packet이다. 각각 L4 스위치와 라우터가 주요 장비다.

  • Transport Layer
    • 송수신 프로세스 간의 신뢰성 있고 정확한 데이터 전송을 담당
    • 신뢰성 있는 데이터 전송을 위해 오류검출 및 복구, 흐름제어와 중복 검사 등을 수행
    • 데이터 전송을 위해 Port 번호를 사용한다
    • 주요 데이터 전송 단위는 Segment다
    • Protocol
      • TCP
      • UDP
  • Network Layer
    • 라우팅 기능을 담당하고 있으며 목적지까지의 최적화 된 경로를 제공
    • 주요 데이터 전송 단위는 Packet이다
    • Protocol
      • IP
      • ICMP

H/W 레벨에서의 OSI 7계층은 각각 Data Link Layer와 Physical Layer가 존재한다. Data Link Layer의 전송 단위는 Frame이다. 주요 장비로는 Data Link Layer는 브릿지와 스위치, Physical Layer는 허브, 리피터가 있다.

  • Data Link Layer
    • 물리적인 연결을 통하여 인접한 두 장치 간의 신뢰성 있는 정보 전송을 담당
    • MAC 주소를 통해서 통신
    • 오류 제어, 흐름 제어, 회선 제어를 담당
    • 주요 데이터 전송 단위는 Frame이다
    • Protocol
      • HDLC
      • PPP
  • Physical Layer
    • 주로 전기적, 기계적, 기능적인 특성을 이용해 데이터를 전송
    • 데이터는 0과 1의 비트열, 즉 On, Off의 전기적 신호 상태로 이루어져 해당 계층은 단지 데이터를 전달
    • 단지 데이터 전달의 역할을 할 뿐이라 알고리즘, 오류제어 기능이 없음
    • Protocol
      • RS-232CSocketSession Layer에서 Transport Layer로 데이터가 전달될 때 Socket이라는 네트워크 통신 방식을 통해 전달된다.

Socket은 TCP와 같은 프로토콜을 User Mode Application Process에서 접근할 수 있도록 파일 형식으로 추상화한 인터페이스다.

 

Socket의 종류는 대표적으로 Stream Socket과 Datagram Socket 두 가지가 존재하는데, 이번 포스팅에서는 웹 서버에서 주로 사용하는 Stream Socket을 기반으로 설명하려고 한다.

 

참고로 Stream Socket은 양방향 통신으로 송신한 데이터가 실제로 도착했는지 즉각적으로 확인할 수 있기 때문에 높은 신뢰성을 보장한다. TCP 프로토콜을 사용하며 주로 웹 서버와 메일 서버 등에서 사용된다.

 

Datagram Socket은 단방향이며 수신 측에서 데이터를 순서대로 전달받을 수 있는 보장이 없고 패킷 손실이 발생할 수 있기 때문에 신뢰할 수 없다. 하지만 부하가 적고 가볍기 때문에 네트워크 게임 혹은 미디어 스트리밍에 주로 사용된다. Datagram Socket은 UDP 프로토콜을 사용한다.

Segmentation

Transport Layer는 Session Layer에서 전달된 Stream Socket을 일정 길이 단위로 분할하여 Transport Layer의 전송 단위인 Segment로 만드는데, 이러한 데이터 변형 과정을 Segmentation 이라고 한다.

 

Stream Socket의 경우 명확한 용량이 정해져 있지 않지만, Segment는 MSS(Maximum Segment Size)가 정해져있기 때문에 MSS 단위로 Stream을 분할한다. MSS의 경우 다음 계층인 Network Layer의 전송 단위인 Packet의 최대 전송 용량인 MTU(Maximum Transport Unit)의 영향을 받아 할당되는데, 일반적으로 1460bytes가 할당된다.

Packet

Packet은 Header와 Payload를 가진 구조로 되어있는데 특별한 이유로 변경하지 않는 이상 1500bytes로 고정되어 있다.

Packet의 Header에는 IP 헤더와 TCP 헤더가 각각 20bytes 씩 할당된다. 즉 헤더의 크기는 총 40bytes이며, 남은 Payload 부분이 1460bytes를 차지한다.

 

Transport Layer의 전송 단위인 Segment가 IP 헤더와 TCP 헤더로 Encapsulation된 형태를 Packet이라 지칭하기 때문에 위에서 언급했던 것처럼 Segment의 최대 크기인 MSS는 Packet의 Payload의 최대 용량인 1460bytes로 할당되는 것이다.

만약 Packet의 MTU 용량이 변화하여 Payload의 용량 또한 변한다면 Segment의 MSS 또한 Payload의 용량에 맞춰 변화한다.

TCP Transport

Packet은 다시 Encapsulation 되어 Frame에 감싸진채 수신 측으로 전달된다. TCP 프로토콜의 경우 이 송수신 과정에서 ACK를 통해 현재 송수신 진행 상태를 수신 측에서 송신 측으로 전달하게 되는데, ACK에는 Window Size라는 것이 포함되어 있다.

 

Window Size라는 것은 TCP Buffer의 현재 남아있는 용량을 의미한다. TCP Buffer에는 송신 측으로부터 전달받은 데이터가 Segment 단위로 저장되어 있다. 한 파일의 용량이 MSS보다 클 경우 여러 번에 걸쳐 데이터를 전송하게 되는데 이때 송신 측으로 전달받은 데이터를 임시로 보관하게 되는 곳이 TCP Buffer다.

 

TCP 프로토콜의 속도가 UDP에 비해 비교적 느린 이유가 이 ACK 때문이다. 수신 측 ACK에 담긴 Window Size가 만약 송신 측에서 전달하는 Segment의 MSS보다 작으면 Wait이 발생하게 되고 이로 인해 송수신이 지연되기 때문이다.

Comments