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

Give options room in each packet

02

Optional header fields take bytes inside a packet. They do not create extra space just because the MSS advertisement was calculated without them.

RFC 6691 · § 2EXAMPLE
4 / 4
04
Use the correct base header for the IP version.

For the same 1500-byte budget,40 IPv6 base-header bytes plus 20 TCP base-header bytes leave MSS 1440. Subtracting 12 additional-header bytes leaves 1428 data bytes.

Give options room in each packetFor the same 1500-byte budget,40 IPv6 base-header bytes plus 20 TCP base-header bytes leave MSS 1440. Subtracting 12 additional-header bytes leaves 1428 data bytes.IPv6 starts with a larger base headerAdvertised MSS 1440 · IPv6Same rule, different fixed IP-header sizeIP + TCP base60 bytesExtra headers12 bytesTCP data1428 bytesIP packet total 1500 / budget 1500Header fields are schematic, not to byte scale1440 − 12 = 1428 data bytes

Key idea: The data sender MUST reduce data length for the IP and TCP options it actually includes.

Terms

Look up a term in the glossary ↗

Rules & examples
  • The sender, not the advertising receiver, knows which optional headers it puts in each outgoing packet. Option lengths can vary between packets; MSS does not renegotiate for every such change.
  • With a 1460-byte IPv4 MSS and a 1500-byte packet budget, adding 12 bytes of TCP options to 1460 data bytes would make 1512 bytes. Reducing data to 1448 makes 20 +20 +12 +1448 =1500.
  • The 12-byte option-and-padding allowance is illustrative; it is not the size of the MSS option, which is 4 bytes. TCP options and padding occupy the TCP header, not application data.
  • IPv6 uses a 40-byte base header instead of 20. With the same chosen 1500-byte budget, MSS 1440 and 12 bytes of additional headers leave 1428 data bytes. IPv6 extension headers also consume the per-packet budget; current terminology is clarified by RFC 9293 section 3.7.1.
  • These calculations assume a suitable receive MSS and a path budget no smaller than 1500. A peer MSS alone never overrides a smaller IP-layer transmission limit.

The example packs one segment up to the chosen limit; TCP need not fill every segment. Additional bytes denote the headers actually present, including relevant padding, rather than guessed future options. No Timestamp negotiation or option wire parser is simulated.

Sources
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.

This guide explains the 2012 publication. Superseded by RFC 9293.

Related RFCs and changes

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

What changed
RFC 6691 · July 2012 Informational clarificationRFC 9293 · current TCP specification

RFC 9293 obsoletes RFC 6691 and incorporates this sizing distinction. This historical guide does not replace the current TCP specification.

Read the updated RFC section ↗

All chapters in RFC 6691

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 ↗