In packet-switched network communications, acknowledgments (ACK) are signals used between sender and receiver to indicate the receipt of a data segment. ACKs can be used to directly indicate successful receipt of uncorrupted data or indirectly to indicate retransmission is necessary.
In Transmission Control Protocol (TCP) ACKs are represented as 32-bit values in the segment header and indicate the last sequence number for which data was successfully received.
For example, a sender may transmit 3 data segments with sequence numbers (SEQ) ranging from 0-2
. If the #3 segment were to be lost or corrupted, the receiver would respond with an ACK for SEQ0
and SEQ1
only. Thus, the sender can infer that SEQ2
needs to be re-transmitted.
Duplicate Acknowledgments
In addition to receiving ACKs for packets prior to the most recently transmitted, the receipt of duplicate ACKs signals a sender of packet loss or recurrent corruption. Take the example above again, with data segments 0-2 being transmitted.
The sender then receives 3ACKs for SEQ1. This indicates that SEQ1 was the last-accepted segment and that all segments beyond that SEQ should but re-transmitted.
Negative Acknowledgments
In simpler implementations of reliable data transfer (RDT) protocols, a single 1
or 0
can be used, agnostic to SEQ number to indicate that the most recent transmission was not accepted. Such stop-and-wait protocols result in very limited utilization of network capacity and are deemed outdated and inefficient.