본문 바로가기

[TCP] Fast Retransmission

by mugglim 2022. 7. 18.

Timeout

TCP로 연결된 각 호스트는 송신 버퍼(Send Buffer)와 수신 버퍼(Receive Buffer)를 가지고 있다. 송신 버퍼는 Window Size 만큼 패킷을 한 번에 보내며, Timeout을 통해 패킷의 유실을 확인한다.

3 duplicate ACKs and Fast Retransmission

3 duplicate ACKs은 특정 ACK 패킷을 응답받은 후, Timeout 전 동일한 ACK를 3번 응답받은 경우를 의미한다. 즉, 총 4번 동일한 ACK을 응답받아야 한다.

빠른 재전송(Fast Retransmission)은 3 duplicate ACKs을 통해 패킷의 유실을 확인하면, 해당 패킷을 Timeout 전 다시 전송하는 방법이다. RFC에도 기술되어 있으며, 의무는 아니고 권고 사항이다. (RFC 5681)

예를 들어보자. 패킷 {0,1,2,3,4,5,6,7,8}를 전송하는데 3번 패킷만 유실되었다고 가정해보자. 참고로, ACK(N)은 N번 이전까지의 패킷을 모두 응답받았음을 의미한다. 송신자 측에서는 3번 이후의 패킷의 응답 PKT(4), PKT(5), PKT(6), PKT(7), PKT(8)에 대한 응답은 모두 ACK(3)이다. ACK(3)을 응답받은 후, 동일하게 3번 응답받은 시점에 PKT(3)을 재전송한다. 이 예제에서는 PKT(7)에 대한 ACK(3) 응답을 받은 시점이 총 4번 ACK(3)을 응답받은 시점이다.

Timeout vs 3 duplicate ACKs

Timeout과 3 duplicate ACKs 모두 패킷의 유실을 확인하는 방법이다. 그러면 Timeout과 3 duplicate ACKs 중 어떤 상황이 네트워크가 더 혼잡되어 있을까? Timeout은 패킷 송신을 실패하거나 피드백을 아예 받지 못한 경우이다. 이와 달리, 3 Duplicate ACKS는 다른 패킷은 잘 전송되는데 3번이나 피드백을 받은 경우이다. 즉, 동일하게 패킷이 유실되었어도 3 duplicate ACKs이 네트워크가 덜 혼잡하는 상황으로 이해해야 한다.

Ref.

본 글은 KOCW 컴퓨터네트워크(한양대학교 이석복 교수님) 강의를 참고하여 작성하였습니다. 잘못된 내용이 있으면 자유롭게 댓글로 달아주시길 바랍니다.

댓글