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

Avoid subtracting the same options twice

03

There are two different decisions: what receive limit to advertise, and how much data to put in this packet. Confusing them can make packets too short or too long.

RFC 6691 · § 4EXAMPLE
4 / 4
04
Stop an oversized candidate.

MSS 1460; data 1460; headers 52; total 1512. The candidate exceeds the chosen 1500-byte budget and must be reduced, rather than shown as delivered.

Avoid subtracting the same options twiceMSS 1460; data 1460; headers 52; total 1512. The candidate exceeds the chosen 1500-byte budget and must be reduced, rather than shown as delivered.Neither subtracts: the packet is too bigIPv4 · budget 1500 · actual extra headers 12Who adjusts?MSSDataIP totalsender only146014481500both subtract144814361488receiver only144814481500neither subtracts1460146015121460 data + 52 headers = 1512Oversized candidate: reduce before sending

Key idea: Do not pre-subtract possible options from MSS and then subtract them again at the sender.

Terms

Look up a term in the glossary ↗

Rules & examples
  • RFC 6691 section 4 compares four combinations. The recommended combination is to leave possible options out of the advertised-value calculation, then adjust the sender’s actual packet data for its headers.
  • For the chosen 1500-byte IPv4 example with 12 actual option bytes: advertise 1460 and send 1448 data bytes. The IP packet is exactly 1500 bytes.
  • If the receiver advertises 1448 after pre-subtracting 12, and the sender also subtracts 12, only 1436 data bytes are sent. Total length is 1488: double accounting wastes 12 bytes of this example’s budget.
  • If the receiver pre-subtracts 12 and the sender makes no adjustment, this one packet happens to fit. That accidental result does not support a general rule: the receiver cannot know every outgoing packet’s option combination.
  • If neither side accounts for options,1460 data bytes plus 40 fixed-header bytes plus 12 option bytes total 1512. RFC 6691 sections 3.1 and 3.2 correct earlier RFC 879/RFC 2385 advice; this guide does not recommend deploying TCP-MD5.

A simplified comparison uses the same receive and path budget and an exactly 12-byte extra-header fixture in every row. “Too short” describes unused space, not an invalid TCP packet or a mandatory minimum payload. Appropriate packet sizing does not itself authenticate TCP.

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 ↗