[e2e] TCP fragmentation and reassembly

David Borman david.borman at windriver.com
Thu Dec 8 10:33:40 PST 2005

On Dec 7, 2005, at 6:56 PM, Joe Touch wrote:

> David Borman wrote:
>> 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.
> According to RFC793, MSS is the max TCP segment the receiver can  
> handle
> - - not just the largest IP packet that can be reassembled (though  
> this
> could be presumed as a prerequisite). If the connection can only  
> handle
> 8KB outstanding, even if IP can handle a packet that large, TCP  
> cannot,
> so it seems inappropriate to ever advertise an MSS > max_recv_window,
> which is bounded by the socket size.

No.  The receive window has no influence on the MSS value.  Look at  
RFC 1122.  The value to use in the MSS option is to be less than or  
equal to MMS_R - 20, where MMS_R is "the maximum message size that  
can be received and reassembled in an IP datagram" (RFC 1122, pg  
57).  When you actually go to send a packet, the received MSS value  
is only one of several things that can limit the packet size.

>> For this reason, some  systems use an MSS
>> that is based on the maximum MTU of all  interfaces, rather than the
>> outgoing interface.
> The advertised MSS can be that large, but it presumes that all
> interfaces are capable of receiving and reassembling IP packets  
> equally
> well, which is not the case where reassembly happens on the NIC. The
> advertised MSS sbould be bounded by the incoming interface MTU of this
> connection.

Provided you know for sure which is the incoming interface.  You can  
always know what interface you are using to send packets, but in many  
multi-homed situations you can't guarantee on which interface the  
traffic will arrive.

		-David Borman

More information about the end2end-interest mailing list