【网络】MTU相关网络丢包问题分析处理

一、 MTU MSS 概念

什么是MTU?

MTU是数据链路层的概念,限制的是数据链路层payload的大小,即上层协议大小(包括上层协议头)

例如设置主机接口mtu为1450。则在一个TCP报文中,1450 = 20字节IP头 + 20字节TCP头 + 1410TCP数据。

什么是MSS?

MSS最大报文段,是TCP中一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(注意不包含TCP头部大小)

如何探测路径MTU值?

Linux主机中: 执行ping x.x.x.x -s 1422 -M do ,x.x.x.x是目标地址,-s指明icmp报文的数据部分大小(不包含icmp 8字节头部)。
-M do 表示不允许分片。多试几次,找到临界点。
以mtu为1450为例,1450 = 20字节IP头 + 8字节icmp头 + 1422数据,则-s指定为1422可以正常通过

Windows主机中: 执行ping x.x.x.x -l 1472 -f ,x.x.x.x是目标地址,-l指明icmp报文的数据部分大小(不包含icmp 8字节头部),-f表示不允许分片。

二、案例分析

从路径上看,丢包点大致可以有下面几个位置:

1. 数据中心外部丢包

2. 数据中心内部丢包

3. 主机内部丢包

对于数据中心内部丢包问题,最重要的是能 “界定问题边界”,换句话说,这是谁的锅?
拥有自己数据中心的,往往会由网络工程师负责配置网络,系统工程师管理主机/虚拟化环境。界定的边界办法可以是:


1)长ping 网关地址,如果出现丢包,十有八九是网络设备有问题。

2)使用MTR看路径上丢包点。

3)抓包分析

MTU丢包

1.检查接口MTU配置,ifconfig eth1/eth0,默认是1500;

2.进行MTU探测,然后设置接口对应的MTU值;

image.png

解决方案:

1. 根据实际情况,设置正确MTU值;

2. 设置合理的tcp mss,启用TCP MTU Probe
# cat /proc/sys/net/ipv4/tcp_mtu_probing

tcp_mtu_probing - INTEGER Controls TCP Packetization-Layer Path MTU Discovery.
Takes three values:
0 - Disabled 
1 - Disabled by default, enabled when an ICMP black hole detected
2 - Always enabled, use initial MSS of tcp_base_mss.

image.png

image.png

MTU带来的问题实在太多了,但凡做过运维、实施或者技术支持的工程师,或多或少都会遇到。
一个典型的MTU问题发生在类似图1的环境中,即两个子网的MTU大小不一样。

image.png

当客户端发给服务器的巨帧经过路由器时,或者被丢包,或者被分片。
这取决于该巨帧是否在网络层携带了DF(Don’t fragment)标志。
如果带了就被丢弃,如果没带就被分片。

从Wireshark上很容易看到DF标志,如图2中的方框内所示。
分片的情况往往被忽略,因为它只影响一点点性能,大多数时候甚至察觉不出。
丢包的情况就无法忽略了,因为丢包之后再重传多少遍都没用,会一直丢,整个传输就像掉进了黑洞,所以往往会导致严重的后果。

image.png

对于 TCP来说,要尽量避免分片。
因为必须所有分片都到达才能重组成一个包,其中任何一个分片丢失了,都必须重发所有分片。
分片会增大丢包和乱序的概率,同时也会增加时延。

如果在TCP报文经过的传输网络中有某个设备的MTU设置得太小, 则它会将收到的IP报文进行分片。
分片会增大丢包和乱序的概率, 同时也会增加时延。

MTU不等,大的数据包就被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。
不同设备和不同网络对接一定要注意一下MTU值,设置一定要相同,就可以减少丢包,否则会降低网络速度或打不开网页,无法上传数据甚至业务不通。

为什么说 MTU 值会影响网速呢?

在 Win 系统中,MTU 值默认是 1500。假设我们现在要传输 3000 字节的数据,只需要拆分成 2 个数据包就行了。
而如果是 ADSL 接入方式,它的 MTU 值是 1492 的话,则 3000 字节的数据需要分为 3 个数据包传送。
由于数据包的数量增多了,同时拆包组包都需要额外消耗时间,因此网速变慢也就不足为奇了。
image.png

