I understand the process of congestion avoidance where you trying to control the level of congestion in a network, and avoid loss of packets. But how can there be three acknowledgements, even if one is lost in transmission and finally reaches destination after timeout, surely the packet is droped if it times out, not just continued on its way and duplicated x amount of times during congestion.


Duplicate ACKs are part of the retransmit/selective-ack system. Without SACK support, you will get duplicate ACKs when a packet is lost and the receiver is informing the sender that it's seen up to the ACKed sequence-number. An ACK will be sent for each out-of-sequence packet received, which is why you'll see duplicate ACKs and sometimes many of them if the network diameter is big enough and the window size is large enough.

| improve this answer | |
  • @user171131 In this instance it's to signify the loss of an unknown number of packets. – sysadmin1138 Apr 28 '13 at 16:35
  • ohhhhhh so its not duplicating just for the same packet but for a number of packets lost in transmit! thanks!! – user171131 Apr 28 '13 at 16:36

First we have to realize that ACKs are not saying that we have seen a specific sequence number - they are actually saying that we haven't seen this specific sequence number, but we have seen all the previous ones.

From RFC 793:

Segments also carry an acknowledgment number which is the sequence number of the next expected data octet of transmissions in the reverse direction.

An ACK is a duplicate ACK if, among other criteria (RFC 5681)

the acknowledgment number is equal to the greatest acknowledgment received on the given connection

Duplicate ACKs are signs that the receiver received something, just not the right sequence number. After three duplicate ACKs (usually 3) the sender retransmits the segment. This is called Fast Retransmit and is thus faster than the timeout based retransmission your mentioned in your question.

| improve this answer | |
  • Aren't these called NACK, i.e. negative acknowledgment? – Dev Aggarwal Dec 18 '19 at 10:42
  • @DevAggarwal TCP doesn't have a negative acknowledgments. (RFC 1106 is AFAIK undeployed and historic). As a side note, RFC 2018 defines a selective ACK which can indicate a range of ACKed bytes. – bytesinflight Dec 19 '19 at 20:02
  • Ah, thanks for the confirmation! I got a little confused by reading it in the textbook. – Dev Aggarwal Dec 19 '19 at 20:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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