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)
- 초기 연결 시 또는 혼잡 발생 후 전송 속도를 빠르게 증가시키는 단계입니다.
cwnd
를 1 MSS(Maximum Segment Size)로 시작하고, ACK를 받을 때마다 1 MSS씩 증가합니다.- 매 RTT마다 전송 속도가 2배로 증가 → 지수적 성장 (Exponential Growth)
동작 예시
cwnd = 1 MSS
로 시작 → 첫 번째 패킷 전송- ACK 수신 →
cwnd = 2 MSS
로 증가 - 2개의 패킷 전송 → 각각 ACK 수신 시
cwnd = 4 MSS
로 증가 - 이러한 과정이 계속되어 빠르게 전송 속도가 증가합니다.
슬로우 스타트 종료 조건:
cwnd
가ssthresh
(slow start threshold) 에 도달하면 혼잡 회피(Congestion Avoidance)로 전환- 패킷 손실이 발생하면 다시
cwnd = 1 MSS
로 초기화
📉 2. 혼잡 회피 (Congestion Avoidance)
- 슬로우 스타트 단계 이후 안정적인 전송 속도 유지를 목표로 합니다.
cwnd
를 선형적으로 증가(Additive Increase) 합니다:- 매 RTT마다
cwnd
를 1 MSS씩 증가시켜 대역폭을 탐색
- 매 RTT마다
- 혼잡이 감지되면
cwnd
를 절반으로 감소(Multiplicative Decrease) 합니다.
동작 예시
cwnd = 16 MSS
일 때 패킷 손실 발생 →cwnd = 8 MSS
로 감소- 이후 매 RTT마다
cwnd
를 1 MSS씩 증가시켜 혼잡 여부를 탐색 - 다시 혼잡 발생 시
cwnd
를 절반으로 감소
이 방식은 AIMD(Additive Increase, Multiplicative Decrease) 원칙을 기반으로 합니다.
⚡ 3. 빠른 회복 (Fast Recovery)
- 3중 중복 ACK(Triple Duplicate ACK) 를 수신하면, 패킷 손실을 감지하고 빠르게 복구하는 단계입니다.
- 타임아웃 없이 즉시 손실된 패킷을 재전송하여 성능 저하를 최소화합니다.
동작 방식
- 패킷 손실 감지(3중 중복 ACK 수신) →
cwnd
를 절반으로 감소 - 손실된 패킷을 빠르게 재전송(Fast Retransmit)
- 새로운 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):
급격한 혼잡 발생에도 빠르게 복구하고, 네트워크 안정성 유지