摘要

  • RFC 791 规定,设置 DF 的数据报不得被路由器分片,但可以被丢弃。
  • RFC 1191 通过 ICMP 类型 3、代码 4 和 Next-Hop MTU,把丢弃变成可用证据。
  • RFC 2923 记录了 ICMP 消失时的 PMTUD 黑洞。

从禁令到测量

IPv4 Flags 字段中的 DF 表示 Don't Fragment。DF 为零时可以分片;DF 为一时,路由器不能把数据报拆开。如果下一跳链路更窄,数据报就可能被丢弃。DF 本身不保证送达,也不会独立发现合适的 MTU。

RFC 1191 将这种失败用作探测。源端先根据第一跳建立估计,发送设置 DF 的数据报。若中间路由器无法在不分片的情况下转发,它会丢弃数据报,并返回 ICMP Destination Unreachable,类型 3、代码 4,即需要分片且 DF 已设置。

Next-Hop MTU 让反馈具有数值。该字段低 16 位表示报告路由器能够在不分片的情况下转发的最大 IP 数据报大小,包括 IP 首部和数据,不包括底层开销。源端收到后降低路径估计,并调整之后发出的大小。

收敛由源端负责。主机必须避免很快再次触发同类错误,可以减小数据报,也可以停止设置 DF。RFC 1191 还限制向上探测:收到过大通知后至少五分钟,成功增加尝试后至少一分钟;建议等待两倍时间。

旧路由器可能把 Next-Hop MTU 留为零。主机仍须处理这种兼容性消息,只能在已知 MTU 台阶或其他有界策略中搜索,代价是额外丢弃和较少的精确性。

PMTUD 黑洞

RFC 2923 描述了反馈路径失效的情形:路由器没有发送 ICMP,或防火墙过滤了它。源端不知道数据报过大,继续发送设置 DF 的数据报。短小数据包、ping、TCP 建连或小写入可能成功,但大数据传输会停止并最终超时。

黑洞检测和回退可以降低发送大小,却可能增加延迟并掩盖网络故障。更好的修复是恢复 ICMP 反馈。PMTUD 是合作回路,而不是单个比特的能力:受限路由器、返回路径和源端适配都必须正常工作。

来源