혼잡(congetion)하다는 것은 너무 많은 source가 너무 많은 data를 너무 빨리 전송해 네트워크가 이를 처리하지 못하는 상태를 말한다. 조금 더 자세히 설명하자면 데이터의 양이 수신 측에서 처리할 수 있는 양을 초과하게 되면 송신 측에서는 수신 측에서 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크가 더욱더 혼잡하게 된다. 이러한 혼잡 상태를 제어하는 것을 혼잡 제어라고 한다.
TCP 혼잡 제어 방법
AIMD (Additive Increase Multicative Decrease)
송신 측이 transmission rate(window size)를 패킷 손실이 일어날 때까지 증가시키는 식의 접근법이다.
AIMD는 window size를 1MSS씩 밖에 증가시키지 않기 때문에 네트워크의 모든 대역을 활용하여 빠른 속도로 통신하기까지 시간이 오래 걸린다는 단점이 있다.
TCP Slow Start
Slow Start는 송신 측이 window size를 1부터 패킷 손실이 일어날 때까지 지수승(exponentially)으로 증가시키는 것을 말한다.
처음에는 window size가 1이라 속도가 느리나 지수승으로 window size가 커지므로 속도도 빠르게 증가한다.
Slow Start에서 꼭 알아야 할 임계점(Threshold) 개념이 있다.
TCP 혼잡 제어 정책
TCP Tahoe
TCP Tahoe는 처음에는 Slow Start를 사용하다가 임계점(Threshold)에 도달하면 AIMD 방식을 사용한다.
TCP Tahoe 방식은 3 duplicate ACKs를 만나고 window size가 다시 1부터 키워나가야 하므로 속도가 느리다. 이를 해결할 수 있는 방식이 TCP Reno이다.
TCP Reno
TCP Reno는 TCP Tahoe와 비슷하지만 3 dupicate ACKs와 timeout을 구분한다는 점이 다르다.
출처: https://code-lab1.tistory.com/30?category=1213004 [코드 연구소:티스토리]