블로그 이사했습니다.
아래에서 글을 볼 수 있습니다.
https://code-lab1.com/tcp-%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4/
TCP 혼잡 제어란?
혼잡(congetion)하다는 것은 너무 많은 source가 너무 많은 data를 너무 빨리 전송해 네트워크가 이를 처리하지 못하는 상태를 말한다. 조금 더 자세히 설명하자면 데이터의 양이 수신 측에서 처리할 수 있는 양을 초과하게 되면 송신 측에서는 수신 측에서 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크가 더욱더 혼잡하게 된다. 이러한 혼잡 상태를 제어하는 것을 혼잡 제어라고 한다.
TCP 혼잡 제어의 여러 가지 방법을 알아볼 것인데, 그전에 TCP에 대해 잘 모르겠다면 다음 포스팅을 참고하자.
TCP 혼잡 제어 방법
AIMD (Additive Increase Multicative Decrease)
송신 측이 transmission rate(window size)를 패킷 손실이 일어날 때까지 증가시키는 식의 접근법이다.
- additive increase : 송신 측의 window size를 손실을 감지할때까지 매 RTT 마다 1 MSS씩 증가시킨다.
- multiplicative decrease : 손실을 감지했다면 송신측의 window size를 절반으로 감소시킨다.
AIMD는 window size를 1MSS씩 밖에 증가시키지 않기 때문에 네트워크의 모든 대역을 활용하여 빠른 속도로 통신하기까지 시간이 오래 걸린다는 단점이 있다.
TCP Slow Start
Slow Start는 송신 측이 window size를 1부터 패킷 손실이 일어날 때까지 지수승(exponentially)으로 증가시키는 것을 말한다.
- 초기 window size : 1 MSS
- 매 RTT마다 window size를 2배로 키움 ( ex : 1, 2, 4, 8, 16...)
- 패킷 손실을 감지하면 window size를 1 MSS로 줄인다.
처음에는 window size가 1이라 속도가 느리나 지수승으로 window size가 커지므로 속도도 빠르게 증가한다.
Slow Start에서 꼭 알아야 할 임계점(Threshold) 개념이 있다.
임계점은 여기까지만 Slow Start를 사용하겠다 라는 의미를 가진다.
slow start threshold(ssthresh)라고도 한다.
TCP 혼잡 제어 정책
TCP Tahoe
TCP Tahoe는 처음에는 Slow Start를 사용하다가 임계점(Threshold)에 도달하면 AIMD 방식을 사용한다.
- 처음 window size는 1 MSS이다.
- 임계점까지는 Slow Start를 사용한다( window size가 2배씩 증가한다)
- 임계점부터는 AIMD 방식을 사용한다( window size가 1씩 증가한다)
- 3 duplicate ACKs 혹은 timeout을 만나면 임계점을 window size의 절반으로 줄이고 window size를 1로 줄인다.
TCP Tahoe 방식은 3 duplicate ACKs를 만나고 window size가 다시 1부터 키워나가야 하므로 속도가 느리다. 이를 해결할 수 있는 방식이 TCP Reno이다.
TCP Reno
TCP Reno는 TCP Tahoe와 비슷하지만 3 dupicate ACKs와 timeout을 구분한다는 점이 다르다.
- 처음 window size는 1 MSS이다.
- 임계점까지는 Slow Start를 사용한다( window size가 2배씩 증가한다)
- 임계점부터는 AIMD 방식을 사용한다( window size가 1씩 증가한다)
- 3 duplicate ACKs를 만나면 window size를 절반으로 줄이고 임계점을 그 값으로 설정한다.
- timeout을 만나면 window size를 1로 줄인다. 임계점은 변하지 않는다.