SACK

Selective ACKnowledgement

Protocol
Introduced in Rel-8
A TCP/IP protocol mechanism that allows a receiver to acknowledge non-contiguous blocks of data received correctly. It improves efficiency in lossy networks by enabling the sender to retransmit only specific missing segments, rather than everything after a gap.

Description

Selective ACKnowledgement (SACK) is an optional feature of the Transmission Control Protocol (TCP), defined in IETF RFCs and referenced in 3GPP specifications for transport protocols used in mobile networks (e.g., within the context of GTP or other IP-based bearers). It enhances the traditional TCP cumulative acknowledgement mechanism by providing the receiver with the ability to inform the sender about all segments that have been successfully received, even if they are out of sequence.

In standard TCP without SACK, acknowledgements are cumulative. The receiver sends an ACK number representing the highest contiguous byte of data received in order. If segment 2 is lost but segments 1, 3, and 4 arrive, the receiver can only acknowledge byte 1. This leads to ambiguity for the sender, which may retransmit segment 2 and, under some algorithms, also segments 3 and 4 unnecessarily (a phenomenon known as 'go-back-N'). SACK operates by including a SACK option in the TCP header. This option contains a list of 'SACK blocks,' each describing a contiguous range of data that the receiver has successfully queued.

The architectural implementation involves both TCP endpoints supporting the SACK option. When a receiver gets non-contiguous data, it includes one or more SACK blocks in its ACK packets back to the sender. For example, upon receiving segments with sequence numbers 1000-1999 and 3000-3999, but missing 2000-2999, the receiver's ACK would have an ACK number of 2000 (the next expected byte) and SACK blocks for 1000-1999 and 3000-3999. The sender's TCP stack, using algorithms like Selective Repeat, maintains a map of acknowledged data based on these SACK blocks. It can then retransmit only the specific missing segment (2000-2999) while knowing that later data is already held by the receiver.

In 3GPP networks, SACK is relevant for optimizing data transport over wireless links, which are prone to higher packet loss and variability compared to fixed networks. It is referenced in specifications concerning protocol performance and bearer management. By reducing unnecessary retransmissions, SACK conserves radio resources, reduces latency (especially for applications sensitive to jitter like video), and improves overall throughput. It is a fundamental TCP enhancement leveraged within the IP transport layer that underpins 3GPP data services.

Purpose & Motivation

SACK was developed to address a fundamental inefficiency in the original TCP acknowledgement mechanism, which performed poorly in environments with segment loss. The cumulative ACK model worked adequately for early networks with low loss rates, but in lossy or high-latency paths (like early wireless networks), it caused excessive retransmissions and reduced throughput. This problem became known as the 'TCP retransmission ambiguity problem.'

The creation of SACK was motivated by the need for a more precise feedback mechanism from receiver to sender. Prior approaches, like the TCP 'Fast Retransmit' algorithm based on duplicate ACKs, helped but still lacked full information about which specific segments were missing. SACK provides explicit feedback, allowing the sender to maintain a precise picture of the receiver's buffer state. This solves the problem of retransmitting data the receiver already possesses, which wastes bandwidth and increases delay.

In the context of 3GPP, the adoption and recommendation of SACK (and related TCP optimizations) in specifications like TS 44.064 for GSM/EDGE Radio Access Network (GERAN) reflects the historical evolution of mobile data services. As packet-switched services (GPRS, EDGE) emerged, the wireless link's characteristics made TCP performance a critical issue. Implementing SACK in end devices and network servers improved the user experience for browsing, downloading, and streaming over mobile networks, making efficient use of scarce radio resources and mitigating the impact of radio interface errors on end-to-end transport.

Key Features

  • TCP header option containing blocks of acknowledged non-contiguous data ranges
  • Enables sender to perform selective retransmission of only missing segments
  • Reduces unnecessary retransmissions and improves bandwidth efficiency
  • Works with TCP algorithms like Selective Repeat to manage sender window
  • Mitigates performance degradation in lossy networks (e.g., wireless)
  • Supported by most modern TCP implementations and recommended for mobile transport

Evolution Across Releases

Rel-8 Initial

Initial reference to Selective ACKnowledgement (SACK) within 3GPP specifications, particularly in TS 44.064 for GERAN. Recognized SACK as a TCP enhancement beneficial for mobile data transport to improve performance over error-prone radio links.

Defining Specifications

SpecificationTitle
TS 44.064 3GPP TR 44.064