summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc879.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc879.txt')
-rw-r--r--doc/rfc/rfc879.txt638
1 files changed, 638 insertions, 0 deletions
diff --git a/doc/rfc/rfc879.txt b/doc/rfc/rfc879.txt
new file mode 100644
index 0000000..fdde68e
--- /dev/null
+++ b/doc/rfc/rfc879.txt
@@ -0,0 +1,638 @@
+
+
+Network Working Group J. Postel
+Request for Comments: 879 ISI
+ November 1983
+
+
+
+ The TCP Maximum Segment Size
+ and Related Topics
+
+This memo discusses the TCP Maximum Segment Size Option and related
+topics. The purposes is to clarify some aspects of TCP and its
+interaction with IP. This memo is a clarification to the TCP
+specification, and contains information that may be considered as
+"advice to implementers".
+
+1. Introduction
+
+ This memo discusses the TCP Maximum Segment Size and its relation to
+ the IP Maximum Datagram Size. TCP is specified in reference [1]. IP
+ is specified in references [2,3].
+
+ This discussion is necessary because the current specification of
+ this TCP option is ambiguous.
+
+ Much of the difficulty with understanding these sizes and their
+ relationship has been due to the variable size of the IP and TCP
+ headers.
+
+ There have been some assumptions made about using other than the
+ default size for datagrams with some unfortunate results.
+
+ HOSTS MUST NOT SEND DATAGRAMS LARGER THAN 576 OCTETS UNLESS THEY
+ HAVE SPECIFIC KNOWLEDGE THAT THE DESTINATION HOST IS PREPARED TO
+ ACCEPT LARGER DATAGRAMS.
+
+ This is a long established rule.
+
+ To resolve the ambiguity in the TCP Maximum Segment Size option
+ definition the following rule is established:
+
+ THE TCP MAXIMUM SEGMENT SIZE IS THE IP MAXIMUM DATAGRAM SIZE MINUS
+ FORTY.
+
+ The default IP Maximum Datagram Size is 576.
+ The default TCP Maximum Segment Size is 536.
+
+
+
+
+
+
+
+
+
+Postel [Page 1]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+2. The IP Maximum Datagram Size
+
+ Hosts are not required to reassemble infinitely large IP datagrams.
+ The maximum size datagram that all hosts are required to accept or
+ reassemble from fragments is 576 octets. The maximum size reassembly
+ buffer every host must have is 576 octets. Hosts are allowed to
+ accept larger datagrams and assemble fragments into larger datagrams,
+ hosts may have buffers as large as they please.
+
+ Hosts must not send datagrams larger than 576 octets unless they have
+ specific knowledge that the destination host is prepared to accept
+ larger datagrams.
+
+3. The TCP Maximum Segment Size Option
+
+ TCP provides an option that may be used at the time a connection is
+ established (only) to indicate the maximum size TCP segment that can
+ be accepted on that connection. This Maximum Segment Size (MSS)
+ announcement (often mistakenly called a negotiation) is sent from the
+ data receiver to the data sender and says "I can accept TCP segments
+ up to size X". The size (X) may be larger or smaller than the
+ default. The MSS can be used completely independently in each
+ direction of data flow. The result may be quite different maximum
+ sizes in the two directions.
+
+ The MSS counts only data octets in the segment, it does not count the
+ TCP header or the IP header.
+
+ A footnote: The MSS value counts only data octets, thus it does not
+ count the TCP SYN and FIN control bits even though SYN and FIN do
+ consume TCP sequence numbers.
+
+4. The Relationship of TCP Segments and IP Datagrams
+
+ TCP segment are transmitted as the data in IP datagrams. The
+ correspondence between TCP segments and IP datagrams must be one to
+ one. This is because TCP expects to find exactly one complete TCP
+ segment in each block of data turned over to it by IP, and IP must
+ turn over a block of data for each datagram received (or completely
+ reassembled).
+
+
+
+
+
+
+
+
+
+
+Postel [Page 2]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+5. Layering and Modularity
+
+ TCP is an end to end reliable data stream protocol with error
+ control, flow control, etc. TCP remembers many things about the
+ state of a connection.
+
+ IP is a one shot datagram protocol. IP has no memory of the
+ datagrams transmitted. It is not appropriate for IP to keep any
+ information about the maximum datagram size a particular destination
+ host might be capable of accepting.
+
+ TCP and IP are distinct layers in the protocol architecture, and are
+ often implemented in distinct program modules.
+
+ Some people seem to think that there must be no communication between
+ protocol layers or program modules. There must be communication
+ between layers and modules, but it should be carefully specified and
+ controlled. One problem in understanding the correct view of
+ communication between protocol layers or program modules in general,
+ or between TCP and IP in particular is that the documents on
+ protocols are not very clear about it. This is often because the
+ documents are about the protocol exchanges between machines, not the
+ program architecture within a machine, and the desire to allow many
+ program architectures with different organization of tasks into
+ modules.
+
+6. IP Information Requirements
+
+ There is no general requirement that IP keep information on a per
+ host basis.
+
+ IP must make a decision about which directly attached network address
+ to send each datagram to. This is simply mapping an IP address into
+ a directly attached network address.
+
+ There are two cases to consider: the destination is on the same
+ network, and the destination is on a different network.
+
+ Same Network
+
+ For some networks the the directly attached network address can
+ be computed from the IP address for destination hosts on the
+ directly attached network.
+
+ For other networks the mapping must be done by table look up
+ (however the table is initialized and maintained, for
+ example, [4]).
+
+
+
+Postel [Page 3]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+ Different Network
+
+ The IP address must be mapped to the directly attached network
+ address of a gateway. For networks with one gateway to the
+ rest of the Internet the host need only determine and remember
+ the gateway address and use it for sending all datagrams to
+ other networks.
+
+ For networks with multiple gateways to the rest of the
+ Internet, the host must decide which gateway to use for each
+ datagram sent. It need only check the destination network of
+ the IP address and keep information on which gateway to use for
+ each network.
+
+ The IP does, in some cases, keep per host routing information for
+ other hosts on the directly attached network. The IP does, in some
+ cases, keep per network routing information.
+
+ A Special Case
+
+ There are two ICMP messages that convey information about
+ particular hosts. These are subtypes of the Destination
+ Unreachable and the Redirect ICMP messages. These messages are
+ expected only in very unusual circumstances. To make effective
+ use of these messages the receiving host would have to keep
+ information about the specific hosts reported on. Because these
+ messages are quite rare it is strongly recommended that this be
+ done through an exception mechanism rather than having the IP keep
+ per host tables for all hosts.
+
+7. The Relationship between IP Datagram and TCP Segment Sizes
+
+ The relationship between the value of the maximum IP datagram size
+ and the maximum TCP segment size is obscure. The problem is that
+ both the IP header and the TCP header may vary in length. The TCP
+ Maximum Segment Size option (MSS) is defined to specify the maximum
+ number of data octets in a TCP segment exclusive of TCP (or IP)
+ header.
+
+ To notify the data sender of the largest TCP segment it is possible
+ to receive the calculation of the MSS value to send is:
+
+ MSS = MTU - sizeof(TCPHDR) - sizeof(IPHDR)
+
+ On receipt of the MSS option the calculation of the size of segment
+ that can be sent is:
+
+ SndMaxSegSiz = MIN((MTU - sizeof(TCPHDR) - sizeof(IPHDR)), MSS)
+
+
+Postel [Page 4]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+ where MSS is the value in the option, and MTU is the Maximum
+ Transmission Unit (or the maximum packet size) allowed on the
+ directly attached network.
+
+ This begs the question, though. What value should be used for the
+ "sizeof(TCPHDR)" and for the "sizeof(IPHDR)"?
+
+ There are three reasonable positions to take: the conservative, the
+ moderate, and the liberal.
+
+ The conservative or pessimistic position assumes the worst -- that
+ both the IP header and the TCP header are maximum size, that is, 60
+ octets each.
+
+ MSS = MTU - 60 - 60 = MTU - 120
+
+ If MTU is 576 then MSS = 456
+
+ The moderate position assumes the that the IP is maximum size (60
+ octets) and the TCP header is minimum size (20 octets), because there
+ are no TCP header options currently defined that would normally be
+ sent at the same time as data segments.
+
+ MSS = MTU - 60 - 20 = MTU - 80
+
+ If MTU is 576 then MSS = 496
+
+ The liberal or optimistic position assumes the best -- that both the
+ IP header and the TCP header are minimum size, that is, 20 octets
+ each.
+
+ MSS = MTU - 20 - 20 = MTU - 40
+
+ If MTU is 576 then MSS = 536
+
+ If nothing is said about MSS, the data sender may cram as much as
+ possible into a 576 octet datagram, and if the datagram has
+ minimum headers (which is most likely), the result will be 536
+ data octets in the TCP segment. The rule relating MSS to the
+ maximum datagram size ought to be consistent with this.
+
+ A practical point is raised in favor of the liberal position too.
+ Since the use of minimum IP and TCP headers is very likely in the
+ very large percentage of cases, it seems wasteful to limit the TCP
+ segment data to so much less than could be transmitted at once,
+ especially since it is less that 512 octets.
+
+
+
+
+Postel [Page 5]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+ For comparison: 536/576 is 93% data, 496/576 is 86% data, 456/576
+ is 79% data.
+
+8. Maximum Packet Size
+
+ Each network has some maximum packet size, or maximum transmission
+ unit (MTU). Ultimately there is some limit imposed by the
+ technology, but often the limit is an engineering choice or even an
+ administrative choice. Different installations of the same network
+ product do not have to use the same maximum packet size. Even within
+ one installation not all host must use the same packet size (this way
+ lies madness, though).
+
+ Some IP implementers have assumed that all hosts on the directly
+ attached network will be the same or at least run the same
+ implementation. This is a dangerous assumption. It has often
+ developed that after a small homogeneous set of host have become
+ operational additional hosts of different types are introduced into
+ the environment. And it has often developed that it is desired to
+ use a copy of the implementation in a different inhomogeneous
+ environment.
+
+ Designers of gateways should be prepared for the fact that successful
+ gateways will be copied and used in other situation and
+ installations. Gateways must be prepared to accept datagrams as
+ large as can be sent in the maximum packets of the directly attached
+ networks. Gateway implementations should be easily configured for
+ installation in different circumstances.
+
+ A footnote: The MTUs of some popular networks (note that the actual
+ limit in some installations may be set lower by administrative
+ policy):
+
+ ARPANET, MILNET = 1007
+ Ethernet (10Mb) = 1500
+ Proteon PRONET = 2046
+
+9. Source Fragmentation
+
+ A source host would not normally create datagram fragments. Under
+ normal circumstances datagram fragments only arise when a gateway
+ must send a datagram into a network with a smaller maximum packet
+ size than the datagram. In this case the gateway must fragment the
+ datagram (unless it is marked "don't fragment" in which case it is
+ discarded, with the option of sending an ICMP message to the source
+ reporting the problem).
+
+ It might be desirable for the source host to send datagram fragments
+
+
+Postel [Page 6]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+ if the maximum segment size (default or negotiated) allowed by the
+ data receiver were larger than the maximum packet size allowed by the
+ directly attached network. However, such datagram fragments must not
+ combine to a size larger than allowed by the destination host.
+
+ For example, if the receiving TCP announced that it would accept
+ segments up to 5000 octets (in cooperation with the receiving IP)
+ then the sending TCP could give such a large segment to the
+ sending IP provided the sending IP would send it in datagram
+ fragments that fit in the packets of the directly attached
+ network.
+
+ There are some conditions where source host fragmentation would be
+ necessary.
+
+ If the host is attached to a network with a small packet size (for
+ example 256 octets), and it supports an application defined to
+ send fixed sized messages larger than that packet size (for
+ example TFTP [5]).
+
+ If the host receives ICMP Echo messages with data it is required
+ to send an ICMP Echo-Reply message with the same data. If the
+ amount of data in the Echo were larger than the packet size of the
+ directly attached network the following steps might be required:
+ (1) receive the fragments, (2) reassemble the datagram, (3)
+ interpret the Echo, (4) create an Echo-Reply, (5) fragment it, and
+ (6) send the fragments.
+
+10. Gateway Fragmentation
+
+ Gateways must be prepared to do fragmentation. It is not an optional
+ feature for a gateway.
+
+ Gateways have no information about the size of datagrams destination
+ hosts are prepared to accept. It would be inappropriate for gateways
+ to attempt to keep such information.
+
+ Gateways must be prepared to accept the largest datagrams that are
+ allowed on each of the directly attached networks, even if it is
+ larger than 576 octets.
+
+ Gateways must be prepared to fragment datagrams to fit into the
+ packets of the next network, even if it smaller than 576 octets.
+
+ If a source host thought to take advantage of the local network's
+ ability to carry larger datagrams but doesn't have the slightest idea
+ if the destination host can accept larger than default datagrams and
+ expects the gateway to fragment the datagram into default size
+
+
+Postel [Page 7]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+ fragments, then the source host is misguided. If indeed, the
+ destination host can't accept larger than default datagrams, it
+ probably can't reassemble them either. If the gateway either passes
+ on the large datagram whole or fragments into default size fragments
+ the destination will not accept it. Thus, this mode of behavior by
+ source hosts must be outlawed.
+
+ A larger than default datagram can only arrive at a gateway because
+ the source host knows that the destination host can handle such large
+ datagrams (probably because the destination host announced it to the
+ source host in an TCP MSS option). Thus, the gateway should pass on
+ this large datagram in one piece or in the largest fragments that fit
+ into the next network.
+
+ An interesting footnote is that even though the gateways may know
+ about know the 576 rule, it is irrelevant to them.
+
+11. Inter-Layer Communication
+
+ The Network Driver (ND) or interface should know the Maximum
+ Transmission Unit (MTU) of the directly attached network.
+
+ The IP should ask the Network Driver for the Maximum Transmission
+ Unit.
+
+ The TCP should ask the IP for the Maximum Datagram Data Size (MDDS).
+ This is the MTU minus the IP header length (MDDS = MTU - IPHdrLen).
+
+ When opening a connection TCP can send an MSS option with the value
+ equal MDDS - TCPHdrLen.
+
+ TCP should determine the Maximum Segment Data Size (MSDS) from either
+ the default or the received value of the MSS option.
+
+ TCP should determine if source fragmentation is possible (by asking
+ the IP) and desirable.
+
+ If so TCP may hand to IP segments (including the TCP header) up to
+ MSDS + TCPHdrLen.
+
+ If not TCP may hand to IP segments (including the TCP header) up
+ to the lesser of (MSDS + TCPHdrLen) and MDDS.
+
+ IP checks the length of data passed to it by TCP. If the length is
+ less than or equal MDDS, IP attached the IP header and hands it to
+ the ND. Otherwise the IP must do source fragmentation.
+
+
+
+
+Postel [Page 8]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+12. What is the Default MSS ?
+
+ Another way of asking this question is "What transmitted value for
+ MSS has exactly the same effect of not transmitting the option at
+ all?".
+
+ In terms of the previous section:
+
+ The default assumption is that the Maximum Transmission Unit is
+ 576 octets.
+
+ MTU = 576
+
+ The Maximum Datagram Data Size (MDDS) is the MTU minus the IP
+ header length.
+
+ MDDS = MTU - IPHdrLen = 576 - 20 = 556
+
+ When opening a connection TCP can send an MSS option with the
+ value equal MDDS - TCPHdrLen.
+
+ MSS = MDDS - TCPHdrLen = 556 - 20 = 536
+
+ TCP should determine the Maximum Segment Data Size (MSDS) from
+ either the default or the received value of the MSS option.
+
+ Default MSS = 536, then MSDS = 536
+
+ TCP should determine if source fragmentation is possible and
+ desirable.
+
+ If so TCP may hand to IP segments (including the TCP header) up
+ to MSDS + TCPHdrLen (536 + 20 = 556).
+
+ If not TCP may hand to IP segments (including the TCP header)
+ up to the lesser of (MSDS + TCPHdrLen (536 + 20 = 556)) and
+ MDDS (556).
+
+
+
+
+
+
+
+
+
+
+
+
+
+Postel [Page 9]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+13. The Truth
+
+ The rule relating the maximum IP datagram size and the maximum TCP
+ segment size is:
+
+ TCP Maximum Segment Size = IP Maximum Datagram Size - 40
+
+ The rule must match the default case.
+
+ If the TCP Maximum Segment Size option is not transmitted then the
+ data sender is allowed to send IP datagrams of maximum size (576)
+ with a minimum IP header (20) and a minimum TCP header (20) and
+ thereby be able to stuff 536 octets of data into each TCP segment.
+
+ The definition of the MSS option can be stated:
+
+ The maximum number of data octets that may be received by the
+ sender of this TCP option in TCP segments with no TCP header
+ options transmitted in IP datagrams with no IP header options.
+
+14. The Consequences
+
+ When TCP is used in a situation when either the IP or TCP headers are
+ not minimum and yet the maximum IP datagram that can be received
+ remains 576 octets then the TCP Maximum Segment Size option must be
+ used to reduce the limit on data octets allowed in a TCP segment.
+
+ For example, if the IP Security option (11 octets) were in use and
+ the IP maximum datagram size remained at 576 octets, then the TCP
+ should send the MSS with a value of 525 (536-11).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Postel [Page 10]
+
+
+
+RFC 879 November 1983
+TCP Maximum Segment Size
+
+
+15. References
+
+ [1] Postel, J., ed., "Transmission Control Protocol - DARPA Internet
+ Program Protocol Specification", RFC 793, USC/Information
+ Sciences Institute, September 1981.
+
+ [2] Postel, J., ed., "Internet Protocol - DARPA Internet Program
+ Protocol Specification", RFC 791, USC/Information Sciences
+ Institute, September 1981.
+
+ [3] Postel, J., "Internet Control Message Protocol - DARPA Internet
+ Program Protocol Specification", RFC 792, USC/Information
+ Sciences Institute, September 1981.
+
+ [4] Plummer, D., "An Ethernet Address Resolution Protocol or
+ Converting Network Protocol Addresses to 48-bit Ethernet
+ Addresses for Transmission on Ethernet Hardware", RFC 826,
+ MIT/LCS, November 1982.
+
+ [5] Sollins, K., "The TFTP Protocol (Revision 2)", RFC 783, MIT/LCS,
+ June 1981.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Postel [Page 11]
+