MTU和MSS关系

一、MTU和MSS的概念
1.1什么是MTU
MTU:最大传输单元。这是一个数据链路层的概念,在以太网中,指的是刨去以太网帧的帧头(DMAC目的地址MAC48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes,那么剩下承载上层协议的地方也就是数据部分最大就只能有1500Bytes. 这个值我们就把它称之为MTU。数据结构如下:

 

 所以在以太网里,最大MTU值为1500字节,最小MTU值为46字节。

如果是拨号,现在一般都是用的PPPoE,也就是在以太网协议里嵌套了PPP协议,因为PPT协议头部用掉了8个字节,所以数据部分就变成了46-1492字节(因为以太网电气性能决定了整个数据包长度不能大于1518字节),数据结构如下:

 

 因此,MTU在不同的网络协议下,它的值不同。如果内网发送的一个数据包的上层协议数据长度超过了MTU的值,则这个包就必须要拆开来分片才能传输,如果设置了DF=1,则该数据包将不能被传输,直接丢弃。

MTU值存在于每一个网络接口,不在具体数据包中,因此抓包查看数据包无法确定MTU值大小。
MTU不对可能出现的情况有:网页打开不完整、应用无法打开等,此时ping没有问题,telnet测试端口也没有问题。

1.2什么是MSS
MSS:最大分段大小。是TCP协议中的一个概念,UDP协议中不存在MSS一说。
为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(但需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes),所以往往MSS为1460,数据结构如下:

 

 通讯双方在三次握手的SYN和SYN+ACK包中会带有各自的MSS值,根据双方提供的MSS值的最小值确定为这次连接的最大MSS值。抓包可以看到MSS值:

 

 

一般来说,MSS的值会小于MTU的值(因为要扣除IP头和TCP头),如果MSS的值大于MTU的值,而发送的数据DF位又被置1,不允许分片,则会导致数据无法正常发送与接收。

本节小结:
1.MSS是TCP协议的概念,UDP协议没有MSS这一说法。
2.MSS的协商是客户端和服务器在TCP三次握手的前2个包确定下来的,和中间设备的MTU是没有任何关系的。
3.PPPOE拨号环境下,MTU最大是1492,所以我们设备拨号的时候,MTU应该要修改成1492。
————————————————
版权声明:本文为CSDN博主「Clearyat」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43445237/article/details/128394929

 

 

附件2:

MSS: Maximum Segment Size,即最大报文段长度。MSS是TCP协议的一个选项,用于在TCP连接建立时,收发双方可以通知对方通信时每一个报文段所能承载的最大数据长度。注意该选项不是协商选项,只是一种通知。即接收方告知发送方自己的MSS大小,对方使用该值与否,取决于对方。

MTU: Maximum Transmission Unit,即最大传输单元,表示数据链路层可以传输的最大数据包(不包含帧首部和尾部)。每个网络都有其MTU值。该值大小可能是由于技术限制,也可能是工程、技术或管理上的考虑。即使是同一种网络在不同的环境中或设置下,MTU也是不同的。一些流行的网络中,MTU的值如下:

ARPANET, MILNET = 1007

Ethernet(以太网) = 1500

MTU作用于数据链路层,因网路不同而不同。MSS作用域传输层,表明传输层能够传输的数据大小。高层协议必然受到低层协议和数据链路的限制。因此,MSS也受限于MTU.具体的关系如下:

在最好的情况下,即IP数据报和TCP报文段都只使用最小的首部,则

MSS = MTU - 20(IP首部) - 20 (TCP首部)

MSS = MTU - 40

在最坏的情况下,IP数据报和TCP报文段都使用最大的首部长度,则

MSS = MTU - 60(IP首部) - 60 (TCP首部)

MSS = MTU - 120

也就是说在以太网环境中,最大MSS = 1500 - 40 = 1460字节。

为什么我们要十分注意MSS以及MTU ?

如果我们的IP数据包交付给数据链路层封装成帧时,如果IP数据包的大小大于MTU,我们就必须对IP数据报进行分片,等到达终点后再对IP分片进行组装,这无疑降低了网络利用率和网络吞吐量。因此,我们必须尽量控制MSS大小不超过最大大小,从而使得IP数据报交付给数据链路层时能够不分片。

现实

在当今流行的操作系统中,在使用IPv4时都将MTU设置为576,因此MSS也就被限制在536以内。为什么操作系统实现中将MTU设置为576呢?因为老的ISP拨号网络的标准值为576,甚至Internet上以下路由器的MTU也是576.原则上来说,只要网络连接稳定性高,MTU越大则传输效率越高。但是,如果接收机器所在网络或传输路径上路由器的MTU小的话,数据帧将不得不再次被拆分,这样反而降低了效率。

在使用IPv6时,MTU默认设置为1280,则MSS为1220( 1280 - 20字节TCP首部-40字节IP首部)

区分

最大报文段长度(MSS)与最大传输单元(Maximum Transmission Unit, MTU)均是协议用来定义最大长度的。不同的是,MTU应用于OSI模型的第二层数据链接层,并无具体针对的协议。MTU限制了数据链接层上可以传输的数据包的大小,也因此限制了上层(网络层)的数据包大小
————————————————
版权声明:本文为CSDN博主「微微zhang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhang19900311/article/details/116063007

posted @ 2023-02-21 22:29  sword0077  阅读(2001)  评论(0编辑  收藏  举报