📡 TCP 혼잡 제어(Congestion Control) – 핵심 개념과 알고리즘 총정리
🔎 혼잡 제어란?
TCP(Transmission Control Protocol)는 신뢰성 있는 전송을 보장하는 프로토콜입니다. 그런데 네트워크에 너무 많은 데이터가 한꺼번에 몰리면 혼잡(Congestion) 이 발생해 패킷 손실, 지연 증가 등의 문제가 생깁니다.
이런 상황을 방지하기 위해 TCP는 혼잡 제어 알고리즘을 통해 네트워크 상태를 판단하고 전송 속도를 동적으로 조절합니다.
🧠 TCP 전송 윈도우의 3가지 구성
TCP 전송 속도를 조절하는 핵심은 전송 윈도우입니다. 이건 3가지 중 최소값으로 결정됩니다:
- Congestion Window (cwnd): 혼잡 제어용 윈도우
- Receiver Window (rwnd): 수신 측의 버퍼 크기
- Advertised Window: 송신 측이 고려하는 실제 사용 가능한 윈도우
전송 윈도우 = min(cwnd, rwnd)
🚦 주요 TCP 혼잡 제어 알고리즘
1️⃣ Slow Start (느린 시작)
- 처음 연결 시 cwnd = 1 MSS로 시작해 전송 성공 시마다 2배씩 지수 증가.
- 갑자기 너무 빠르게 증가하면 네트워크가 감당 못하니, 일정 값인 ssthresh를 기준으로 다른 알고리즘으로 전환됨.
📌 목적: 갑자기 많은 데이터를 보내 네트워크를 폭주시키지 않기 위해 천천히 시작함.
2️⃣ Congestion Avoidance (혼잡 회피)
- cwnd가 ssthresh 이상이 되면 더 이상 지수 증가하지 않고, 선형 증가 (1 MSS씩 증가).
- 안정적인 전송 속도를 유지하면서 혼잡 여부를 탐색.
📌 목적: 혼잡을 방지하기 위해 신중히 속도 증가.
3️⃣ Fast Retransmit (빠른 재전송)
- 3번 중복 ACK를 받으면 타임아웃을 기다리지 않고 바로 패킷 재전송.
📌 목적: 패킷 손실을 빠르게 감지해 빠르게 복구.
4️⃣ Fast Recovery (빠른 회복)
- 패킷 손실 후 cwnd를 절반으로 감소시키고, 선형 증가 방식으로 혼잡 회피 모드로 전환.
📌 목적: 패킷 손실 이후에도 전송 속도를 완전히 줄이지 않고 빠르게 회복.
📈 혼잡 제어 알고리즘의 발전
알고리즘 특징 목적
Tahoe | Slow Start + Congestion Avoidance + Fast Retransmit | 손실 시 cwnd = 1로 완전히 초기화 |
Reno | Tahoe + Fast Recovery | 손실 후 cwnd 절반 유지로 빠른 회복 |
NewReno | Reno 개선. 여러 패킷 손실에도 Fast Recovery 유지 | 다수 손실에 효과적 |
Vegas | RTT 기반 혼잡 예측. 손실 없이 혼잡 탐지 | 예방 위주 혼잡 제어 |
CUBIC | 시간 기반 비선형 cwnd 증가 (리눅스 기본) | 대역폭 높은 환경에서 효율적 |
BBR (Bottleneck Bandwidth and RTT) | 구글 개발. 대역폭/지연 측정 기반 속도 제어 | 손실 기반이 아닌 모델 기반 제어 |
💡 각 알고리즘 간 비교 요약
기준 Tahoe Reno NewReno Vegas CUBIC BBR
손실 탐지 | 3 중복 ACK | 3 중복 ACK | 다수 중복 ACK | RTT 변화 감지 | 손실 기반 | 대역폭/지연 측정 |
복구 속도 | 느림 | 빠름 | 더 빠름 | 손실 예방 | 고속 회복 | 모델 기반 |
도입 시기 | 초창기 | 이후 기본 | 개선형 | 실험적 | 리눅스 기본 | 최신 (구글) |
✍️ 정리 한 줄 요약
TCP 혼잡 제어는 네트워크 상태를 반영해 속도를 조절하는 기법이며, 대표적으로 Slow Start → Congestion Avoidance → 손실 발생 시 Fast Retransmit & Fast Recovery 단계를 거칩니다. 최신에는 BBR처럼 예측 기반 제어도 사용됩니다.
'개발 > 네트워크' 카테고리의 다른 글
TCP와 HTTP의 관계 (0) | 2025.05.27 |
---|---|
VPN의 작동 원리 (0) | 2025.05.27 |
네트워크 데이터 단위 (0) | 2025.05.27 |
공유기 및 스위치에 대하여 (0) | 2025.05.27 |
TCP 송/수신 원리 (0) | 2025.05.27 |