advanced24 min studyLesson 187 in Engineering

Selective acknowledgments describe islands beyond a gap

Interpret SACK blocks as half-open received ranges, maintain a recovery scoreboard, and distinguish selective evidence from cumulative acknowledgment and durable receipt.

On this page

What you’ll understand

  • Calculate missing byte ranges from cumulative ACK and SACK blocks.
  • Explain how a sender scoreboard helps avoid unnecessary retransmission.
  • Recognize negotiated support, bounded option space, and receiver reneging limitations.

A receiver can have many later bytes while its cumulative acknowledgment remains stuck at one early hole. Without more information, the sender has a poor picture of which later data needs repair. Selective acknowledgment adds descriptions of received islands. The key skill is interval reasoning: combine cumulative progress with reported blocks, identify uncovered ranges, and resist treating a partial receiver report as either a complete delivery map or an application-level guarantee.

Read a SACK block as a range, not a count

A TCP SACK block supplies a left edge and a right edge for a contiguous received range. The left edge identifies its first byte and the right edge the next position after its last byte. Thus [8,001,10,001) represents 2,000 bytes. Several blocks can report separated islands beyond the cumulative acknowledgment. The ordinary ACK number still identifies the earliest unfilled position in order. A SACK block reaching a high number does not advance that ACK across a lower gap, and adding the block endpoints is not a meaningful byte-count calculation.

SACK support is negotiated with the SACK-Permitted option during connection establishment. Actual SACK information occupies finite TCP option space, which can also be needed by other options. A report therefore need not list every island the receiver currently holds. Omission of a previously reported range in one later ACK is not, by itself, proof that it disappeared or was never received. Reconstruct the connection over time and distinguish positive reported evidence from missing information. Relative sequence displays remain useful for reading intervals, provided all endpoints refer to the same direction and connection.

Bi=[Li,Ri),∣Bi∣=Ri−Li,Breported=∣⋃iBi∣B_i=[L_i,R_i),\qquad |B_i|=R_i-L_i,\qquad B_{\rm reported}=\left|\bigcup_i B_i\right|
All endpoints are unwrapped byte positions for one connection direction. Union length counts reported bytes without double-counting overlapping or adjacent blocks; it is not a cumulative ACK and does not include unreported received data.↔ Scroll wide equations horizontally.

A recovery scoreboard organizes evidence

The sender can maintain a scoreboard of reported ranges, inferred holes, and retransmitted data. This supports recovery from multiple losses in one flight without resending every byte after the first gap. A missing range is a candidate for repair, but the exact rule declaring it lost depends on the recovery algorithm and reordering tolerance. Selective reporting and loss detection are related yet separate mechanisms: SACK communicates observations, while the sender decides how to use them. Congestion control still limits how much repair and new traffic may enter the network.

Do not interpret selectively acknowledged data as permission to discard all responsibility for those bytes. RFC 2018 permits a receiver, exceptionally, to discard previously SACK-reported data before cumulative acknowledgment, although it discourages doing so. This possibility is called reneging. Senders retain data until it is cumulatively acknowledged and recovery logic must account for receiver reports being advisory in this sense. Even cumulative transport acknowledgment remains distinct from application persistence. These two limitations arise at different boundaries: one concerns receiver reassembly state, while the other concerns what the application does after stream receipt.

H=[A,Snext)∖⋃iBi\mathcal H=[A,S_{\rm next})\setminus\bigcup_i B_i
In an illustrative complete scoreboard, H is the set of not-reported ranges between cumulative ACK A and the end of transmitted data S_next. It describes holes in available evidence, not a proof that every such byte was dropped; reports can be incomplete and packets can be reordered.↔ Scroll wide equations horizontally.

Work from the capture's information boundary

A sender-side capture may miss ACKs, record segmentation offload before actual packetization, or observe retransmissions without the receiver's full state. A receiver-side capture provides different evidence and can itself drop records under load. Align clocks carefully when comparing traces and record which observation point contains each event. A visible overlap between ranges may be retransmission, duplicate capture, or changed segmentation; packet count alone is insufficient. Build a timeline of sequence intervals, ACK movement, SACK blocks, and recovery transitions before blaming an implementation for resending something the analyst merely assumes was safely held.

