TCP 혼합 제어 정책
TCP는 혼잡 제어 방식을 여럿 혼합해 혼합 제어 정책을 사용한다. 혼잡이 발생하면 윈도우 크기를 줄이거나 유지해서 혼잡을 회피하려고 한다. TCP Tahoe, TCP Reno, New Reno, Cubic 등 다양한 혼잡 제어 정책이 있는데, 이 중에서 TCP Tahoe와 TCP Reno가 대표적이다.
두 방식 모두 느린 시작 방식을 사용하다 임계점을 넘어가며 AIMD 방식으로 전환한다. 이 때, 임계점은 느린 시작 방식의 임계점을 의미해서 ssthresh(slow start threshold)라고 한다.
1. TCP Tahoe
TCP Tahoe(타호)는 초반에 느린 시작을 사용해 혼잡 윈도우 크기를 지수적으로 키운다. 혼잡이 발생했다고 판단되면 혼잡이 발생한 윈도우 크기의 절반을 ssthresh로 설정하고 혼잡 윈도우의 크기를 초기화한다.

위 그림에서 그래프 위의 실선은 ssthresh를 나타내며, 값은 4로 설정했다.
혼잡 윈도우 크기를 지수적으로 키우다가 ssthresh 값인 4에 도달했을 때, AIMD를 사용해 혼잡 윈도우 크기를 선형적으로 키운다.
그러다가 혼잡 윈도우 크기가 6이 되었을 때, 혼잡으로 3 Duplicate ACK가 발생한다.
그러면 혼잡 윈도우 크기를 1로 초기화하고 ssthresh 값을 혼잡이 발생한 크기인 6의 절반인 3으로 줄인다. 이후 다시 윈도우 크기가 4일 때, 타임아웃이 발생하면 윈도우 크기를 1로 초기화하고 ssthresh 값을 2로 변경한다.
2. TCP Reno
TCP Reno(레노)는 TCP Tahoe와 동일하게 초반에는 느린 시작을 사용하지만, 3 Duplicate ACK와 타임아웃을 구분해 대응한다.
3 Duplicate ACK가 발생하면, 혼잡 윈도우 크기를 절반으로 줄이고, 줄인 혼잡 윈도우의 크기를 ssthresh 값으로 설정한다.
이 부분은 빠른 회복과 동일한 방식이다. 하지만 타임아웃이 발생하면 TCP Tahoe와 마찬가지로 혼잡 윈도우 크기를 1로 초기화한다. 이 때, ssthresh 값은 변경하지 않는다.

위 그림에서는 혼잡 윈도우 크기를 지수적으로 키우다가 ssthresh 값인 4에 도달했을 때, AIMD를 사용해 혼잡 윈도우 크기를 선형적으로 키운다.
그러다가 혼잡 윈도우 크기가 6에 도달했을 때, 3 Duplicate ACK가 발생하면 혼잡 윈도우의 크기를 절반으로 줄이고 ssthresh 값도 혼잡 윈도우 크기가 5가 되었을 때 타임아웃이 발생하면 ssthresh 값은 유지하지만, 혼잡 윈도우 크기는 1로 줄인다.
이후 혼잡 윈도우 크기는 지수적으로 증가하다가, ssthresh 값인 3에 도달하면 선형적으로 증가한다.