TCP(Transmission Control Protocol)는 Internet Protocol Suite Transport 계층에서 IP 위에 얹혀 동작하는 연결 지향(connection-oriented) 프로토콜로, 데이터를 보내기 전에 연결을 수립해 두 프로세스 사이에 순서와 신뢰성이 보장된 바이트 스트림을 만든다[1]. UDP가 최소한의 오버헤드로 개별 데이터그램을 전달하는 것과 달리, TCP는 시퀀스 번호·확인응답·재전송·흐름 제어 절차를 두어 그 대가로 신뢰성을 확보한다.

세그먼트 헤더 구조

TCP가 실어 나르는 데이터 단위인 세그먼트(segment)의 헤더는 Source/Destination Port·Sequence Number·Acknowledgment Number 같은 고정 필드와 최대 40바이트의 Options로 구성돼 총 20~60바이트 범위를 갖는다[1].

0 16 31 Source Port Destination Port Sequence Number Acknowledgment Number Data Offset 제어 비트(URG·ACK·PSH·RST·SYN·FIN) Window Checksum Urgent Pointer Options(최대 40바이트, 가변)

Data Offset은 헤더 길이를 32비트 워드 단위로 나타내고, 이어지는 6개의 제어 비트(URG·ACK·PSH·RST·SYN·FIN)는 세그먼트의 용도를, Window는 수신 가능한 데이터 양을, Checksum은 세그먼트의 손상 여부를 나타낸다[1].

연결 수립과 종료: 3-Way Handshake

TCP는 통신을 시작하기 전 3-way handshake로 연결을 수립한다. 클라이언트가 SYN을, 서버가 SYN과 ACK를 함께, 클라이언트가 다시 ACK를 보내는 세 단계를 거쳐 양쪽의 시작 시퀀스 번호를 동기화하는데, 시퀀스 번호가 네트워크 전역에서 공유되는 시계에 매여 있지 않기 때문에 이 절차가 필요하다. 연결 종료는 각 방향에서 FIN·ACK를 교환해 이뤄진다[1].

Client Server SYN (seq=x) SYN, ACK (seq=y, ack=x+1) ACK (ack=y+1)

신뢰성 있는 데이터 전송

TCP는 세그먼트에 실리는 모든 옥텟에 시퀀스 번호를 매기고, 수신 측은 지금까지 받은 옥텟 다음 번호를 확인응답(acknowledgment)으로 돌려보낸다. 확인응답은 누적(cumulative) 방식이어서 번호 X에 대한 확인응답은 X 이전 모든 옥텟이 도착했음을 뜻하며, 일정 시간 안에 확인응답이 오지 않으면 송신 측은 유실로 간주하고 재전송한다[1] — 이 재전송을 앞당기는 조건과 네트워크 혼잡에 따른 속도 조절은 TCP Congestion Control에서 다룬다.

흐름 제어

수신 노드의 처리 속도가 송신 노드를 따라가지 못하면 수신 버퍼가 넘쳐 정상적인 수신이 불가능해진다. TCP는 헤더의 Window 필드로 수신 측이 지금 받아들일 수 있는 데이터 양(수신 윈도우)을 매 확인응답마다 함께 알려, 송신 측이 그 한도 안에서는 확인응답을 기다리지 않고 연속으로 데이터를 보낼 수 있게 하는 슬라이딩 윈도우(sliding window) 방식으로 흐름을 제어한다[1]. 매번 확인응답을 받은 뒤에야 다음 데이터를 보내는 단순한 stop-and-wait 방식보다 대기 시간을 줄여 처리량을 높인다.

확인응답 오버헤드 줄이기: Delayed ACK

수신한 세그먼트마다 확인응답을 즉시 보내면 그 자체가 트래픽 오버헤드가 된다. TCP 구현은 일정 시간 확인응답을 모아 한 번에 보내는 delayed ACK를 쓸 수 있지만, 응답 없이 방치되는 세그먼트가 없도록 적어도 두 번째 전체 크기 세그먼트마다는 확인응답을 보내야 한다[2].

참고문헌

[1]
W. M. (ed. ) Eddy, “RFC 9293 — Transmission Control Protocol (TCP)”. 2022. [Online]. Available at: https://www.rfc-editor.org/rfc/rfc9293
[2]
R. (ed. ) Braden, “RFC 1122 — Requirements for Internet Hosts – Communication Layers”. 1989. [Online]. Available at: https://www.rfc-editor.org/rfc/rfc1122