一次MTU问题导致的RDS访问故障
https://mp.weixin.qq.com/s/b2bk1dRDJwHCWp7cN_Vy1Q
image.png

1. 在DF位没有置1情况下,IP数据包大小超过接口MTU值时,IP数据包会切片(framed)

2. 在DF位没有置1情况下,已经切片的IP数据包在转发过程中不会组装

注:如直连的2个接口,一个MTU为1500,另一个MTU不是1500,可能会产生丢包
(原因:MTU就是MRU;切片发生在数据包发出时,不发生在接收时)

MTU一经确定不再改变?

实际上MTU并不是确定了之后就一直不变的,每个端上查看到的MTU并非是最终的MTU大小,这个怎么理解呢?

大部情况下,网络发送端都需要经过各种中间设备才能到达目标机器,这些中间设备可能是路由器、交换机、中间代理服务器等等,这些设备的MTU大小可能有大有小,更糟糕的是,每次走的路径不一样MTU大小可能也不一样。

那么,假如我们的发送端的MTU是1500,中间某个交换机或者路由器的MTU是200字节,当数据包到达这个设备的时候IP层就会触发拆包,很明显如果出现这种情况网络传输效率会大幅降低。
那么有什么办法可以解决这个问题呢?

我们可以思考一下,要解决这个问题其实只要找到链路中最小的MTU就可以了,那么,我们如何感知中间设备的MTU呢?
有一个叫ICMP的协议可以在中间设备出现异常的时候将异常返回,从而发送端可以感知到,关于ICMP协议这里不展开,有兴趣可以自行去了解。

实际上,TCP协议已经实现了链路MTU的探测,叫做PMTU,原理就是设置IP报头DF不分片位置为不分片,这样当遇到比MSS小的MTU的设备,这个设备就会返回一个ICMP报文,里面携带了错误消息和可接受的MTU大小。

三、参考

什么是MTU值,MTU值有什么用?
https://mp.weixin.qq.com/s/gruLG48W7KEJ_BQJ8tooDQ

GaussDB网络重传/丢包问题定位总结
https://bbs.huaweicloud.com/blogs/235237

网络中一些丢包场景
https://mp.weixin.qq.com/s/FdoDfchrYC0H-Rd0wRm4gg

网络延时大,丢包,卡顿,不好用,时断时续找原因
https://mp.weixin.qq.com/s/IX8Q8yAdII962r2p8Yd8lw

云网络丢包故障定位全景指南
https://mp.weixin.qq.com/s/kkn72wtKvjIopySE5VMnbA

案例分享:MTU值导致视频丢包故障分析
https://mp.weixin.qq.com/s/VGtGwtzz2eKTIG3QtwgwkA

MTU导致的悲剧
https://mp.weixin.qq.com/s/hRhpwZge_LEmDfJINp-oyQ

解决网络丢包问题及故障判断方法
https://mp.weixin.qq.com/s/Zt2SRnbRLHwIbDzErRdxXw

一次MTU问题导致的RDS访问故障
https://mp.weixin.qq.com/s/b2bk1dRDJwHCWp7cN_Vy1Q

网速慢?改下MTU值试试
https://mp.weixin.qq.com/s/LHAuRMf72J6zm_hOffW3rA

案例分享:MTU值对传输网络对接的影响
https://mp.weixin.qq.com/s/J6-uG2mY4bGQcU5s-oU-Aw

丢包问题研究
https://mp.weixin.qq.com/s/GRmqu1xcNZ7wRNjYrrHFCQ

MTU系列实验(1)——IP MTU
https://mp.weixin.qq.com/s/66sXXTt3B0A8zt8CgB4iug

TCP问题定界六大方向分析总结
https://mp.weixin.qq.com/s/IE2dkmYd0etmlK7G_wVIHA

某局MTU问题导致手机无法上网故障排查过程
https://mp.weixin.qq.com/s/HPNPa4IfCnCaU3h4rwNtUg

为什么MSS都小于MTU?
https://mp.weixin.qq.com/s/BDsI33nRsZHCx1VhJtyzcA

设置路由器MTU与操作系统的MTU值相同,可提升网速
https://mp.weixin.qq.com/s/QRdbLdiG3jDc1H8x8sVnjA

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值