[e2e] TCP fragmentation and reassembly
David Borman
david.borman at windriver.com
Wed Dec 7 16:04:22 PST 2005
On Dec 7, 2005, at 2:22 PM, Joe Touch wrote:
>> The TCP MSS value specifies the largest size of packet that the
>> receiver can reassemble. I doubt that there are many, if any, TCP
>> implementations that can't handle receiving a full 64K TCP/IP packet
>> (as a series of IP fragments).
>
> See: http://www.psc.edu/networking/projects/tcptune/
>
> The table (grep for "FreeBSD") shows that current OS's start with a
> default socket size smaller than 64KB (which limits the size of the
> receive window, right?).
Yes, but that has nothing to do with the MSS value. The MSS is
simply the largest IP packet that the host can reassemble.
>> But since most TCP implementations try
>> very hard to not send packets that will be fragmented at the IP
>> layer,
>> as long as the MSS is larger than the underlying MTU it doesn't
>> really
>> matter. In theory, when using Path MTU discovery, there is no
>> reason
>> to not always use the maximum MSS value of 64K-1.
>
> Most systems don't try anything larger than the outgoing interface
> MSS,
> though, which is often much smaller (1500 bytes (ethernet), 4400 bytes
> (POS), or 9KB (ATM)).
The received MSS value is only one of several variables that will
limit the size of packets that get sent. While common, basing the
MSS on the MTU of the outgoing interface breaks down in the case of
asymetric routing, when the MTU of the incoming interface is larger
than the MTU of the outgoing interface. For this reason, some
systems use an MSS that is based on the maximum MTU of all
interfaces, rather than the outgoing interface.
But the MSS is also a powerful knob that can be used to force remote
systems to send smaller packets when they aren't smart enough to send
packets that are small enough to not get fragmented along the way.
Fundamentally, it is this reason why most hosts don't just use an MSS
of 64K-1.
-David Borman
More information about the end2end-interest
mailing list