路径MTU发现

路径MTU发现
目录路径MTU发现IPv4 PMTUD 工作流程RFC 1191IPv6 PMTUD 特点RFC 8201补充常见问题与优化PMTUD vs 手动分片PTB 报文作用PTB 携带关键信息和 IPv4 对应报文区分常见故障IPv4两种处理大包方式手动分片 / PMTUD 动态探测模式 1DF0可分片传统手动分片逻辑模式 2DF1禁止分片配合 PMTUD 动态探测现代 TCP 默认开启IPv6彻底取消路由器分片只能靠 PMTUDPTB 报文路径MTU发现路径 MTU 发现PMTUD是 TCP/IP 协议栈的核心机制用于动态探测源到目标路径上的最小 MTUPath MTU避免数据包在中间路由器被分片或丢弃提升传输效率MTU最大传输单元单条链路上可传输的最大 IP 数据包长度不含二层帧头以太网默认1500 字节。PMTU路径 MTU源到目标整条路径中最小的链路 MTU决定了整条路径能传输的最大无分片数据包大小。PMTUD通过IP 头部 DF 位与ICMP 错误报文动态发现 PMTU 的机制IPv4 PMTUD 工作流程RFC 1191初始假设源主机以出接口 MTU如 1500作为初始 PMTU发送数据包时设置 IP 头部 DF1不分片中间节点检测若数据包大小 某路由器出接口 MTU且 DF1路由器丢弃数据包并返回ICMP 目的不可达报文代码为“需要分片但 DF 置位”同时携带该路由器出接口的 MTU 值源端调整源收到 ICMP 报文后将 PMTU 更新为该更小的 MTU并按新尺寸重传数据收敛完成重复上述过程直到数据包可无分片到达目标此时的 PMTU 即为路径最小 MTUIPv6 PMTUD 特点RFC 8201中间路由器禁止分片IPv6 仅允许源端分片中间路由器不处理分片专用 ICMPv6 报文超 MTU 时返回ICMPv6 Packet Too BigPTB报文明确携带受限链路的 MTU 值机制更可靠无 IPv4 中 “ICMP 被过滤” 导致的黑洞问题是 IPv6 的必选机制补充DF 位Dont FragmentIP 头部标志位DF1禁止中间路由器分片是 PMTUD 的触发开关ICMPv4/ICMPv6 报文IPv4ICMP Type3, Code4需要分片且 DF 置位IPv6ICMPv6 Type2Packet Too BigPMTU 缓存与老化源主机缓存每条路径的 PMTU默认老化时间如 10 分钟超时后重新探测与 TCP MSS 的关系TCP 会基于 PMTU 计算MSS PMTU - 40IPTCP 头部确保 TCP 段不超 PMTU避免分片Cisco常见问题与优化PMTU 黑洞最常见故障原因防火墙 / 路由器过滤 ICMP 不可达报文源收不到反馈持续发送大包导致持续丢包解决放行 ICMP Type3 Code4IPv4/ Type2IPv6启用PLPMTUD数据包层 PMTU 发现通过应用层探测替代 ICMP更鲁棒性能影响探测阶段会产生少量丢包与重传但长期避免分片整体提升吞吐量配置建议服务器 / 路由器默认启用 PMTUD关键链路统一 MTU如 1500减少 PMTU 波动PMTUD vs 手动分片对比项PMTUD自动手动设置小 MTU效率动态适配最大化包长固定小包带宽利用率低适应性路径变化自动调整路径变化需手动改配置复杂度协议自动处理运维成本高适用场景互联网、复杂广域网简单局域网、已知固定 MTUPMTUD 是避免 IP 分片、优化传输性能的核心机制通过DF 位 ICMP 反馈动态找到路径最小 MTUIPv4 依赖 ICMP 易遇黑洞IPv6 通过专用 PTB 报文更可靠现代网络如数据中心、云均需正确配置与放行相关 ICMP以保障传输效率PTB 报文Packet Too BigICMPv6 专用报文类型值 Type2作用IPv6 规定中间路由器不能对数据包分片只有源主机能分片当收到的 IPv6 数据包长度超过路由器出接口 MTU且无法分片时路由器丢弃报文回复一条 PTB 报文给源主机PTB 携带关键信息报文内部会写明当前链路允许的最大 MTU 值源主机收到后自动降低发包长度匹配这条路径 MTUPMTUD 机制和 IPv4 对应报文区分IPv4MTU 超限、DF 置位时返回 ICMPv4 Type3 Code4需要分片但不分片IPv6统一使用 ICMPv6 Type2 PTB 报文是 IPv6 路径 MTU 发现的核心反馈报文常见故障防火墙拦截 ICMPv6 PTB 报文后源主机收不到 MTU 提醒持续发送大包出现网页打不开、文件传输卡顿等 PMTU 黑洞问题MTU一条链路二层能承载的最大 IP 包以太网默认 1500 字节。IP 分片一个大包超过出口 MTU路由器把大包拆成多个小包到目的地再重组IPv4两种处理大包方式手动分片 / PMTUD 动态探测IPv4 路由器天生支持分片分两种模式由 IP 头部 DF 标志位控制模式 1DF0可分片传统手动分片逻辑DF0 允许路由器分片 流程源主机发 1600 字节 IP 包出接口 MTU1500中间路由器发现包太大直接把 1600 拆成两片分片分片逐个转发到目标主机目标主机把所有分片重组还原原始数据包。缺点 分片消耗路由器 CPU某一片丢失整个包都要重传效率差。模式 2DF1禁止分片配合 PMTUD 动态探测现代 TCP 默认开启DF1 不许中间路由器分片这就是 PMTUD 的基础 完整 PMTUD 流程主机默认按本地 MTU1500 发包IP 头 DF1某条链路 MTU 只有 1400大包过不去路由器不能分片直接丢包返回 ICMPv4 Type3 Code4需要分片但 DF 置位附带这条链路 MTU1400路由器直接丢弃数据包返回一条 ICMPv4 (Type3 Code4) 报文告诉源这条链路最大只能传 X 字节源主机收到这个 ICMP 报文动态更新路径 MTU 为 1400源主机收到 ICMP 反馈动态降低发包尺寸用更小 MTU 重新发送之后全部用 1400 长度发包不再触发丢包全程不分片后续所有流量都用这个探测出来的最小 MTU 发送全程不用路由器分片这里的 “动态” 就是靠 ICMP 反馈自动探测整条路径最小 MTU不用路由器分片PMTUD 是动态探测最优包长从源头避免分片代替路由器手动分片IPv6彻底取消路由器分片只能靠 PMTUDPTB 报文IPv6 硬性规则中间路由器绝不允许分片只有源主机能分片。主机先发大包超过链路 MTU路由器丢弃数据包回复ICMPv6 PTB (Type2) 报文告知当前链路 MTU源主机收到 PTB自动缩小发包长度适配路径 MTU全程不存在路由器分片完全依赖 PTB 做动态 PMTUDIPv4 DF0 大包→路由器手动分片转发静态拆分无探测机制静态被动拆分IPv4 DF1PMTUD 大包被丢弃ICMP 反馈 MTU主机动态调整包长全程不分片DF1 ICMP 反馈 → PMTUD 动态探测源头控制包大小杜绝分片IPv6 无路由器分片依靠 PTB 报文动态探测 MTU强制 PMTUD