Visual RFC.
ALL RFCs / RFC 2018
Read the RFC ↗
RFC 2018 / MECHANISMS

Report a changed receive queue

03

The receiver can hold later bytes while an earlier range is missing. Each new arrival changes the queue and may change its SACK report without advancing the cumulative ACK.

RFC 2018 · § 4EXAMPLE
4 / 4
04
Advance the cumulative ACK through the filled gap.

Now [1000,1400) is contiguous. ACK 1400 cumulatively acknowledges these bytes; no above-ACK block remains to report in this example.

Report a changed receive queueNow [1000,1400) is contiguous. ACK 1400 cumulatively acknowledges these bytes; no above-ACK block remains to report in this example.A fills the gap: cumulative ACK advancesReceiver · cumulative ACK1400A · 1000receivedB · 1100receivedC · 1200receivedD · 1300receivedEach cell spans 100 bytes; boundary1400 at rightAll four ranges now cumulatively acknowledgedNo above-ACK block remainsACK1400 travels back to the sender

Source for this drawing: RFC 2018 · Read RFC section 4 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A message needs an address.

Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

KEY POINT

The first block normally contains the segment that triggered this ACK.

  • For ordinary new data, the first SACK block MUST contain the segment triggering the ACK, unless that segment advanced the cumulative ACK field.
  • The receiver SHOULD include as many distinct blocks as space allows and SHOULD repeat recently reported blocks that are not subsets of blocks already included. After the first block, the others may be in arbitrary order.
  • If SACK is used, the receiver SHOULD acknowledge each valid segment containing new data in this out-of-order situation, with a SACK option. A lost report can be compensated by repeating blocks; repetition does not guarantee delivery.
  • In this chosen four-segment example, A=[1000,1100) is initially missing. B arrives, then D, then C bridges their ranges. Finally A fills the first gap and the cumulative ACK advances to 1400.
DETAILS

Each segment in this teaching example is 100 data bytes. Permission was received and the receiver chooses to generate SACK. Buffer space and the receive window allow these bytes. RFC 2018 section 7 has separate published examples with 500-byte segments.

Read the RFC section ↗

All chapters in RFC 2018

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