6. 常见分包属性
本节描述实现 PLPMTUD 所需的一般 Packetization Layer 属性和特征. 它还描述所有 Packetization Layer 共有的一些实现问题.
6.1. 检测丢失的机制
Packetization Layer 拥有及时且健壮的丢失检测和报告机制非常重要. PLPMTUD 根据检测到的丢失来调整 MTU. 丢失通知中的任何延迟或不准确都很可能导致错误的 MTU 决策或缓慢收敛. 该机制必须能够稳健地区分仅一个 probe 的孤立丢失, 以及 probe 前导窗口和尾随窗口中的其他丢失, 这一点很重要.
最好是 Packetization Protocols 使用显式丢失检测机制, 例如 Selective Acknowledgment (SACK) scoreboard [RFC3517] 或 ACK Vector [RFC4340], 以区分真实丢失和重排序数据, 不过 TCP Reno 风格的重复确认计数等隐式机制也足够使用.
PLPMTUD 也可以在主要依赖 timeout 进行丢失恢复的协议中实现; 但是, 除非没有其他替代方案, 否则 timeout 不应该 用作主要丢失指示机制.
6.2. 生成 Probe
有几种可能的方法可以修改 Packetization Layer 来生成 probe. 不同技术会在三个方面产生不同开销: 生成 probe packet 的困难程度 (包括 Packetization Layer 实现复杂性和额外数据移动), probe 可能消耗的额外网络容量, 以及从失败 probe 中恢复的开销 (包括网络和协议开销).
某些协议可能被扩展为允许使用虚拟数据进行任意填充. 这会大幅简化实现, 因为探测无需高层参与即可执行; 并且如果 probe 失败, 缺失的数据 ("probe gap") 在重传时可保证适合当前 MTU.
许多 Packetization Layer 协议可以承载纯控制消息 (不含任何来自更高协议层的数据), 并可将其填充到任意长度. 例如, SCTP PAD chunk 可按这种方式使用 (见第 10.2 节). 这种方法的优点是, 如果 probe 丢失, 无需重传任何内容.
这些技术不适用于 TCP, 因为 TCP 没有单独的 length field 或其他机制来区分填充和真实 payload data. 对 TCP 来说, 唯一方法是在过大的 segment 中发送额外 payload data.
在少数情况下, Packetization Layer 协议本身可能没有合理机制来生成 probe. 作为最后手段, 可以依赖辅助协议, 例如 ICMP ECHO ("ping"), 来发送 probe packet.