Linux 检测通信路径上的PMTU(路径最大传输单元)

news/2024/10/22 13:35:21/

问题描述

终端设备向云端POST数据,数据量较小的没有问题,数据量大的必然出现丢包。网络很通畅,延迟较低。

分析

后来发现,终端到云端的通信路径上某个路由器节点的MTU小于终端的MTU,当终端发出的IP数据包长度大于该路由器节点的MTU时,IP数据包被丢弃。

处理方法

降低终端(Linux系统)的MTU。这里包含两个问题:

  1. 如何设置MTU?
  2. MTU设置为多少?

如何设置MTU?

什么是MTU?

MTU: MTU( Maximum Transmission Unit),最大传输单元,单位是字节。

大部分的网络设备的mtu默认值是1500。如果本机的mtu值大于网关的mtu值,大的数据包就会被拆开来传送,这样会产生数据包的碎片,增加丢包率,降低网络速度。把mtu设置比网关小或者相同,可以减少丢包。设置合适的mtu值,可以减少部分网站打不开,上网速度慢等问题。一般情况,可以把路由器、交换机和服务器的mtu值统一设置。

查看服务器的mtu值

cat /sys/class/net/网口名称/mtu

或者

# ifconfig
ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1200

临时修改mtu值:(重启服务器后失效)

ifconfig  <网口名称> mtu 1200

永久生效

在NetworkManager的连接配置文件里配置mtu,在[ethernet]选项添加一行 mtu=1280:
在这里插入图片描述

MTU设置为多少?

MTU设置为多少比较合理?可以设置为PMTU的值。

PMTU是什么?

PMTU是Path MTU(Maximum Transmission Unit)的缩写,指的是在网络通信中,从源主机到目的主机所经过的所有网络设备中,能够通过的最大数据包大小。PMTU的原理是通过不断发送大小不同的数据包,直到发现一个最大的数据包能够成功传输,从而确定PMTU的大小。

PMTU的应用主要是在TCP/IP协议中,用于避免IP分片。当一个数据包的大小超过了某个网络设备的MTU时,该设备会将数据包分片,然后再将分片后的数据包发送出去。这样会增加网络传输的负担,降低网络传输的效率。因此,TCP/IP协议中的PMTU发现机制可以帮助避免IP分片,提高网络传输的效率。

怎么检测PMTU?

可以使用ping命令来检测。

PMTU最初是为IPv4路由器设计的。可以使用ICMP协议中的type和code字段发送MTU=XXX的消息,当这个ICMP消息到达IP包的源主机时,源主机将设置正确的MTU。

可以使用ping命令来检测PMTU,例如:

ping -c 4 -M do -s 1472 <IPv4 Address>

其中,-c 指定ping的次数。

-M <pmtud opt>     define mtu discovery, can be one of <do|dont|want>

Select Path MTU Discovery strategy. pmtudisc_option may be
either
do (prohibit fragmentation, even local one),
want (do PMTU discovery, fragment locally when packet size is large),
or
dont (do not set DF flag).

-M do 表示在传输过程中,IP数据包禁止分包,如果路由器收到长度比自身设置的MTU大的IP数据包,则不能拆分,只能丢弃,并在ICMP回复报文中设置MTU大小。

-s 1472 表示设置ICMP的PDU(有效载荷)为1472字节。ping 使用的是ICMP协议,ICMP的下层协议是IP协议,ICMP首部(header)共8字节,IP首部(header)共20字节,ICMP的IP数据包 = IP首部 + ICMP首部 + ICMP的PDU,所以 -s 1472 表示 整个IP数据包的长度等于20+8+1472 = 1500 字节。

如果源主机到目的主机的通信路径中有节点的MTU小于1500,则会返回ICMP消息“message too long”到达IP包的源主机:

# ping -c 4 -M do -s 1472 x.x.x.x
PING x.x.x.x (x.x.x.x) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1492
ping: local error: message too long, mtu=1492
ping: local error: message too long, mtu=1492
ping: local error: message too long, mtu=1492--- 123.103.127.118 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3051ms

推荐的MTU值是1492,去掉ICMP首部(header)的8字节和IP首部(header)的20字节,1492 - 28 = 1464,-s 的值修改为1464试试:

