TCP (Transmission Control Protocol)TCP·IP 스택 Transport 계층의 연결 지향(connection-oriented) 프로토콜. 3-Way Handshake로 연결을 설정한 뒤 Sequence/Acknowledge 기반으로 신뢰성 있는 바이트 스트림을 제공한다.

주요 특징

  • 연결 지향 — 통신 시작 전 연결을 설정. 연결된 소켓은 양 프로세스를 잇는 byte stream.
  • 신뢰성 있는 전송 — Sequence/Acknowledge 번호로 정상 송수신 확인, 오류 시 자동 재전송.
  • 데이터 경계 없음 — 소켓에 데이터가 쌓이는 스트림 구조. Application은 순서 보존 가정 가능.
  • Flow Control — 수신 버퍼 오버플로우 방지를 위해 송신량 조절.
  • Congestion Control — 네트워크 혼잡 시 송신량 조절.

3-Way Handshake

연결 설정(Connection Establish)을 위한 3단계 핸드셰이크:

  1. Client → Server: SYN
  2. Server → Client: SYN + ACK
  3. Client → Server: ACK

연결 완료 후 송·수신 프로세스 간 바이트 스트림 형성. TCP도 UDP와 동일하게 서버 IP·Port를 사전에 알고 있어야 함.

Sequence / Acknowledge 메커니즘

  • 송신: Seq. 번호를 부여하여 전송.
  • 수신: 정상 수신 시 Seq. + 1 을 Ack. 로 회신.
  • 일정 시간 동안 Ack.이 오지 않으면 손실로 간주하고 재전송.
  • 누적 ACK (cumulative ACK) — 중복 ACK나 ACK 일부 손실이 발생해도 재전송 불필요한 경우 처리.

Flow Control

수신자의 Rx 버퍼 읽기 속도보다 송신이 빠르면 오버플로우 발생 → 재전송 폭증 → 네트워크 성능 저하. 수신 버퍼 상태를 송신자가 참조하여 전송량 조절.

Stop & Wait

  • 수신 노드의 ACK 수신 후 새 메시지 전송.
  • ACK 메시지에 Window Size(수신 가능 버퍼 크기) 포함.
  • 단순하지만 ACK 대기로 인한 전송 지연 문제.

Sliding Window

  • 최초 연결 시 수신자 Window Size 수신.
  • 클라이언트는 Window Size 만큼 ACK 없이 연속 전송 가능.
  • Stop & Wait의 지연 문제 해결.

오류 제어 (ARQ)

ARQ (Automatic Repeat Request) — 재전송 기반 오류 제어. 에러 감지 조건:

  • 일정 시간 이상 ACK 미수신
  • 중복 ACK 수신

Go-back-N vs Selective Repeat

구분Go-back-NSelective Repeat
에러 발생 시손상된 프레임 이후 모두 재전송손상된 프레임만 재전송
구현 난이도단순, 구현 쉬움프레임 재배열로 복잡
버퍼 요구데이터 폐기로 작은 버퍼재배치용 큰 버퍼 필요

Fast Retransmit

  • 동일 ACK가 3번 이상 수신되면 ACK되지 않은 segment 중 가장 작은 Seq. #를 Timeout을 기다리지 않고 재전송.

Delayed Acknowledge

  • ACK 오버헤드를 줄이기 위해 일정 타이머 기준으로 모아서 ACK 전송.

Congestion Control

전송 계층이 네트워크 혼잡을 감지해 제어. 라우터 버퍼 오버플로우 → 메시지 손실 → 재전송 → 혼잡 악화 순환을 방지. 4가지 알고리즘:

AIMD (Additive Increase / Multiplicative Decrease)

TCP 혼잡 제어의 핵심 원리.

  • Multiplicative Decrease — 패킷 손실 감지 시 송신 속도를 절반으로 감소.
  • Additive Increase — 성공적 전송 시 조금씩 속도 증가.

Slow Start

  • 연결 초기 전송 패킷 수 제어.
  • 송신 Window Size를 지수적으로 증가시키며 네트워크 부하 최소화하에 최대 속도 도달.

Fast Recovery

  • 패킷 손실 감지 시 Window Size를 반으로 줄인 뒤 조금씩 증가시키며 전송 지속.

Fast Retransmit

중복 ACK 기반 조기 재전송 (위 오류 제어 참조).

프로그래밍 모델

  • 소켓 생성 → connect() 수행(연결 설정) → send() / recv() 사용.
  • 데이터 경계를 구분하지 않고 소켓에 데이터가 쌓이는 구조.

UDP와의 비교

항목TCPUDP
연결Connection-orientedConnectionless
신뢰성보장 (Seq/Ack, 재전송)비보장
순서 보장아니요
헤더 크기20 Byte+ (가변)8 Byte 고정
속도상대적 느림빠름
응용파일 전송, 웹 (HTTP), 이메일스트리밍, DNS, 게임

같이 보기