Summary
- A cumulative TCP acknowledgment identifies one advancing frontier; after several losses in one flight, it does not describe the intact islands beyond the first gap.
- RFC 2018 let a receiver report non-contiguous byte ranges, while preserving cumulative acknowledgment as the final authority and keeping congestion control at the sender.
- RFC 3517 and RFC 6675 turned that evidence into a conservative scoreboard-and-pipe recovery process, including a bounded rescue retransmission when the acknowledgment clock might otherwise stop.
Imagine eight segments leaving a sender and the second one disappearing. The receiver can hold segments three through eight, yet the ordinary acknowledgment number remains pinned immediately before the gap. Repeating that number tells the sender that something is wrong, but not the full shape of what survived. An aggressive sender could retransmit broadly. A cautious one could wait for each hole to be revealed over successive round trips. Either choice spends time or capacity because the evidence is too narrow.
That was the problem behind TCP Selective Acknowledgment. The idea was not entirely new when RFC 2018 appeared in October 1996. An earlier form had been included in RFC 1072 but had not been deployed, partly because its interaction with window scaling was disputed. RFC 2018 simplified the bargain. During the opening handshake, a TCP endpoint could send a two-byte SACK-Permitted option. Once permission existed, a receiver could attach SACK blocks to later acknowledgments. Each block described the left and right edges of a contiguous range already received.
The distinction was architectural. The cumulative acknowledgment still meant that every byte below one frontier had arrived. SACK blocks were advisory evidence about islands above it. They did not advance the frontier and did not let the sender discard its copy. A receiver under memory pressure could renege and drop data that it had reported. Until the ordinary acknowledgment number moved beyond a byte, the sender remained responsible for retaining it.
The map was also necessarily incomplete. TCP reserves only 40 bytes for options. A SACK option can carry four blocks at most, and normally three when timestamps occupy space too. RFC 2018 therefore gave the newest block first place and recommended repeating recently reported blocks. That ordering did two jobs: it kept the report current and made the evidence more likely to survive lost acknowledgments. Selectivity was never perfect knowledge; it was a disciplined compression of receiver state.
Information alone did not specify a recovery policy. RFC 2018 deliberately preserved TCP's congestion-control obligations and left much of the sender algorithm open. The next institutional step came in April 2003 with RFC 3517. It described a conservative SACK-based loss-recovery method. The sender maintained a scoreboard of cumulatively acknowledged and selectively acknowledged sequence ranges, inferred which gaps were lost, estimated how many bytes remained in the network through a variable called Pipe, and selected what to send next without exceeding the congestion window.
This separation mattered. The receiver supplied evidence; the sender interpreted it. SACK could improve the choice of bytes without becoming a licence to ignore congestion. Multiple losses could be repaired within one recovery episode, but the sender still reduced its window and limited new transmissions according to TCP's congestion principles. A richer map made control more precise, not less accountable.
RFC 6675, published in August 2012, obsoleted RFC 3517 and refined the conservative algorithm. It used newly reported SACK data in the definition of duplicate acknowledgments, improved loss inference for segments smaller than the sender's maximum segment size, and added RescueRxt. That state permits one optimistic rescue retransmission per recovery episode when loss near the end of a window and the absence of new data could otherwise stall the acknowledgment clock. The permission is deliberately bounded: one segment, no larger than one sender maximum segment size.
The history is therefore not a simple march from inefficient to efficient TCP. It is a history of how standards allocate uncertainty. The receiver sees which pieces it holds but may later release them. The sender owns the retransmission buffer and congestion response but sees the path only through delayed reports. The option space limits how much evidence can travel. A timeout can invalidate assumptions. SACK improved recovery by making these boundaries explicit.
The durable lesson is that protocol performance often changes first through better evidence, not stronger central command. A cumulative acknowledgment was a verdict about a frontier. Selective acknowledgment became a map of partial success. The standards that followed did their most important work by deciding how much a sender could trust that map, how long it had to preserve the original data, and how aggressively it could act without shifting the cost of mistaken confidence onto the network.
Sources
Member Briefing
Deeper Profile Context
Sign in with the right membership level to unlock the full briefing and source notes.
Only for Strategic Circle
Strategic Circle
Open to all readers. Unlock profile briefings after joining and signing in.
Join Strategic CircleOnly for Leadership Alliance
Leadership Alliance
For qualified IP-asset owners and management; sign in to unlock alliance briefings.
Join Leadership Alliance
