摘要
- 早期 IPv4 允许网关把过大的数据报切成若干分片,接收端再重组。异构链路因此被隐藏,但一次分片丢失会拖累整个原始数据报。
- RFC 1191 让源主机设置 DF,并根据路由器返回的 ICMP“需要分片”消息缩小发送尺寸;当这条反馈通道被过滤时,连接会出现小包可达、大包消失的黑洞。
- PLPMTUD 不再把进展完全押在 ICMP 上,而由传输或应用层发送可确认的探测包。网络提供有限证据,端点保留估计、验证和执行权。
下一段网络装不下这个包
互联网从一开始就不是一种链路的放大版。不同网络能承载的最大分组不同,而一份数据报可能在途中才遇到较小的上限。1981 年 9 月发布的 RFC 791 把寻址和分片并列为 IP 的两项基本功能:网关遇到“小包网络”时,可以把长数据报拆开。
这个办法靠 IPv4 首部中的 Identification、Fragment Offset 和 More Fragments 运作。接收端依据源、目的、协议和标识符,把各片放回原位。中间网络仿佛替发送方消化了差异,但代价不会消失:路由器要在拥挤点制造更多包,接收方要保留重组状态,任何一片遗失都可能让整份数据报无法完成。
IPv4 同时给发送者一项选择:设置 Don't Fragment(DF)。若下一跳装不下,路由器不能再拆,只能丢弃。于是问题从“谁切包”变成“丢包之后谁能说清原因”。若发送方得不到限制值,它只看见一次与拥塞、故障无异的沉默。
这里不存在一个恒定的“互联网 MTU”。路径 MTU 是当前路径所有链路 MTU 的最小值。同一目的地换一条路,数值可能改变;隧道增加首部,也会吃掉原来的余量。它是一条路径在某一时刻的运行状态,不是远端主机的永久属性。
每台网关都要动笔的方案
最早的发现办法希望路径亲自填写答案。1988 年 7 月的 RFC 1063 提出 Probe MTU 与 Reply MTU 两个 IP 选项。源主机写入首跳 MTU;每台网关比较入站、出站链路,把字段降低到已经见过的最小值;目的端再把结果送回。
这份提案准确指出两难:保守使用小包会浪费链路并增加首部开销,盲目使用大包又会引发分片;额外探测会制造流量,而且路由随时会变。它还澄清 TCP MSS 与路径 MTU 并非一回事。MSS 表达对端愿意接收的 TCP 载荷上限,PMTU 表达沿途可完整承载的 IP 包上限,两者都约束发送,但证据来源不同。
问题在部署面。选项只有沿途设备都识别并更新才完整有效。RFC 1063 承认,有些网关处理 IP 选项时甚至还不知道入站和出站接口,实现它可能需要重大软件修改。掌握局部事实的设备很多,要求它们同时升级却很难。
让最窄链路只在失败时回话
1990 年 11 月的 RFC 1191 改用更小的改动。源主机从首跳 MTU 起步,给 IPv4 数据报设置 DF。某台路由器无法完整转发时,丢弃该包并返回 ICMP Destination Unreachable,其中代码说明“DF 已设置而需要分片”。发送方收到后降低对该路径的估计。
路由器不再逐包改写选项,只在尺寸失败时作证。RFC 1191 又把 ICMP 中未使用的字段定义为下一跳 MTU,使发送者直接得到约束值。它继续设置 DF,因此路由变化把流量引向更窄链路时,新错误还能触发重估。
标准必须容纳尚未升级的路由器。旧设备会在新字段中返回零,发送方于是沿一组常见 MTU“平台值”向下试。文档宁愿低估几个百分点,也不愿高估一个字节;同时明确这些数值只是当时的实现建议,不是永恒的链路目录。
路径也可能变宽。缓存的 PMTU 要老化,发送方可按节制的间隔尝试更大的包。错误消息可以促使估计下降,却不得凭其中内容把估计抬高:下降是一项关于失败的报告,上升还需要实际送达来证明。
小包可达,大包却落入黑洞
经典 PMTUD 有一条隐含前提:ICMP 必须回到源主机并被处理。2000 年的 RFC 2923 记录了这一前提破裂后的“黑洞”。有的路由器因缺陷或配置不回消息;有的防火墙把所有 ICMP 一概封锁。发送方反复发送同样过大的 DF 包,却永远学不会缩小。
这种故障很会伪装。TCP 三次握手包很小,能够完成;控制命令和 ping 也可能正常。真正的大段数据开始传输后,包才越过隐藏上限、被丢弃并以原尺寸重传。网络既“可达”又“不可用”,区别只是包的大小。
简单回退能恢复业务,却可能把错误配置长期藏起来,并持续损失效率。ICMP 过滤也不是唯一原因:隧道增加首部并把错误先送往入口;非对称路由让数据与回报走不同方向;ICMP 会限速;二层设备可能直接吞掉过大帧而不产生有效 IP 错误。
现行 IPv6 路径发现规范 RFC 8201 仍描述同一种表象:握手成功,数据却因 Packet Too Big 消息被阻断而停住。IPv6 把责任边界画得更清楚——转发路由器不做分片;如需分片,由源端完成。
端点用送达结果证明尺寸
经典方法要求网络解释失败。2007 年的 RFC 4821 则让端点证明成功。Packetization Layer PMTUD 先保留一个可工作的尺寸,再发送逐渐变大的探测包。确认抵达,搜索下界上升;孤立探测被明确判定失败,上界下降;区间逐步收敛。
“分包层”就是决定应用数据如何装进包里的层,TCP 是典型但不是唯一例子。它知道某个探测是否得到确认,可以让普通数据继续使用安全尺寸,也能把一次实验性丢失与普遍拥塞区分开来。
这种区分必须克制。若发生超时或同时丢失其他包,结果是不确定,而不是 MTU 已被证明;常规拥塞控制必须继续生效。一次失败也可能来自拥塞或偶发错误。反过来,一次成功只证明某一时刻的一只包走过了被观察的路径,并不保证每条等价多路径分支都一样宽。
PLPMTUD 可以利用 ICMP,也可以在收不到 ICMP 时运行。它没有宣布网络证据无用,而是取消了单一反馈通道对连接进展的否决权。代价转移到端点:它要安排探测、确认送达、维护上下界、计算各层首部,并让路径缓存与拥塞状态协调。
从 IPv6 到数据报协议
IPv6 并未消除尺寸发现。RFC 8201 仍把 PMTU 定义为路径最小链路 MTU,并让 Packet Too Big 支持经典发现。不实施发现的节点可以停留在 IPv6 最小链路 MTU,但会放弃更宽路径的效率;超过它又没有可靠反馈,黑洞仍会出现。
无连接或数据报式协议需要更明确的端点确认。2020 年的 RFC 8899 为 UDP 之上的协议、SCTP、QUIC 及相应应用定义 DPLPMTUD。有些协议自带确认,裸 UDP 没有;因此应用或分包层必须提供“探测确已到达”的反馈办法。
普通数据保持在当前可用值以内,特殊探测可以更大;发现黑洞就降低估计,连续成功才向上搜索。PTB 能加速判断,但只是可选证据,使用前还要验证它确实对应发送方发出的流量。
四十年的变化不是一次干净的替代。路由器分片隐藏异构,却扩大处理和丢失成本;IP 选项让路径完整填表,却要求全程协作;ICMP 方案只在失败时回报,却信赖回程消息;分包层探测用端到端送达补足这条消息的脆弱。每一步都保留上一代的某些能力,同时缩小必须无条件信任的部分。
一个可撤回的尺寸决定
MTU 常被记成 1500 或 1280,历史真正留下的却是一套权力分配。链路运营者设置局部上限,路由器执行并可能回报,防火墙可能抹去回报,端系统记录路径估计,传输或应用决定下一只包怎样构造。没有任何一方拥有整条路径,任何一次观察也都可能过期。
稳定的公共规则因而很窄:中间网络可以暴露约束,却不应无限承担隐蔽适配;端点应把错误消息、实际送达和拥塞状态合并判断,并保留修订权。数据包并没有获得智慧,是体系终于把决策留在了能够同时看见证据与后果的位置。
来源与证据边界
IPv4 原始分片与 DF 规则来自 RFC 791;逐网关更新的选项方案来自 RFC 1063;经典 PMTUD、下一跳 MTU、平台回退与缓存老化来自 RFC 1191;TCP 黑洞及诊断难点来自 RFC 2923。RFC 4821 规定分包层探测及拥塞边界,RFC 8201 给出现行 IPv6 模型,RFC 8899 扩展到数据报传输。
这些文档能证明规范、设计修正和已知失败,却不能证明一个唯一发明者、全球统一部署日、各种故障的现今比例或每张网络的配置。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
