6.3 Purging Stale PMTU Information (清除过期PMTU信息)
6.3 Purging Stale PMTU Information (清除过期PMTU信息)
互联网络拓扑是动态的; 路由随时间变化. 为给定目的地发现的 PMTU 在新路由投入使用时可能是错误的. 因此, 主机缓存的 PMTU 信息可能会变得过期.
由于使用 PMTU 发现的主机始终设置 DF 位, 如果过期的 PMTU 值过大, 一旦向给定目的地发送数据报, 这几乎会立即被发现. 对于意识到过期 PMTU 值过小的情况, 不存在此类机制, 因此实现应对缓存值进行"老化" (age). 当 PMTU 值在一段时间内 (大约10分钟) 没有减小时, PMTU 估计值应设置为第一跳数据链路 MTU, 并通知分组化层该变化. 这将导致完整的 PMTU 发现过程重新开始.
注意: 实现应提供一种更改超时时长的方法, 包括将其设置为"无限". 例如, 连接到 FDDI 网络然后通过慢速串行线连接到互联网其余部分的主机, 永远不会发现新的非本地 PMTU, 因此不应每10分钟就忍受数据报被丢弃.
上层必须 (MUST) 不因 PMTU 估计值增加而重传数据报, 因为这种增加从不是响应数据报被丢弃的指示而发生的.
实现 PMTU 老化的一种方法是在路由表条目中添加时间戳字段. 该字段初始化为"保留"值, 表示 PMTU 从未被更改. 每当 PMTU 因"数据报过大"消息而减小时, 时间戳设置为当前时间.
每分钟, 一个由计时器驱动的过程遍历路由表, 对于每个时间戳不是"保留"且早于超时间隔的条目:
-
PMTU 估计值设置为关联第一跳的 MTU.
-
通知使用此路由的分组化层该增加.
如果每主机路由被删除, PMTU 估计值可能从路由表中消失; 这可能是响应 ICMP 重定向消息, 或者因为某些路由表守护进程在几分钟后删除旧路由. 此外, 在多宿主主机上, 拓扑变化可能导致使用不同的源接口. 当这种情况发生时, 如果未通知分组化层, 它可能继续使用现在过小的缓存 PMTU 值. 一种解决方案是在重定向消息导致路由变化时, 以及在路由从路由表中被简单删除时, 通知分组化层可能的 PMTU 变化.
注意: 第7.1节描述了一种检测 PMTU 增加的更复杂方法.