The Limit Of Cumulative Acknowledgments
Basic TCP uses cumulative acknowledgments: an acknowledgment number means every byte below it arrived. If one segment is lost but later ones arrive, the receiver can only keep acknowledging the gap. The sender learns a byte is missing but not which later segments are already safe.
What Selective Acknowledgment Adds
Selective acknowledgment, or SACK, is a TCP option that lets the receiver report non contiguous blocks of data it already holds.
- The receiver lists ranges of bytes that arrived beyond the gap.
- The sender retransmits only the truly missing segments.
- Already delivered segments are not sent again, saving bandwidth.
Why It Matters
Without SACK, a sender recovering from loss may resend data the receiver already has, wasting capacity exactly when the network is stressed. With SACK the sender rebuilds a precise picture of the receiver buffer and fills only the holes.
- It improves recovery when multiple segments are lost in one window.
- It pairs with fast retransmit to react before a timeout.
- It is negotiated during the handshake and used only if both sides agree.
Key idea
Selective acknowledgment reports the exact ranges a receiver already holds so the sender retransmits only missing segments instead of everything after a gap.