Use the binomial lab to examine how multiple potential holes arise in an intentionally independent delivery model. Interpret success as segment delivery, hold p at 0.8, and increase n. Compare the mass below n−1 successful deliveries, representing at least two failed pieces. The bars cannot locate the holes or produce a SACK block; positions and recovery timing are absent. Predict how a larger flight can make multi-hole repair important, then use the worked interval example to decide which actual byte ranges require attention. Correlated congestion losses can differ sharply from this distribution.

Find two missing ranges in one flight

A sender has transmitted through position 8,001 exclusive. The cumulative ACK is 2,001 and the receiver reports SACK blocks [3,001,5,001) and [6,001,8,001). Assume these are all received islands in this example.

  1. The outstanding span [2,001,8,001) contains 6,000 bytes. The first block reports 2,000 bytes and the second another disjoint 2,000 bytes.

  2. Subtract the two reported islands from the outstanding span. The uncovered intervals are [2,001,3,001) and [5,001,6,001), each containing 1,000 bytes.

  3. Repairing the first hole alone could advance the cumulative ACK to 5,001 because the intervening island is already present. Repairing the second then permits ACK 8,001, assuming the receiver retains its reported data.

The result

The example contains 2,000 missing bytes in two holes, not 6,000 missing bytes. SACK gives the sender a more useful repair map than the cumulative ACK alone.

Explore the model

Interactive lab

Interactive lab · probability

When one flight has several missing pieces

Set p to independent segment delivery probability and n to flight segment count. Inspect bars below n−1 successes to reason about two or more missing pieces. This exact binomial model has no byte positions, SACK options, scoreboard, or recovery decisions.

When one flight has several missing piecesThese are exact binomial probabilities for independent trials with one fixed success probability. Playback tours the distribution; it does not resample outcomes. Current readings: Mean · np: 5; Variance · np(1−p): 2.5; Total probability: 1. All parameters are adjustable with the labeled controls below.03581000.070.150.220.3Successes kP(X = k)k = 0 · P = 9.77e-4
Exact probabilityHighlighted outcomeMean np
Mean · np
5
Variance · np(1−p)
2.5
Total probability
1
t = 0 s

These are exact binomial probabilities for independent trials with one fixed success probability. Playback tours the distribution; it does not resample outcomes. Parameter changes pause playback and recompute the model at the current elapsed time. Reset restores both parameters and returns time to zero. Playback starts paused. Adjust either parameter, then choose Play or Step.

Look forMultiple missing pieces can occur in one flight; selective range evidence helps locate repair needs that a count cannot describe.

Check your understanding

An ACK remains 2,001 while a SACK block reports [3,001,5,001). What does the pair tell you?

Try it yourself

ACK is 1,001, transmitted data ends at 5,001 exclusive, and the only received island is [2,001,4,001). Calculate reported bytes, uncovered ranges, and the ACK after only the first uncovered range is repaired.

Take a moment to make a prediction or work it out on paper. Open a hint when you need one.

Give me a hint

Write the outstanding interval, subtract the island, and then merge contiguous received ranges from the ACK onward.

Compare with the solution

The island contains 2,000 bytes. The uncovered ranges are [1,001,2,001) and [4,001,5,001), each 1,000 bytes. Repairing only the first joins it to the reported island, so ACK can advance to 4,001. The second hole still blocks ACK 5,001, assuming no reneging or new loss.

Take it with you

  • SACK blocks report half-open received intervals beyond cumulative progress.
  • A scoreboard separates positive evidence from inferred repair needs.
  • Selective reports do not replace cumulative retention rules or application guarantees.

Read further

Original sources and deeper explanations to follow at your own pace.

Optional progress, saved in this browser when available. Revisit any lesson at any time.

Lesson not marked complete.