Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uwm.edu!linac!att!ucbvax!JESSICA.STANFORD.EDU!almquist From: almquist@JESSICA.STANFORD.EDU ("Philip Almquist") Newsgroups: comp.protocols.tcp-ip Subject: Re: problem with ftp Message-ID: <9102111926.AA09697@jessica.stanford.edu> Date: 11 Feb 91 19:26:29 GMT References: <1991Feb9.190400.6078@Think.COM> Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 47 Barry, > It's a problem/feature of many TCP implementations. The reason it is done > is that the goal is to prevent fragmentation of datagrams. Hosts on the > same network can agree to base the max segment size (MSS) on the maximum > packet size (called the MTU -- Max Transmission Unit) of the network. If > they are on different networks, though, they don't know what the smallest > MTU is of all the intervening networks, correct so far, but > except that all networks in a > TCP/IP internet are required to support at least 512-byte packets > (actually, I think the number is something like 568, to allow 512-byte TCP > segments plus IP and TCP headers). IP networks are required to support 68 octet packets without network layer (IP) fragmentation (RFC 791 page 25). The Internet folklore that says that this number is 576 is erroneous. Every IP host must be able to receive (and reassemble if necessary) 576 octet datagrams (RFC 791 page 25). Thus, it is technically a protocol error to send a datagram larger than 576 to any host unless the sending host knows (perhaps because of a TCP maximum segment size negotiation or an agreement between the system managers) that the receiving host can accept larger datagrams. Historically (and arguably still today) it has been unwise to send larger datagrams to hosts on distant networks (even when the remote host was prepared to receive larger datagrams), since larger datagrams increase the likelihood that intermediate networks will perform fragmentation, causing degraded performance. It is recommended (but, surprisingly, not required) that a host be able to receive (and reassemble if necessary) a datagram at least as large as the MTU of its connected network (RFC 1122 page 56). Because most hosts follow this recommendation, it usually works to send MTU-sized datagrams to other hosts on the same (sub)net. However, as described above, there are no guarantees. The default TCP maximum segment size is 536 (not 512) octets, for the reasons you gave (to allow 40 octets for IP and TCP headers - RFC 1122 page 85). Finally, a minor nit: the standards talk about octets rather than bytes. Octets are eight bit quantities. Bytes are also eight bit quantities on most most modern computers, but computer architecture is beyond the scope of the TCP/IP standards. Philip