摘要

  • RFC 1063 定义了四字节的 Probe MTU(11 号)和 Reply MTU(12 号)IPv4 选项,用来求出并返回一条路径上的最小 MTU。
  • RFC 1191 把信息来源从成功转发时的逐跳改写,改成转发失败时的反馈:DF 位配合携带下一跳 MTU 的 ICMP Type 3、Code 4。

Probe MTU 的起点不是猜测。发送主机先写入直连网络、也就是第一跳的 MTU。网关收到数据报后,把选项值分别与入站和出站链路的 MTU 比较;只要其中一个更小,就留下更小的数字。目的主机还要检查入站链路,并可根据自身能接收的最大数据报继续下调。

整个格式只有四个字节:类型、值为 4 的长度,以及两字节 MTU。11 号选项负责采集,12 号选项负责把结果送回。RFC 1063 更推崇 IP 层实现:每收到一次探测,就在下一份返回数据报中加入一次 Reply MTU,随后丢弃临时保存的值。

这套设计把测量写进了转发过程。路由器不只是搬运数据,还要参与求最小值。标准文本坦率指出,当时一些网关在处理 IP 选项时甚至未必已经知道入站和出站接口,因此实现它可能需要大幅修改软件。为控制代价,探测频率被建议限制在平均每个往返时延一次,而非每个包一次。

缓存的调整也故意不对称。更小的返回值应立即生效;更大的值则要等旧估计老化后再接受,因为路由抖动可能让不同瓶颈交替出现。

1990 年的 RFC 1191 正式废止 RFC 1063,并改变了证据出现的位置。源主机设置 Don't Fragment。若某台路由器面对的下一跳容不下数据报,它便丢包并返回 ICMP Destination Unreachable Type 3、Code 4。原先未使用字段的低 16 位承载 Next-Hop MTU,高 16 位保持为零。RFC 1191 说,这就是路由器支持新机制所需的唯一变化。

因此,成功流量不再要求每一跳维护一个可写的累计结果;信息只在瓶颈真正阻止转发时产生。代价并未消失,而是转移到反馈闭环:主机必须快速响应下降,兼容 MTU 字段仍为零的旧路由器,并以很低的频率试探是否可以增大。

到 2014 年,RFC 7126 已把两项选项列为废弃,指出伪造的高低值都可能造成性能问题,并建议路由器、网关和防火墙丢弃含有它们的数据包。这个晚近结论不能反推当年的部署规模。可靠的历史边界仅包括:机制怎样工作、后来如何被取代,以及最终得到怎样的操作建议。

来源