4. Protocol Requirements (协议要求)
4. Protocol Requirements (协议要求)
如第 1 节所述, IPv6 节点不需要实现路径 MTU 发现。本节中的要求仅适用于那些包含路径 MTU 发现的实现。
节点应该适当地验证 ICMPv6 PTB 消息的有效载荷 (payload), 以确保这些消息是响应传输的流量而接收的 (即, 报告的错误条件对应于应用程序实际发送的 IPv6 数据包), 按照 [ICMPv6] 的规定。
如果节点收到报告下一跳 MTU 小于 IPv6 最小链路 MTU 的 Packet Too Big 消息, 它必须丢弃该消息。节点在收到 Packet Too Big 消息时, 禁止将其对路径 MTU 的估计降低到 IPv6 最小链路 MTU 以下。
当节点收到 Packet Too Big 消息时, 它必须根据消息中 MTU 字段的值降低其对相关路径 PMTU 的估计。节点在这种情况下的精确行为没有被指定, 因为不同的应用程序可能有不同的要求, 并且因为不同的实现架构可能倾向于不同的策略。
在收到 Packet Too Big 消息后, 节点必须尝试避免在不久的将来引发更多此类消息。节点必须减少它沿路径发送的数据包的大小。使用大于 IPv6 最小链路 MTU 的 PMTU 估计可能会继续引发 Packet Too Big 消息。因为这些消息中的每一个 (以及它们响应的被丢弃的数据包) 都会消耗网络资源, 所以使用路径 MTU 发现的节点必须尽可能快地检测 PMTU 的降低。
节点可以检测 PMTU 的增加, 但因为这样做需要发送大于当前估计 PMTU 的数据包, 并且因为 PMTU 不太可能已经增加, 所以这必须在不频繁的间隔进行。尝试检测增加 (通过发送大于当前估计的数据包) 禁止在收到给定路径的 Packet Too Big 消息后不到 5 分钟进行。此计时器的推荐设置是其最小值的两倍 (10 分钟)。
节点禁止根据 Packet Too Big 消息的内容增加其对路径 MTU 的估计。声称宣布路径 MTU 增加的消息可能是一个在网络中浮动的陈旧数据包 (stale packet), 一个作为拒绝服务 (denial-of-service, DoS) 攻击的一部分注入的虚假数据包, 或者是由于到达目的地有多条路径, 每条路径具有不同 PMTU 的结果。