分享
 
 
 

RFC879 - TCP maximum segment size and related topics

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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.

RFC879 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).

RFC879 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]).

RFC879 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)

RFC879 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.

RFC879 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

RFC879 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

RFC879 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.

RFC879 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).

RFC879 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).

RFC879 November 1983

TCP Maximum Segment Size

15. References

[1] Postel, J., ed., "Transmission Control Protocol - DARPA Internet

Program Protocol Specification", RFC793, USC/Information

Sciences Institute, September 1981.

[2] Postel, J., ed., "Internet Protocol - DARPA Internet Program

Protocol Specification", RFC791, USC/Information Sciences

Institute, September 1981.

[3] Postel, J., "Internet Control Message Protocol - DARPA Internet

Program Protocol Specification", RFC792, 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", RFC826,

MIT/LCS, November 1982.

[5] Sollins, K., "The TFTP Protocol (Revision 2)", RFC783, MIT/LCS,

June 1981.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有