# ping -c 4 -M do -s 1464 x.x.x.x
PING x.x.x.x (x.x.x.x) 1464(1492) bytes of data.
1472 bytes from x.x.x.x: icmp_seq=1 ttl=49 time=20.2 ms
1472 bytes from x.x.x.x: icmp_seq=2 ttl=49 time=20.4 ms
1472 bytes from x.x.x.x: icmp_seq=3 ttl=49 time=20.6 ms
1472 bytes from x.x.x.x: icmp_seq=4 ttl=49 time=20.4 ms--- 123.103.127.118 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 20.241/20.402/20.563/0.114 ms

将源主机的MTU值修改为1492后,问题解决。

如果仍返回“message too long”,可以逐步降低-s 的值,直至ping返回成功。


http://www.ppmy.cn/news/430922.html

相关文章

计算机云什么不同步,微云同步盘和腾讯微云的区别!微云只上传不同步-太平洋电脑网...

微云是腾讯旗下的网盘数据同步类软件&#xff0c;得益于可以跟QQ绑定&#xff0c;深受部分QQ用户喜爱。但问题来了&#xff0c;微云有两个版本&#xff0c;分别是“腾讯微云”和“微云同步盘”。那么&#xff0c;“腾讯微云”和“微云同步盘”有什么区别&#xff1f;其实答案很…

坚果云和微云哪个好?谈谈我的使用感受

最近我刚比较过坚果云和微云&#xff0c;最后我得出的结论是如果不愿意花钱使用网盘&#xff0c;我选坚果云&#xff0c;如果愿意花钱的&#xff0c;我选择坚果云或者百度网盘。 先来对比对比以下两家的产品。 两家产品的差异点可以归纳为以下几点&#xff1a; 坚果云的优势&a…

微云Android2.2apk,微云安卓版V6.2.10

微云安卓版V6.2.10游戏介绍 微云安卓版是一款安卓平台的手机软件&#xff0c;微云安卓版让云服务走进每个人的生活。腾讯微云安卓版发布了V1.4版本的更新&#xff0c;新增与QQ好友的分享功能&#xff0c;使得微云在工作生活中的使用体验进一步提升。把新版本的微云安装到手机中…

卡饭里的云计算机,微云可以在电脑用吗

微云可以在电脑用吗 卡饭网 本站整理 2018-09-05 有些比较重要的文件&#xff0c;我们会习惯性它存放在网盘中&#xff0c;而QQ网盘是多数QQ用户会优先考虑的&#xff0c;文件一多时&#xff0c;我们就要通过文件夹来将它进行归纳、整理。 在以往的QQ版本中&#xff0c;我们可以…

腾讯微云如何自动备份照片?

日常工作生活中&#xff0c;将重要文件、照片备份至网盘、云端&#xff0c;是最常见做法&#xff0c;下面介绍一下“腾讯微云如何自动备份照片&#xff1f;” 腾讯微云如何自动备份照片&#xff1f; 工具/原料 苹果手机/笔记本电脑 腾讯微云/手机IOS版 方法/步骤 1 点击手机桌…

云存储——腾讯微云

微云 目录 微云 特点 云计算概念 微云客户端 软件信息软件介绍 腾讯微云 微云网盘微云相册微云传输 版本更新 相关新闻 展开 编辑本段微云 微云logo[1] [2] 微云就是云计算的一个分支&#xff0c; 是指云计算在个局部范围里的某些应用。 随着网络的发展&#xff0c;微应用将越来…

为什么腾讯微云显示服务器繁忙,谁知道腾讯微云是干什么?

2005-08-17 QQ会员能干什么呢 可以建两个数群和可以随便换头像&#xff0c; QQ邮箱100兆邮箱容量&#xff0c;随心所欲&#xff0c;不超过单封邮件大小(30M)的附件都可以贴&#xff0c;不管身在何处&#xff0c;都可以收到邮件到达的手机通知&#xff0c;您发出的邮件&#xff…

share.weiyun.com微云网页链接无法打开 解决办法

不知道是什么原因&#xff0c;share.weiyun的链接突然打不开了&#xff08;是突然&#xff0c;前几天还能正常打开的&#xff09;&#xff0c;百度查找原因&#xff0c;解决办法都是修改hosts文件&#xff0c;可是我试了好几个&#xff0c;都不管用&#xff08;可能是只是对我不…