Octet

What is the difference between MTU and MSS, and why is the usual MSS 1460?

Show the answer

Say this first

The MTU is the largest IP packet a link can carry without fragmenting it: 1,500 bytes on standard Ethernet. The MSS is the largest TCP payload a host is willing to receive in one segment, announced in its SYN. On a 1,500-byte link it is 1,500 minus 20 bytes of IPv4 header minus 20 bytes of TCP header, so 1,460; with IPv6's 40-byte header it is 1,440. MSS is about TCP data only, MTU is about whole IP packets.

Go deeper

The layers of a full-size packet

PieceBytes
TCP payload (MSS)1,460
TCP header20
IPv4 header20
IP packet = MTU1,500
Ethernet header + FCS14 + 4
Frame on the wire1,518 (1,522 with an 802.1Q tag)

With TCP timestamps on, every segment carries 12 bytes of options, so the data per packet is 1,448 even though the SYN still advertises 1,460. ss -ti shows this as mss:1448.

Common MTUs and matching MSS

LinkIP MTUMSS
Ethernet1,5001,460
PPPoE (8-byte header)1,4921,452
GRE over 1,500 (24 bytes overhead)1,4761,436
GRE over IPsec, common safe value1,4001,360
Jumbo frames9,0008,960

MSS is announced, not negotiated

Each side tells the other what it can receive. The two directions can use different sizes. If a SYN has no MSS option, the default is 536 bytes for IPv4 and 1,220 for IPv6.

Traps

  • Saying MSS includes the TCP header. It is payload only.
  • Saying the two hosts negotiate one shared MSS. Each announces its own receive limit.
How did you do?Book 5.2 Reliable Byte Stream (TCP)Book 3.3 Internet (IP)