1

I am reading RFC 5681, in particular §3.2 on the Fast Retransmit/Fast Recovery algorithm.

I see that, in the event of the detection of a dropped packet, the receiver should send an immediate DUP ACK (which I interpret to mean the sending of TWO acks), followed by an immediate dup ack for each further packet received until the gap is fully closed.

The sender though requires the receipt of THREE dup acks to trigger fast retransmit. If the missing packet was the penultimate in sequence then no more data will arrive to trigger the receiver to send the third dup ack and the missing packet will only get resent on the timeout.

Is this understanding correct? Why would the RFC not specify the sending of THREE ACKS on the first occurrence?

1 Answer 1

1

I see that, in the event of the detection of a dropped packet, the receiver should send an immediate DUP ACK (which I interpret to mean the sending of TWO acks), followed by an immediate dup ack for each further packet received until the gap is fully closed.

no. a receiver sends an single ACK for each received packet with out-of-order sequence number. This ACK acknowledges the last in-order received segment (actually the next expected sequence number) and as such will be a duplicate of the previous ACK sent to acknowledge the last in-order received segment.

the "immediate" means following. Usually TCP receiver performs an optimization called 'delayed acknowledgements' which more or less results in sending an ACK for every other received packet. Because TCP sender sends a window of data this is not that important. When however a segment arrives out-of-order it is more important to immediately notify the sender. Thus in this case the receiver should send the ACK immediately after receiving the segment in question and not delay the ACK.

The sender though requires the receipt of THREE dup acks to trigger fast retransmit. If the missing packet was the penultimate in sequence then no more data will arrive to trigger the receiver to send the third dup ack and the missing packet will only get resent on the timeout.

Yes. this is correct. This problem is known as tail losses. In some scenarios, this can be a pretty significant performance degradation - e.g., in data centers where short streams of data need to arrive in a timely matter.

There is an optional TCP extension called tail loss probes - see e.g., this Internet draft. But this is pretty advanced topic.

Note however, that it is not necessary 'three' dupacks. Modern TCP implementations increase this number for TCP streams where packets are often reordered.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.