K 개발자

TCP 프로토콜 본문

OS/네트워크

TCP 프로토콜

ddingz 2021. 8. 3. 13:43

TCP 헤더 구조

TCPTransmission Control Protocol는 IP 프로토콜 위에서 연결형 서비스를 지원하는 전송 계층 프로토콜로, 인터넷 환경에서 기본으로 사용한다.
TCP에서 제공하는 주요 기능은 다음과 같다.

  • 연결형 서비스를 제공한다.
  • 전이중Full Duplex 방식의 양방향 가상 회선을 제공한다.
  • 신뢰성 있는 데이터 전송을 보장한다.

TCP는 데이터를 세그먼트Segment라는 블록 단위로 분할해 전송한다.
전송되는 블록의 크기는 네트워크 부하 정도, 윈도우 크기 등의 영향을 받으며, 가변 크기를 지원한다.
TCP는 세그먼트를 하나의 단위로 간주하여 순서 번호를 관리하지 않는다.
대신 세그먼트에 실려 전송되는 데이터의 바이트 개수를 순서 번호에 반영한다.

TCP 헤더의 구조

TCP의 세그먼트는 위와 같은 헤더 구조로 시작하고, 전송 데이터가 뒤따른다.
그림 상단의 숫자는 비트 수이다.

TCP 헤더의 필드

  • Source Port/Destination Port(송신 포트/수신 포트) : TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당된 네트워크 포트 주소이다.
  • Sequence Number(순서 번호) : 송신 프로세스가 지정하는 순서 번호이다.
  • Acknowledgement Number(응답 번호) : 수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용한다.
  • Data Offset(데이터 옵셋) : TCP 세그먼트가 시작되는 위치를 기준으로 데이터의 시작 위치를 나타내므로 TCP 헤더의 크기가 된다.
  • Reserved(예약) : 예약 필드이다.
  • Window(윈도우) : 슬라이딩 윈도우 프로토콜에서 수신 윈도우의 버퍼 크기를 지정하려고 사용하며, 수신 프로세스가 수신할 수 있는 바이트의 수를 표시한다.
  • Checksum(체크섬) : TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터 모두에 대한 변형 오류를 검출하려고 사용한다.
  • Urgent Pointer(긴급 포인터) : 긴급 데이터를 처리하기 위한 것이다.

TCP 헤더의 플래그 비트

TCP 헤더에는 플래그 비트가 8개 정의되어 있는데, 처음 2개 비트는 혼잡 제어 용도로 사용된다.
나머지 6개 필드는 값이 1이면 다음과 같은 의미를 갖는다.

  • URG : Urgent Pointer 필드가 유효한지를 나타낸다.
  • ACK : Acknowledgement Number 필드가 유효한지를 나타낸다.
  • PSH : 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달하도록 지시할 때 사용한다.
  • RST : 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용한다.
  • SYN : 연결 설정 요구를 의미하는 플래그 비트이므로 가상 회선 연결을 설정하는 과정에서 사용한다.
  • FIN : 한쪽 프로세스에서 더는 전송할 데이터가 없어 연결을 종료하고 싶다는 의사 표시를 상대방에게 알리려고 사용한다.

혼잡 제어

최근에 TCP에 추가된 ECNExplicit Congestion Notification 기능은 라우터가 송신 프로세스에 명시적으로 혼잡 발생을 알려주어 송신 프로세스 스스로 트래픽을 완화하는 기술이다.
TCP는 ECN 기능을 지원하기 위해 CWR 필드와 ECE 필드를 정의한다.

  • CWRCongestion Window Reduced : ECE 비트를 수신한 송신 프로세스가 전송 윈도우 크기를 줄였음을 통지하는 것이 목적이며, 더 이상의 ECE를 전송하지 말라는 의미이다.
  • ECEExplicit Congestion Notification Echo : ECN-Echo로도 약칭되며, 네트워크 트래픽이 많아질 때 라우터가 송신 프로세스에 명시적으로 혼잡을 알리려고 사용한다.

캡슐화

TCP 세그먼트의 캡슐화

상위 계층에서 내려온 전송 데이터는 TCP 헤더 뒤에 추가되어 TCP 세그먼트를 구성한다.
TCP 세그먼트는 다시 IP 프로토콜로 보내지고, IP 헤더에 캡슐화되어 데이터 링크 계층으로 보내진다.


포트 번호

포트Port 번호는 TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식이다.
TCP와 UDP는 별도의 포트 주소 공간을 관리하므로 동일한 포트 번호를 사용할 수 있다.
즉, 두 프로토콜에서 동일한 포트 번호를 할당해도 서로 다른 포트로 간주된다.
인터넷 환경에서 많이 사용하는 네트워크 응용 서비스의 서버 프로세스에 할당된 포트 번호를 Well-known 포트라 하는데, 전 세계 모든 컴퓨터가 동일한 포트 번호를 사용하도록 권고받고 있다.
Well-known 포트는 다음과 같다.

서비스 포트 번호
FTP(데이터 채널) 20
FTP(제어 채널) 21
Telnet(텔넷) 23
SMTP 25
DNS 53
TFTP 69
HTTP 80
rlogin 513
rsh 514
portmap 111

'OS > 네트워크' 카테고리의 다른 글

UDP 프로토콜  (0) 2021.08.04
TCP 프로토콜을 이용한 데이터 전송  (0) 2021.08.04
전송 계층의 기능  (0) 2021.08.02
기타 네트워크 계층 프로토콜  (0) 2021.08.02
이동 IP 프로토콜  (0) 2021.08.01
Comments