diff options
Diffstat (limited to 'doc/rfc/rfc879.txt')
-rw-r--r-- | doc/rfc/rfc879.txt | 638 |
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] + |