Avoid subtracting the same options twice
03There 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.
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.
Key idea: Do not pre-subtract possible options from MSS and then subtract them again at the sender.
Rules & examples
Do not pre-subtract possible options from MSS and then subtract them again at the sender.
- 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
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.
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 ↗