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

Read the two edges of a SACK block

02

A SACK block describes a contiguous range of received bytes. Its left edge is included; its right edge is the first byte after the range.

RFC 2018 · § 3EXAMPLE
4 / 4
04
Leave space for other options.

Four blocks use 34 bytes. Reserving twelve bytes for Timestamp and padding leaves 28 bytes: three SACK blocks use 26 of those bytes.

Read the two edges of a SACK blockFour blocks use 34 bytes. Reserving twelve bytes for Timestamp and padding leaves 28 bytes: three SACK blocks use 26 of those bytes.Other options reduce the block budgetTCP options: 40 bytes totalblock1block2block3block4SACK: 2-byte header + 4 × 8 = 34TS + padSACK · 3 blocks12 + 26 = 38 bytes; 2 remainAdditional options can leave fewer blocks

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

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.

What changed
RFC 2018 ordinary queued-data blocksRFC 2883 §4.1.1 · related D-SACK extension

A first block [3000,3500) with cumulative ACK 4000 can report duplicate bytes. This extends the interpretation; it is not a formal Updates edge in the RFC Editor metadata.

Read the updated RFC section ↗
KEY POINT

SACK reports received ranges, not missing ranges or segment numbers.

  • The SACK option has Kind 5. Its Length is 2 + 8 times the number of blocks. Each block uses two unsigned 32-bit sequence numbers in network byte order.
  • A block [1300,1400) reports bytes 1300 through 1399. The right edge 1400 is excluded. Sequence numbers identify byte positions; they are not packet IDs.
  • The 40-byte TCP option area holds at most four SACK blocks. With the Timestamp option and its usual two padding bytes consuming twelve bytes, at most three SACK blocks fit. Other options may leave room for fewer.
  • The chosen report has cumulative ACK 1000 and blocks [1300,1400), [1100,1200). It describes two received islands above the first gap; it does not cumulatively acknowledge either island.
  • RFC 2883 later extends the same option to report duplicate data in a first D-SACK block, possibly below the cumulative ACK or contained in a following block. These ordinary new-data examples do not prohibit that extension.
DETAILS

These examples stay far from 32-bit sequence wrap. A real TCP compares sequence numbers with TCP’s wrap-aware rules. The encoder checks option bytes and space, not full TCP validity, connection state or D-SACK semantics. Field boxes are schematic.

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 ↗