TCP control and selection acknowledgment (SACK)

TCP control and selection acknowledgment (SACK)

 Enhanced TCP implements a mechanism called SACK (selective acknowledgment). Here, we will explain SACK (Selective Acknowledgment).

forward acknowledgment

First, a quick review of forward acknowledgments.

 In TCP, a mechanism is provided to reliably deliver data in order to improve the reliability of communication. Among these are mechanisms to resend data that did not reach the receiver.

 In the previous method of extension without SACK, which is described later, TCP informs the sending host that so far the segment has arrived by requesting the next byte.

Let's take the figure below as an example.

The sending host sends segments 1 through 8 to the receiving host.

 All segments have arrived except segments 3 and 4, but the first missing packet is segment 3, so the receiving host acknowledges with an 'ACK3' indicating that the next segment is segment 3 make a response.

The sending host does not know until another segment has arrived.

So the sending host resends segments 3-8.

 If all retransmitted segments arrive, segments 5-8 are duplicates. This unnecessary segment puts a strain on the network and is inefficient.

Selective Acknowledgment (SACK)

 Modern operating systems typically negotiate an optional feature of TCP called Selective Acknowledgment (SACK) during the 3-way handshake.

 If both the sender and receiver support SACK, the receiver allows the receiver to notify the sender of all successfully accepted segments, including non-contiguous segments.

This mechanism allows the sending host to resend only the missing data.

Let's take the figure below as an example.

The sending host sends segments 1 through 8 to the receiving host.

 If all segments except segments 3 and 4 have arrived, the receiving host will acknowledge that segments 1 and 2 have been received by sending back an acknowledgment with ``ACK3'', and the other segments 5 to 8 that have been received. Selectively reply with "SACK5-8".

The sending host then only needs to resend segments 3 and 4.

 As explained above, selective acknowledgments (SACKs) can be used to increase efficiency by asking only the necessary segments to be retransmitted.