欢迎来真孝善网,为您提供真孝善正能量书籍故事!

为什么TCP中的最大分段大小(MSS)通常小于最大传输单元(MTU)?

时间:11-20 名人轶事 提交错误

大家好,感谢邀请,今天来为大家分享一下为什么TCP中的最大分段大小(MSS)通常小于最大传输单元(MTU)?的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

MSS:Maximum Segment Size,TCP向IP层提交的最大分段大小,不包括TCP Header和TCP Option,只包含TCP Payload,MSS是TCP用来限制应用层发送的最大字节数的。如果底层物理接口MTU=1500字节,则MSS=1500-20(IP头)-20(TCP头)=1460字节。如果应用程序有2000个字节要发送,则需要两个段才能完成发送。第一个TCP 段=1460,第二个TCP 段=540。

image.png# ip addr listimage.pngimage.pngMTU 一旦确定就不会改变?

事实上,MTU确定后并不会保持不变。各端看到的MTU并不是最终的MTU大小。这怎么理解呢?

大多数情况下,网络发送方需要经过各种中间设备才能到达目标机器。这些中间设备可能是路由器、交换机、中间代理服务器等。这些设备的MTU大小可大可小。更糟糕的是,根据每次所采取的路径,MTU 大小可能会有所不同。那么,如果我们发送端的MTU是1500,而中间某个交换机或者路由器的MTU是200字节,那么当数据包到达这个设备时,IP层就会触发拆包。上面我们详细分析了IP层拆包的存在性。问题。因此,很明显,如果出现这种情况,网络传输效率将会大大降低。那么有没有办法解决这个问题呢?

我们可以考虑一下。要解决这个问题,我们只需要找到链路中最小的MTU即可。那么,我们如何感知中间设备的MTU呢?有一种协议叫ICMP,当中间设备遇到异常时可以返回异常,以便发送端能够感知到。这里不讨论ICMP协议。如果大家有兴趣的话,可以自己去了解一下。

# ping -s 1700 -M 执行www.seepre.com

PING www.seepre.com (106.12.210.214) 1700(1728) 字节数据。

ping: 本地错误: 消息太长,mtu=1500

ping: 本地错误: 消息太长,mtu=1500

ping: local error:报文太长,mtu=1500-s表示发送多少字节,ping会填写相应的字节数并将数据包发送出去。

-M 表示回显MTU相关的错误信息

最后我们看到返回了一个错误,表明我们发送的数据太长,并表明当前链路的MTU大小。

这样的话,我们就可以得到整个链路中最小的MTU,传输层就可以根据最小的MTU来设置自己的MSS。比如前面的例子,如果中间一个设备的MTU只有200字节,那么将MSS设置为160字节,这样TCP每次发送的数据包就不会超过200字节,并且拆包IP层的功能不会被触发。

事实上,TCP协议已经实现了链路MTU检测,称为PMTU。原理是将IP头的DF不分片位置设置为不分片,这样当遇到MTU小于MSS的设备时,设备会返回一个ICMP报文,其中携带错误消息和可接受的MTU大小。

image.png

参考

为什么1500字节成为互联网MTU标准?

https://www.freesion.com/article/5773577654/

路径MTU 概述

http://sunyongfeng.com/201712/networks/path_mtu

为什么MSS比MTU小?

https://blog.csdn.net/mrosrrry/article/details/125162204

OK,本文到此结束,希望对大家有所帮助。

用户评论

月下独酌

我刚开始学网络啊,真的不太懂MSS和MTU的关系.

    有6位网友表示赞同!

把孤独喂饱

好像是为了防止数据包太大导致丢包吧?

    有16位网友表示赞同!

£烟消云散

之前看技术文章说MSS是连接中最大的可传输数据包尺寸。

    有16位网友表示赞同!

各自安好ぃ

学习TCP协议好久了,这个问题一直没搞明白!

    有5位网友表示赞同!

清羽墨安

是不是MTU是指整个网络链路的最大报文长度呀?

    有17位网友表示赞同!

经典的对白

求科普啊,希望有人能解释清楚MSS和MTU之间的关系。

    有19位网友表示赞同!

瑾澜

我猜是出于安全性考虑吧,数据包太大会增加攻击的风险。

    有16位网友表示赞同!

单身i

总觉得TCP协议设计的还挺巧妙,可以调节发送大小避免混乱

    有8位网友表示赞同!

∞◆暯小萱◆

这跟分割文件传输类似吧。为了保证完整性,可能会对文件进行合理的切割。

    有11位网友表示赞同!

凉笙墨染

感觉像是在玩“贪吃蛇”,大了就容易受阻碍,小的能够灵活穿过

    有7位网友表示赞同!

鹿先森,教魔方

想问问MSS的计算方法啊?是哪里做的决定呢?

    有18位网友表示赞同!

相知相惜

我怀疑是不是跟路由器的配置有关?它可能限制了数据包的最大长度。

    有11位网友表示赞同!

君临臣

总觉得这跟网络带宽也有关联吧,如果带宽太小,就没办法发送大数据包。

    有7位网友表示赞同!

我绝版了i

有没有人能分享一些具体的例子和说明呢?更容易理解。

    有20位网友表示赞同!

别伤我i

看来TCP的原理确实复杂啊,需要好好学习!

    有18位网友表示赞同!

猫腻

这跟HTTP协议的关系吗? HTTP的数据传输也是分小块的吗?

    有13位网友表示赞同!

眉黛如画

希望能够有一个简单易懂的图解来解释这个问题。

    有12位网友表示赞同!

孤岛晴空

是不是可以根据实际需求动态调整MSS的大小呢?

    有19位网友表示赞同!

麝香味

如果MSS和MTU设置不当,会影响网络性能吗?

    有7位网友表示赞同!

【为什么TCP中的最大分段大小(MSS)通常小于最大传输单元(MTU)?】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活