路径MTU发现

目录

路径MTU发现

[IPv4 PMTUD 工作流程(RFC 1191)](#IPv4 PMTUD 工作流程(RFC 1191))

[IPv6 PMTUD 特点(RFC 8201)](#IPv6 PMTUD 特点(RFC 8201))

补充

常见问题与优化

[PMTUD vs 手动分片](#PMTUD vs 手动分片)

[PTB 报文](#PTB 报文)

作用

[PTB 携带关键信息](#PTB 携带关键信息)

[和 IPv4 对应报文区分](#和 IPv4 对应报文区分)

常见故障

[IPv4:两种处理大包方式(手动分片 / PMTUD 动态探测)](#IPv4:两种处理大包方式(手动分片 / PMTUD 动态探测))

[模式 1:DF=0(可分片,传统手动分片逻辑)](#模式 1:DF=0(可分片,传统手动分片逻辑))

[模式 2:DF=1(禁止分片,配合 PMTUD 动态探测,现代 TCP 默认开启)](#模式 2:DF=1(禁止分片,配合 PMTUD 动态探测,现代 TCP 默认开启))

[IPv6:彻底取消路由器分片,只能靠 PMTUD+PTB 报文](#IPv6:彻底取消路由器分片,只能靠 PMTUD+PTB 报文)


路径MTU发现

路径 MTU 发现(PMTUD) 是 TCP/IP 协议栈的核心机制,用于动态探测源到目标路径上的最小 MTU(Path MTU),避免数据包在中间路由器被分片或丢弃,提升传输效率

  • MTU(最大传输单元) :单条链路上可传输的最大 IP 数据包长度(不含二层帧头),以太网默认 1500 字节
  • PMTU(路径 MTU) :源到目标整条路径中,最小的链路 MTU,决定了整条路径能传输的最大无分片数据包大小。
  • PMTUD :通过IP 头部 DF 位ICMP 错误报文,动态发现 PMTU 的机制

IPv4 PMTUD 工作流程(RFC 1191)

  • 初始假设 :源主机以出接口 MTU (如 1500)作为初始 PMTU,发送数据包时设置 IP 头部 DF=1(不分片)
  • 中间节点检测 :若数据包大小 > 某路由器出接口 MTU,且 DF=1,路由器丢弃数据包 ,并返回ICMP 目的不可达 报文,代码为 "需要分片但 DF 置位",同时携带该路由器出接口的 MTU 值
  • 源端调整 :源收到 ICMP 报文后,将 PMTU 更新为该更小的 MTU,并按新尺寸重传数据
  • 收敛完成:重复上述过程,直到数据包可无分片到达目标,此时的 PMTU 即为路径最小 MTU

IPv6 PMTUD 特点(RFC 8201)

  • 中间路由器禁止分片:IPv6 仅允许源端分片,中间路由器不处理分片
  • 专用 ICMPv6 报文 :超 MTU 时返回 ICMPv6 Packet Too Big(PTB) 报文,明确携带受限链路的 MTU 值
  • 机制更可靠 :无 IPv4 中 "ICMP 被过滤" 导致的黑洞问题,是 IPv6 的必选机制


补充

DF 位(Don't Fragment) :IP 头部标志位,DF=1 禁止中间路由器分片,是 PMTUD 的触发开关

ICMPv4/ICMPv6 报文

  • IPv4:ICMP Type=3, Code=4(需要分片且 DF 置位)
  • IPv6:ICMPv6 Type=2(Packet Too Big)

PMTU 缓存与老化:源主机缓存每条路径的 PMTU,默认老化时间(如 10 分钟),超时后重新探测

与 TCP MSS 的关系 :TCP 会基于 PMTU 计算 MSS = PMTU - 40(IP+TCP 头部),确保 TCP 段不超 PMTU,避免分片Cisco



常见问题与优化

PMTU 黑洞(最常见故障)

  • 原因:防火墙 / 路由器过滤 ICMP 不可达报文 ,源收不到反馈,持续发送大包导致持续丢包
  • 解决:
    • 放行 ICMP Type=3 Code=4(IPv4)/ Type=2(IPv6)
    • 启用 PLPMTUD(数据包层 PMTU 发现),通过应用层探测替代 ICMP,更鲁棒

性能影响

  • 探测阶段会产生少量丢包与重传,但长期避免分片,整体提升吞吐量

配置建议

  • 服务器 / 路由器默认启用 PMTUD
  • 关键链路统一 MTU(如 1500),减少 PMTU 波动
PMTUD vs 手动分片
对比项 PMTUD(自动) 手动设置小 MTU
效率 动态适配,最大化包长 固定小包,带宽利用率低
适应性 路径变化自动调整 路径变化需手动改配置
复杂度 协议自动处理 运维成本高
适用场景 互联网、复杂广域网 简单局域网、已知固定 MTU

PMTUD 是避免 IP 分片、优化传输性能 的核心机制,通过DF 位 + ICMP 反馈动态找到路径最小 MTU

IPv4 依赖 ICMP 易遇黑洞,IPv6 通过专用 PTB 报文更可靠,现代网络(如数据中心、云)均需正确配置与放行相关 ICMP,以保障传输效率


PTB 报文

Packet Too Big,ICMPv6 专用报文,类型值 Type=2

作用

IPv6 规定:中间路由器不能对数据包分片,只有源主机能分片

当收到的 IPv6 数据包长度超过路由器出接口 MTU,且无法分片时:

路由器丢弃报文,回复一条 PTB 报文给源主机

PTB 携带关键信息

报文内部会写明当前链路允许的最大 MTU 值,源主机收到后,自动降低发包长度,匹配这条路径 MTU(PMTUD 机制)

和 IPv4 对应报文区分
  • IPv4:MTU 超限、DF 置位时,返回 ICMPv4 Type3 Code4(需要分片但不分片)
  • IPv6:统一使用 ICMPv6 Type2 PTB 报文,是 IPv6 路径 MTU 发现的核心反馈报文
常见故障

防火墙拦截 ICMPv6 PTB 报文后,源主机收不到 MTU 提醒,持续发送大包,出现网页打不开、文件传输卡顿等 PMTU 黑洞问题



  • MTU:一条链路二层能承载的最大 IP 包,以太网默认 1500 字节。
  • IP 分片:一个大包超过出口 MTU,路由器把大包拆成多个小包,到目的地再重组

IPv4:两种处理大包方式(手动分片 / PMTUD 动态探测)

IPv4 路由器天生支持分片,分两种模式,由 IP 头部 DF 标志位控制:

模式 1:DF=0(可分片,传统手动分片逻辑)

DF=0 = 允许路由器分片 流程:

  1. 源主机发 1600 字节 IP 包,出接口 MTU=1500;
  2. 中间路由器发现包太大,直接把 1600 拆成两片分片;
  3. 分片逐个转发到目标主机;
  4. 目标主机把所有分片重组还原原始数据包。

缺点: 分片消耗路由器 CPU;某一片丢失整个包都要重传,效率差。

模式 2:DF=1(禁止分片,配合 PMTUD 动态探测,现代 TCP 默认开启)

DF=1 = 不许中间路由器分片,这就是 PMTUD 的基础 完整 PMTUD 流程:

  1. 主机默认按本地 MTU=1500 发包,IP 头 DF=1;
  2. 某条链路 MTU 只有 1400,大包过不去;
  3. 路由器不能分片 ,直接丢包,返回 ICMPv4 Type3 Code4(需要分片但 DF 置位),附带这条链路 MTU=1400(路由器直接丢弃数据包,返回一条 ICMPv4 (Type3 Code4) 报文,告诉源:这条链路最大只能传 X 字节)
  4. 源主机收到这个 ICMP 报文,动态更新路径 MTU 为 1400(源主机收到 ICMP 反馈,动态降低发包尺寸,用更小 MTU 重新发送)
  5. 之后全部用 1400 长度发包,不再触发丢包,全程不分片( 后续所有流量都用这个探测出来的最小 MTU 发送,全程不用路由器分片**)**

这里的 "动态" 就是:靠 ICMP 反馈自动探测整条路径最小 MTU,不用路由器分片

PMTUD 是动态探测最优包长,从源头避免分片,代替路由器手动分片

IPv6:彻底取消路由器分片,只能靠 PMTUD+PTB 报文

IPv6 硬性规则:中间路由器绝不允许分片,只有源主机能分片。

  1. 主机先发大包,超过链路 MTU;
  2. 路由器丢弃数据包,回复 ICMPv6 PTB (Type=2) 报文,告知当前链路 MTU;
  3. 源主机收到 PTB,自动缩小发包长度,适配路径 MTU;
  4. 全程不存在路由器分片,完全依赖 PTB 做动态 PMTUD
  • IPv4 DF=0 大包→路由器手动分片转发,静态拆分,无探测机制(静态被动拆分)
  • IPv4 DF=1(PMTUD) 大包被丢弃,ICMP 反馈 MTU,主机动态调整包长,全程不分片(DF=1 + ICMP 反馈 → PMTUD 动态探测,源头控制包大小,杜绝分片)
  • IPv6 无路由器分片,依靠 PTB 报文动态探测 MTU,强制 PMTUD
相关推荐
纪伊路上盛名在1 小时前
NVML ERROR_ RM has detected an NVML_RM version mismatch
linux·数据库·gpu·驱动
醉逍遥_祥1 小时前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
网安老伯1 小时前
网络安全基础要点知识介绍(非常详细),零基础入门到精通,看这一篇就够了
运维·前端·网络协议·web安全·网络安全·职场和发展
迷茫中的自我1 小时前
GitHub Actions自动化运维实战:从CI/CD到云原生部署
运维·自动化·github
XH华1 小时前
Linux系统第二章:常见的Linux指令(上)
linux·运维·服务器
nVisual1 小时前
01-环境监控集成方案
运维·服务器·开发语言·网络·数据库·数据中心布线·综合布线管理软件
会编程的土豆2 小时前
HTTP 是什么:你打开 localhost:8080 时发生了什么
网络·网络协议·http
M1582276905510 小时前
跨协议互通利器|SG-PN-EIP (S)-220 Profinet 转 EtherNet/IP 网关,打通欧美 PLC 通讯壁垒
网络·网络协议·tcp/ip
北龙云海11 小时前
案例分享 | 面向公网业务系统境内访问白名单配置实操方案
运维·网络·安全·网络安全·告警·数据泄露·入侵攻击
FoldWinCard11 小时前
D5 Linux 网络及端口命令
linux·运维·服务器