TCP 혼잡제어
- end-end control
- TCP는 네트워크가 혼잡한지 직접적으로 알 수 없음
- 지속적으로 Sender의 전송량을 변화시키며 혼잡제어를 한다.
- 지속적으로 전송 패킷의 양을 늘리고, 혼잡 발생 시 window size를 줄임.
- Sender는 Timeout 또는 응답패킷이 3번 중복될 때 네트워크가 혼잡하다고 인식한다.
- Timeout을 패킷 중복보다 심각한 혼잡으로 인식한다.
- 혼잡제어 알고리즘 종류
AIMD
- 패킷 손실이 발생하면 window size를 반으로 줄인다. (최소 : 1)
- RTT마다 1mss씩 증가시킨다. → 선형 증가
- 혼잡 회피라고도 한다. → 느리게 증가시키기 때문!
![](https://velog.velcdn.com/images/jsgcom/post/fd16c248-b545-494a-a7ff-063a96ce83e3/image.png)
- 절반으로 줄어든 시점 = 혼잡 발생 시점
- 상대적으로 심각하지 않은 '중복 패킷 응답' 발생 시 AIMD 알고리즘을 수행한다.
# MSS : Maximum segment size, 한번에 전송하는 패킷 개수
Slow start
- 혼잡이 발생하면 1MSS로 초기화
- ACK마다 1MSS씩 증가 → RTT마다 윈도우사이즈가 2배가 됨
- Threshold : 혼잡 발생 당시 MSS의 절반
![](https://velog.velcdn.com/images/jsgcom/post/a8012f08-4729-4a45-a8d6-d79fc68a8707/image.png)
- MSS가 1이 된 시점 = 혼잡 발생 시점
- 상대적으로 심각한 'Timeout' 발생 시 Slow start 알고리즘을 수행한다.
- Slow start 알고리즘 수행 중 Threshold에 도달하면 혼잡 회피를 위해 선형적으로 증가한다.
- RTT 5 ~ 13, RTT 18 ~ 24 : 선형증가