CS

[CS] TCP 혼잡 제어(TCP Congestion Control)

Ruppi 2025. 2. 1. 22:47

TCP 혼잡 제어(TCP Congestion Control)

인터넷 환경에서 데이터 전송 시 네트워크의 혼잡을 효과적으로 관리하는 것은 매우 중요합니다. 특히 여러 장치가 동시에 데이터를 주고받는 상황에서는 네트워크 혼잡이 발생하기 쉽습니다. 이때 TCP 혼잡 제어(TCP Congestion Control) 메커니즘이 중요한 역할을 합니다.

이번 포스팅에서는 TCP 혼잡 제어의 개념, 동작 원리, 주요 알고리즘에 대해 자세히 알아보겠습니다.


📦 TCP 혼잡 제어란?

TCP 혼잡 제어(Congestion Control) 는 네트워크의 혼잡 상태를 감지하고, 이에 따라 데이터 전송 속도를 조절하여 네트워크의 안정성을 유지하는 메커니즘입니다.

✅ TCP 혼잡 제어의 필요성

  • 네트워크 과부하 방지: 과도한 트래픽으로 인한 패킷 손실 방지
  • 효율적인 대역폭 사용: 가용한 대역폭을 최대한 활용하면서도 안정적인 전송 유지
  • 신뢰성 보장: 데이터가 안정적으로 전송되도록 손실과 재전송을 최소화

⚙️ TCP 혼잡 제어의 핵심 요소

TCP는 네트워크 혼잡을 감지하고 전송 속도를 조절하기 위해 다음과 같은 요소를 활용합니다.

1️⃣ 혼잡 윈도우 (Congestion Window, cwnd)

  • 송신자가 네트워크로 보낼 수 있는 최대 데이터 양을 결정하는 변수입니다.
  • cwnd 값이 커지면 전송 속도가 증가하고, 작아지면 전송 속도가 감소합니다.

2️⃣ 혼잡 신호 감지 방법

  • 패킷 손실: 타임아웃 발생 또는 3중 중복 ACK(Duplicate ACK) 수신 시 혼잡 발생으로 간주
  • ACK 수신 속도: ACK가 느리게 도착하면 혼잡 가능성으로 해석

3️⃣ 혼잡 제어 단계

TCP 혼잡 제어는 Slow Start → Congestion Avoidance → Fast Recovery 단계를 반복하며 혼잡 상태에 대응합니다.


🚀 TCP 혼잡 제어 알고리즘

TCP 혼잡 제어는 다음과 같은 3가지 주요 알고리즘으로 구성됩니다.

📈 1. 슬로우 스타트 (Slow Start)

  • 초기 연결 시 또는 혼잡 발생 후 전송 속도를 빠르게 증가시키는 단계입니다.
  • cwnd1 MSS(Maximum Segment Size)로 시작하고, ACK를 받을 때마다 1 MSS씩 증가합니다.
  • 매 RTT마다 전송 속도가 2배로 증가지수적 성장 (Exponential Growth)

동작 예시

  1. cwnd = 1 MSS로 시작 → 첫 번째 패킷 전송
  2. ACK 수신 → cwnd = 2 MSS로 증가
  3. 2개의 패킷 전송 → 각각 ACK 수신 시 cwnd = 4 MSS로 증가
  4. 이러한 과정이 계속되어 빠르게 전송 속도가 증가합니다.

슬로우 스타트 종료 조건:

  • cwndssthresh(slow start threshold) 에 도달하면 혼잡 회피(Congestion Avoidance)로 전환
  • 패킷 손실이 발생하면 다시 cwnd = 1 MSS로 초기화

📉 2. 혼잡 회피 (Congestion Avoidance)

  • 슬로우 스타트 단계 이후 안정적인 전송 속도 유지를 목표로 합니다.
  • cwnd선형적으로 증가(Additive Increase) 합니다:
    • 매 RTT마다 cwnd1 MSS씩 증가시켜 대역폭을 탐색
  • 혼잡이 감지되면 cwnd절반으로 감소(Multiplicative Decrease) 합니다.

동작 예시

  1. cwnd = 16 MSS일 때 패킷 손실 발생 → cwnd = 8 MSS로 감소
  2. 이후 매 RTT마다 cwnd를 1 MSS씩 증가시켜 혼잡 여부를 탐색
  3. 다시 혼잡 발생 시 cwnd를 절반으로 감소

이 방식은 AIMD(Additive Increase, Multiplicative Decrease) 원칙을 기반으로 합니다.


⚡ 3. 빠른 회복 (Fast Recovery)

  • 3중 중복 ACK(Triple Duplicate ACK) 를 수신하면, 패킷 손실을 감지하고 빠르게 복구하는 단계입니다.
  • 타임아웃 없이 즉시 손실된 패킷을 재전송하여 성능 저하를 최소화합니다.

동작 방식

  1. 패킷 손실 감지(3중 중복 ACK 수신) → cwnd절반으로 감소
  2. 손실된 패킷을 빠르게 재전송(Fast Retransmit)
  3. 새로운 ACK가 도착하면 혼잡 회피(Congestion Avoidance) 단계로 전환

🔄 TCP 혼잡 제어의 전체 흐름

1️⃣ 연결 초기화
      ↓
2️⃣ Slow Start (지수적 증가)
      ↓ (cwnd ≥ ssthresh 또는 패킷 손실 발생)
3️⃣ Congestion Avoidance (선형적 증가)
      ↓ (패킷 손실 감지 시)
4️⃣ Fast Recovery (빠른 재전송 및 복구)
      ↓ (복구 완료)
5️⃣ 다시 Congestion Avoidance로 복귀

📊 AIMD: TCP 혼잡 제어의 핵심 원칙

TCP 혼잡 제어는 AIMD (Additive Increase, Multiplicative Decrease) 원칙에 기반합니다.

⚡ AIMD의 구성 요소

  • Additive Increase (선형 증가):
    혼잡이 발생하지 않으면 cwnd를 매 RTT마다 1 MSS씩 선형적으로 증가합니다.
    → 네트워크의 여유 대역폭을 탐색하며 서서히 전송 속도를 높이는 방식입니다.
  • Multiplicative Decrease (배수 감소):
    혼잡이 발생(예: 패킷 손실)하면 cwnd즉시 절반으로 감소하여 전송 속도를 급격히 줄입니다.
    → 네트워크 혼잡을 빠르게 완화하기 위한 대응입니다.

🚀 AIMD의 효과

  • 혼잡 방지:
    혼잡 발생 시 즉각적인 속도 감소로 네트워크 과부하 방지
  • 대역폭 최적화:
    여유 대역폭을 최대한 활용하기 위해 선형적으로 전송 속도 증가
  • 공정성(Fairness):
    여러 TCP 연결이 병목 구간을 공유할 때 공평한 대역폭 분배 보장
  • 안정성(Stability):
    급격한 혼잡 발생에도 빠르게 복구하고, 네트워크 안정성 유지