TCP CONGESTION

혼잡 제어와 cwnd

TCP는 수신자 여유가 아니라 네트워크 혼잡을 추정하기 위해 ACK, RTT, packet loss, ECN 신호를 보고 congestion window를 AIMD 방식으로 조정한다.

01

slow start

ACK가 올 때마다 cwnd를 빠르게 키워 가용 대역폭을 탐색한다.

exponential growth
02

avoidance

ssthresh 이후에는 RTT마다 완만하게 증가해 혼잡 근처를 조심스럽게 탐색한다.

additive increase
03

loss 감지

timeout이나 중복 ACK는 큐가 넘쳤거나 손실이 발생했다는 강한 신호다.

congestion signal
04

감소/회복

cwnd를 절반 또는 초기값으로 줄이고 새 ssthresh에서 다시 증가한다.

multiplicative decrease
timeout
강한 손실 신호 ACK가 오래 오지 않으면 cwnd를 크게 줄이고 slow start로 돌아간다.
RTO
3 dupACK
일부 손실 가능성 fast retransmit/fast recovery로 전체 연결을 완전히 멈추지 않고 회복한다.
빠른 재전송
ECN
손실 전 혼잡 알림 라우터가 패킷을 버리지 않고 혼잡 표시를 해 송신자가 미리 줄인다.
mark not drop
RTT 증가
큐잉 지연 신호 loss가 없어도 RTT가 계속 늘면 버퍼가 차고 있음을 의심한다.
bufferbloat

분석 기준

rwnd와 구분 수신 윈도우는 receiver buffer, cwnd는 network congestion 기준이다.
그래프 해석 sawtooth 모양은 AIMD가 혼잡 근처에서 증가와 감소를 반복한 흔적이다.
공정성 여러 TCP 흐름은 비슷한 RTT 조건에서 AIMD로 대역폭을 나눠 갖는다.