5.1 Layering (分层)
5.1 Layering (分层)
在 IP 架构中, 决定发送什么大小数据包的选择是由 IP 之上的协议层做出的。本备忘录将这样的协议称为 "分组协议" (packetization protocol)。分组协议通常是传输协议 (例如 TCP), 但也可以是更高层协议 (例如, 构建在 UDP 之上的协议)。
在分组层实现路径 MTU 发现简化了一些层间问题, 但有几个缺点: 可能必须为每个分组协议重新实现, 在不同分组层之间共享 PMTU 信息变得困难, 并且某些分组层维护的面向连接的状态可能不容易扩展以长期保存 PMTU 信息。
因此建议 IP 层存储 PMTU 信息, 并且 ICMPv6 层处理接收到的 Packet Too Big 消息。分组层可以通过更改它们发送的消息的大小来响应 PMTU 的变化。为了支持这种分层, 分组层需要一种方式来了解 MMS_S 值的变化, MMS_S 是 "最大发送传输消息大小" (maximum send transport-message size) [RFC1122]。
MMS_S 是一个传输消息大小, 通过从可以发送的最大 IP 数据包 EMTU_S 中减去 IPv6 头部 (包括 IPv6 扩展头部) 的大小来计算。MMS_S 受多种因素的组合限制, 包括 PMTU、对数据包分片和重组的支持, 以及数据包重组限制 (参见 [RFC8200] 的第 4.5 节 "Fragment Header")。当源分片 (source fragmentation) 可用时, EMTU_S 被设置为 EMTU_R, 如接收方使用上层协议指示的或基于协议要求 (IPv6 为 1500 八位字节)。当要传输大于 PMTU 的消息时, 源创建片段, 每个片段受 PMTU 限制。当不希望源分片时, EMTU_S 被设置为 PMTU, 并且上层协议预期要么执行自己的分片和重组, 要么相应地限制其消息的大小。
但是, 鼓励分组层避免发送需要源分片的消息 (关于反对分片的理由, 参见 [FRAG])。