Congestion
한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 된다. 이런 경우 호스트들은 또 다시 재전송을 하게 되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시키게 된다. 이러한 상황을 피하기 위해 송신촉에서 보내는 데이터의 전송 속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡 제어라고 한다.
TCP Congestion Control : AIMD
Additive Increase : 패킷 손실이 일어나기 전까지 전송률을 증가시킨다.
Multiplicative Decrease : 패킷 손실이 일어난다면 전송률을 반으로 깎는다.
혼잡 제어는 cwnd로 표시되는 혼잡 윈도우(Congestion Window)를 추적한다. 이는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가한다. cwnd는 관찰된 네트워크 혼잡에 응답하여 동적으로 조정된다.
TCP Slow Start
- AIMD 방식이 네트워크의 수용량 주변에서는 효율적을 작동하지만, 처음에 전송 속도를 올리는 데에 시간이 오래 걸리는 단점이 있다.
- Slow Start는 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 cwnd 사이즈를 1씩 늘려준다. 즉 한 주기가 지나면 cwnd의 사이즈가 2배가 된다.
- 전송 속도는 지수함수 꼴로 증가하지만 혼잡 현상이 발생하면 cwnd를 1로 떨어뜨린다.
- 처음에는 네트워크의 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 예상할 수 있다.
- 그러므로 혼잡 현상이 발생하였던 ssthread(cwnd의 절반)까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킨다.
TCP Congestion Avoidance & Fast Recovery
- 손실된 세그먼트에 대한 ACK이 도착하면 TCP는 cwnd 혼잡 회피 상태로 들어간다. 즉 cwnd 값은 1로 하고, ssthresh 값은 손실 이벤트가 발생할 때의 cwnd 값의 반으로 한다.
- TCP Tahoe의 경우 혼잡이 발생하면 cwnd를 1로 줄이고 slow start 단계로 들어간다.
- TCP Reno의 경우 혼잡이 발생하면 cwnd를 반으로 줄이고 선형 증가 시킨다.