먼저 TCP의 특징에 관해 알아봅시다
- 모든 프로세스가 전송자와 수신자가 될 수 있습니다
- 송신하는 측과 연결을 먼저 한 후 통신합니다
- 전송자는 수신자가 받을 수 있는 데이터 양을 초과해서 보내지 않습니다
TCP의 제이 방법에는 수신자의 버퍼가 넘치지 않도록 데이터의 전송을 조절하는 흐름 제어와 네트워크 혼잡에 따라 데이터의 양을 조절하는 혼잡 제어 등이 있습니다. 그 중 Tahoe와 Reno는 혼잡 제어 정책 중 하나입니다.
#. TCP Tahoe
요약해서 말하면 Slow Start, AIMD, Fast Retransmit의 결합입니다.
- Slow Start
처음 전송 시 적은 데이터를 전송한 후 RTT(Round Trip Time) 확인 후 괜찮다는 판단이 들면 congestion window size(cwnd)를 두 배로 늘립니다. 여기서 cwnd가 임계점(Threshold)에 도달하면 전송을 중단한 후 윈도우 크기를 1로 줄입니다. Tahoe에서는 이후 AIMD로 넘어갑니다.
- AIMD
Additive Increase, Multicative Decrease의 준말로 RTT마다 cwnd를 1씩 증가시키고 손실이 발생한다면 임계점을 현재 cwnd의 반으로 줄입니다. cwnd는 초기의 윈도우 사이즈로 재설정됩니다.
- Fast Retransmit
손실 감지 알고리즘으로 ACK Duplicated나 Timeout이 발생하면 본인의 윈도우를 수정합니다. 패킷 손실이 발생하면 cwnd를 초기의 윈도우 크기로 재설정합니다.
TCP Tahoe의 단점은 손실 감지가 발생한 후 cwnd 크기가 초기의 윈도우 사이즈로 지정된 후 1씩 커지다보니 속도가 느리다는 점입니다. 따라서 이를 보완하기 위해 TCP Reno가 나타났습니다.
#. TCP Reno
요약해서 말하면 TCP Tahoe와 Fast Recovery의 결합입니다. TCP Tahoe의 Slow Start, AIMD, Fast Retransmit와 동일합니다.
- Fast Recovery
Reno에서는 3 duplicate ACK와 timeout을 구분합니다. 전자의 경우 cwnd를 초기 윈도우 사이즈가 아닌 현재 cwnd의 절반으로 줄입니다. 중복 상태라는 것은 패킷이 수신기로 전달된다는 의미입니다. 따라서 cwnd는 네트워크가 정체 상태에서 벗어나도록 하기 위해 절반으로 감소시킵니다. 이때 임계점도 cwnd 값으로 설정합니다. 반대로 timeout의 경우에는 cwnd를 초기의 윈도우 사이즈로 지정시키고 임계점도 변하지 않습니다. 이는 duplicate ACK와 비교하여 네트워크가 혼잡하다는 것을 의미하기에 복구가 필요합니다.
#. TCP Tahoe vs TCP Reno
그래프로 비교하면 Tahoe의 경우 Threshold의 변화가 없고 윈도우 크기가 초기 상태만큼 감소하였습니다. 그래프 상 별도의 표시는 없으나 Reno에서 초기 상태가 아닌 절반만큼 감소했다는 점, Threshold가 감소한 cwnd로 변화하였다는 것을 보아 duplicate ACK가 발생했다는 것을 알 수 있습니다.
9초 이후 그래프를 보면 Tahoe보다 Reno가 패킷을 빠르게 전달할 수 있음을 확인할 수 있습니다.
참고 자료
사이 좋게 네트워크를 나눠 쓰는 방법, TCP의 혼잡 제어
TCP Tahoe and TCP Reno - GeeksforGeeks