You need to enable JavaScript to run this app.
文档中心
私有网络

私有网络

复制全文
下载 pdf
巨型帧与MTU
管理路径MTU发现
复制全文
下载 pdf
管理路径MTU发现
简介​
PMTUD(Path Maximum Transmission Unit Discovery)是通过在 IP 包中设置 DF 标志,结合 ICMP 协议反馈的路径 MTU 信息,动态探测源主机至目的主机传输路径中最小 MTU 的技术。​
工作原理​
源主机在发送数据包时,设置DF=1。如果路径上有 MTU 更小的设备,该设备会丢弃该包并返回一个 ICMP 错误,源主机记录该MTU值,并调整数据包大小,直到目的主机收到数据包。步骤如下:​
  1. 设置 DF 标志位:源主机在发送数据包时,会在 IP 头部中将 DF (Don't Fragment) 标志位设置为 1,表示不允许网络路径中的设备对该数据包分片。​
说明​
IPv6 报文头部中没有 DF 标志位,不支持分片。​
  1. 路径中设备的处理:​
  • 如果路径上所有设备 MTU 都大于或等于数据包尺寸,数据包将顺利到达目的主机。​
  • 如果某个设备发现数据包尺寸大于自己的 MTU,并且 DF=1,则设备会丢弃这个数据包。​
  1. ICMP 错误信息:该设备丢包后,向源主机发送一个 ICMP错误消息。​
  • IPv4:向源主机发送 ICMP Type 3, Code 4(Fragmentation Needed and DF set),消息中携带该设备的 MTU 值。​
  • IPv6:向源主机发送 ICMPv6 Type 2(Packet Too Big),消息中携带该设备的 MTU 值。​
  1. 源主机调整:源主机收到 ICMP 错误信息后,会执行以下操作:​
  • 从 ICMP 消息中解析出其中包含的 MTU 值。​
  • 在其路由表或连接缓存中,记录下到该目的地址的MTU。​
  • 使用这个新的、更小的 MTU 值重新打包并发送之前失败的数据。​
  1. PMTU更新:​
  • PMTU 非永久有效。Linux 系统路由缓存默认老化时间为 600 秒,老化后需重新探测。链路存在小 MTU 时,建议定时探测或调整老化时间。​
  • 该过程重复进行,直到找到足够小的 MTU,使数据包无需分片即可到达目的地。​
开启/关闭PMTUD​
在传输路径上所有设备均开启PMTUD的情况下,源主机向目的主机发送数据包,若途中某个设备(如路由器)的MTU小于数据包,则它会将数据进行分片,并返回一个ICMP消息(其中包含了它的MTU)给源主机,源主机的应用程序可据此进行适配,主动调整数据包大小,避免传输过程中因被分片而影响网络性能。了解更多​
操作说明​
请确保传输路径上所有设备均放通PMTUD的ICMP消息,如源/目的主机的安全组、网络ACL、防火墙等。​
操作步骤​
以CentOS 7.9为例,操作步骤如下:​
  1. 远程登录云服务器,详细请参见 登录实例。​
  1. 输入以下命令,查看是否开启PMTUD。​
  • sysctl net.ipv4.ip_no_pmtu_disc​
  • 若返回值为0,则表示PMTUD已开启,若返回值为1,则表示PMTUD已关闭。​
  1. 开启和关闭的操作如下:​
  • 开启:执行以下命令,开启PMTUD。​
  • sysctl -w net.ipv4.ip_no_pmtu_disc=0​
  • 关闭:执行以下命令,关闭PMTUD。​
  • sysctl -w net.ipv4.ip_no_pmtu_disc=1​
手动探测PMTU​
以CentOS 7.9为例,操作步骤如下:​
  1. 远程登录云服务器,详细请参见 登录实例。​
  1. 执行以下命令,探测源主机到目的主机的最小MTU值。​
  • ping -c 1 -M do -s [包大小] 目的地址​
  • -c 1:仅发送一个探测包。​
  • -M do:不允许该探测包分片。​
  • -s [包大小] :发送的探测包大小。测试1500字节MTU(1472包大小 + 20字节IP头 + 8字节ICMP头)。​
  • 示例:ping -c 1 -M do -s 1472 192.168.1.66​
  1. 若成功ping通,则调整探测包大小,若返回ICMP错误信息,则得到PMTU。​
​
最近更新时间:2026.10.12 14:53:24
这个页面对您有帮助吗?
有用
有用
无用
无用