我看到来自“TELEFONICA MOVILES”手机网络块的 ICMP 风暴。我们会在几秒钟内定期收到超过 500 万个这样的信息:
08:12:05.740781 IP(tos 0x0、ttl 112、id 40224、偏移量 0、标志[无]、proto ICMP(1)、长度 56)200.76.88.6 > ABCD:ICMP 200.39.21.96 不可达 - 需要分片(mtu 250),长度 36
(“ABCD”是我的IP)
mtu 为 250 是否可行或合法?68?这些 ICMP 与我们这边的更大问题有关,但我说不清它们是症状、原因还是巧合。
在这种情况下,路径 MTU 发现算法会做什么?服务器是 FreeBSD 7。
答案1
根据以下规定,68 字节的 MTU 在 IPv4 中有效:RFC 791:
每个互联网模块必须能够转发 68 个八位字节的数据报而无需进一步分片。这是因为互联网报头可能最多为 60 个八位字节,而最小分片为 8 个八位字节。
对重新组装尺寸的支持要求要大得多:
每个互联网目的地都必须能够接收完整或分片且可以重新组装的 576 个八位字节的数据报。
在 IPv6 中,这些数字增加到 1280 和 1500 字节,如RFC 2460:
IPv6 要求互联网上的每条链路的 MTU 至少为 1280 个八位字节。对于无法完整传输 1280 个八位字节数据包的任何链路,必须在 IPv6 下的层提供特定于链路的分段和重组。
节点必须能够接受经过重组后大小达到 1500 个八位字节的碎片数据包。节点可以接受重组后大小超过 1500 个八位字节的碎片数据包。依赖 IPv6 碎片发送大于路径 MTU 的数据包的上层协议或应用程序不应发送大于 1500 个八位字节的数据包,除非它确信目标能够重组该较大大小的数据包。
答案2
如果有人关心的话,这就是我发现的。
简短的回答是,不,这些小的 MTU 是不合法的,但是 FreeBSD 7 和 8 应该可以更好地处理这种情况,因为在 8 月底左右进行了一些代码更改。
这个问题报告还有更多内容: http://www.freebsd.org/cgi/query-pr.cgi?pr=146628
路径 MTU 发现未清除“不分段”标志,这意味着另一侧顽固的不良行为主机将继续发送无法到达的“需要分段”消息风暴。现在,在收到第一个微小 MTU 后,DF 被清除,这有效地将问题转移到离违规者最近的路由器。(因为他们将不得不为违规者制作荒谬的分段。)