TCP (Transmission Control Protocol)

shjk·2025년 4월 2일

1. 개요

TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 연결 지향형( connection-oriented ) 전송 계층 프로토콜이다. IP(Internet Protocol) 위에서 동작하며, 응용 계층(Application Layer)과 인터넷 계층(Internet Layer) 사이에서 통신을 담당한다.


2. 특징

🔹 연결 지향(Connection-oriented)

  • 통신을 시작하기 전, 3-way handshake를 통해 연결을 설정한다.
  • 연결이 완료되어야만 데이터 전송이 가능하다.

🔹 신뢰성 보장(Reliability)

  • 손실된 패킷은 재전송(retransmission) 된다.
  • 수신자는 패킷을 수신할 때마다 ACK(Acknowledgment) 신호를 보낸다.
  • 순서를 보장하며 데이터가 순차적으로 재조립된다.

🔹 흐름 제어(Flow Control)

  • 수신자의 처리 능력을 고려하여 전송 속도를 조절한다.
  • 슬라이딩 윈도우(Sliding Window) 기법을 사용함.

🔹 혼잡 제어(Congestion Control)

  • 네트워크 혼잡 상황을 감지하고, 전송 속도를 동적으로 조절한다.
  • 대표적인 알고리즘: AIMD(Additive Increase Multiplicative Decrease), Slow Start, Fast Retransmit, Fast Recovery

3. TCP 헤더 구조

TCP 헤더는 최소 20바이트에서 최대 60바이트까지 확장 가능하다.

필드크기설명
Source Port16 bits송신자의 포트 번호
Destination Port16 bits수신자의 포트 번호
Sequence Number32 bits전송 데이터의 순서를 나타냄
Ack Number32 bits수신이 완료된 데이터의 다음 순번
Data Offset4 bits헤더 길이
Reserved3 bits예약 필드
Flags9 bits제어 비트 (SYN, ACK, FIN 등)
Window Size16 bits수신자가 현재 수신 가능한 데이터 양
Checksum16 bits오류 검출
Urgent Pointer16 bits긴급 데이터 위치
Options가변선택 사항 (e.g., 윈도우 크기 조절 등)

4. 연결 과정: 3-Way Handshake

sequenceDiagram
    participant 클라이언트
    participant 서버
    클라이언트->>서버: SYN (Seq=x)
    서버->>클라이언트: SYN-ACK (Seq=y, Ack=x+1)
    클라이언트->>서버: ACK (Ack=y+1)

과정 설명

  1. 클라이언트는 서버에게 SYN 패킷 전송 (연결 요청)
  2. 서버는 클라이언트에게 SYN + ACK 패킷 전송 (수락 및 응답)
  3. 클라이언트는 서버에게 ACK 패킷 전송 (연결 확인)

→ 연결 성립 후 데이터 전송 시작


5. 연결 종료: 4-Way Handshake

sequenceDiagram
    participant 클라이언트
    participant 서버
    클라이언트->>서버: FIN
    서버->>클라이언트: ACK
    서버->>클라이언트: FIN
    클라이언트->>서버: ACK

→ FIN 패킷은 각각의 방향으로 독립적으로 종료 처리를 한다.


6. 흐름 제어: 슬라이딩 윈도우

송신자는 수신자의 윈도우 크기(Window Size) 만큼만 데이터를 전송할 수 있으며, 수신자가 ACK을 보낼 때 윈도우 크기를 조정함.

수식 표현 (최대 전송 가능 바이트 수):

[
\text{전송 가능 범위} = \text{Last ACKed Seq Num} + \text{Window Size}
]


7. 혼잡 제어 알고리즘

(1) Slow Start

  • 초기에는 cwnd (congestion window)를 1 MSS로 설정하고 지수적으로 증가시킴.

[
\text{cwnd} \leftarrow \text{cwnd} \times 2
]

(2) Congestion Avoidance

  • 임계값 이후에는 선형 증가

[
\text{cwnd} \leftarrow \text{cwnd} + 1
]

(3) Fast Retransmit & Fast Recovery

  • 동일한 ACK가 3번 오면 손실로 판단하고 재전송
  • 혼잡 상태를 완화하며 윈도우 크기를 조절

8. TCP vs UDP 비교

항목TCPUDP
연결 방식연결 지향비연결형
신뢰성보장보장하지 않음
전송 속도상대적으로 느림빠름
사용 예시HTTP, FTP, SMTP 등DNS, VoIP, 스트리밍 등

9. 결론

TCP는 인터넷에서의 신뢰성 있는 통신을 보장하기 위한 핵심 프로토콜로, 다양한 제어 기법을 통해 데이터 전송의 정확성과 순서를 보장한다. 이러한 특성으로 인해 대다수의 인터넷 응용 서비스에서 채택되어 사용되고 있다.

profile
백엔드 개발자

0개의 댓글