2. Protocol Overview (协议概述)
2. Protocol Overview (协议概述)
在本备忘录中, 我们描述了一种利用 IP 头部中的不分片 (Don't Fragment, DF) 位来动态发现路径 PMTU 的技术. 基本思路是: 源主机最初假设路径的 PMTU 等于其第一跳的 (已知) MTU, 并在该路径上发送所有数据报时设置 DF 位. 如果路径上的某个路由器无法在不分片的情况下转发某些数据报, 该路由器将丢弃这些数据报, 并返回代码含义为"需要分片但已设置DF" [7] 的 ICMP 目的不可达 (Destination Unreachable) 消息. 收到此类消息 (以下称为"数据报过大" (Datagram Too Big) 消息) 后, 源主机会降低其对该路径 PMTU 的估计值.
PMTU 发现过程在主机对 PMTU 的估计值足够低, 使其数据报能够无需分片地传递时结束. 或者, 主机可以通过停止在数据报头部设置 DF 位来选择结束发现过程; 例如, 当主机愿意在某些情况下对数据报进行分片时, 可以这样做. 通常情况下, 主机会继续在所有数据报中设置 DF, 这样如果路由发生变化且新的 PMTU 更低, 就能被发现.
不幸的是, 当前规范中的"数据报过大"消息并不报告被拒绝数据报过大的那一跳的 MTU, 因此源主机无法确切知道应将其估计的 PMTU 降低多少. 为了解决这个问题, 我们建议将"数据报过大"消息中当前未使用的头部字段用于报告限制跳的 MTU. 这是本备忘录中为支持 PMTU 发现而对路由器规定的唯一变更.
路径的 PMTU 可能随时间变化, 这是由于路由拓扑的变化. PMTU 的减小通过"数据报过大"消息来检测, 但对于主机已停止设置 DF 位的路径除外. 为了检测路径 PMTU 的增加, 主机会定期增加其估计的 PMTU (如果之前已停止, 则恢复设置 DF 位). 这几乎总会导致数据报被丢弃并产生"数据报过大"消息, 因为在大多数情况下路径的 PMTU 不会发生变化, 所以这种操作应该不频繁地进行.
由于该机制基本上保证了主机不会从正在进行 PMTU 发现的对端收到任何分片, 这可能有助于与某些 (不正确地) 无法重组分片数据报的主机进行互操作.