송신 호스트가 혼잡한 정도에 맞춰 유동적으로 전송량을 조절하는 기능이다.
송신 호스트는 혼잡 윈도우를 혼잡 제어 알고리즘을 통해 혼잡 윈도우 크기를 설정해야 한다.
혼잡: 많은 트래픽으로 인해 패킷의 처리 속도가 늦어지거나 유실될 수 있는 네트워크 상황
혼잡 윈도우: 혼잡 없이 전송할 수 있는 데이터의 양
AMID (Additive Increase / Multiplicative Decrease)
가장 기본적인 혼잡 제어 알고리즘이다.
- 처음에 패킷을 하나씩 보내고 문제가 발생하지 않으면 혼잡 윈도우 사이즈를 RTT마다 1씩 증가
- 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷 전송 속도를 절반으로 감소
- 네트워크에 늦게 들어온 호스트가 처음에는 불리하지만, 시간이 흐르면서 평형상태로 수렴한다.
- 단점으로 처음에 전송 속도를 올리는 데 시간이 오래걸리고 네트워크가 혼잡해지는 상황을 미리 감지하지 못한다.

Slow Start
- 혼잡 윈도우 사이즈를 1부터 시작하여 문제 없이 수신된 ACK 세그먼트 하나당 1씩 증가
- RTT마다 2배씩 지수적으로 증가 (초기 전송 속도를 빠르게 확보)
- 느린 시작 임계치까지 윈도우 값을 증가
느린 시작 임계치
| 상황 분류 | 방법 |
|---|---|
| 타임아웃 발생 | 혼잡 윈도우 값을 1로 설정, 느린 시작 임계치를 혼잡이 감지되었을 시점의 혼잡 윈도우 값의 절반으로 초기화한 뒤 느린 시작을 재개 |
| 혼잡 윈도우 ≥ 느린 시작 임계치 | 느린 시작 종료, 혼잡 회피 알고리즘 수행 |
| 세번의 중복 ACK 발생 | 빠른 재전송 후 빠른 회복 알고리즘 수행 |
혼잡 회피 알고리즘
- 혼잡 윈도우가 느린 시작 임계치를 넘어서면 발생
- 혼잡 여지가 있으니 혼잡 윈도우를 RTT마다 1 MSS 씩 증가시키는 알고리즘이다.

빠른 회복 알고리즘
- 3번의 중복된 ACK 세그먼트 수신시 동작
- 빠른 전송률 회복을 위해 느린 시작은 건너뛰고 혼잡 회피를 수행하는 알고리즘이다.
- 단, 빠른 회복 도중에 타임아웃이 발생하면 다시 느린 시작을 수행한다.
출처 및 참고자료
TCP/IP (흐름제어/혼잡제어) | 👨🏻💻 Tech InterviewReady for Tech-Interview
gyoogle.dev
사이 좋게 네트워크를 나눠 쓰는 방법, TCP의 혼잡 제어혼잡 제어란, 말 그대로 네트워크의 혼잡 상태를 파악하고 그 상태를 해결하기 위해 데이터 전송을 제어하는 것을 이야기한다. 네트워크는 워낙 광대한 블랙박스이기 때문에 정확히 어디서 어떤 이유로 전송이 느려지는지는 파악하기 힘들지만, 단순히 “느려지고있다”라는 상황 정도는 각 종단에서도 충분히 파악할 수 있다. 그냥 데이터를 보냈는데 상대방으로부터 응답이 늦게 오거나 안오면 뭔가 문제가 있다는 것이니 말이다.