8. 路径MTU/DF处理 (Path MTU/DF Processing)
对出站数据包应用AH或ESP会增加数据包的大小,因此可能导致数据包超过数据包将通过的SA的PMTU。IPsec实现还可能接收未受保护的ICMP PMTU消息,如果它选择根据消息采取行动,则结果将影响出站流量处理。本节描述IPsec实现处理这两个PMTU问题所需的处理。
8.1. DF位 (DF Bit)
当通过隧道模式SA承载流量时,所有IPsec实现必须(MUST)支持从出站数据包复制DF位到它发出的隧道模式头的选项。这意味着必须(MUST)可以为每个SA配置实现对DF位的处理(设置、清除、从内部头复制)。这适用于内部和外部头都是IPv4的SA。
8.2. 路径MTU (PMTU)发现 (Path MTU Discovery)
本节讨论IPsec对未受保护的路径MTU发现消息的处理。ICMP PMTU在此处用于指代ICMP消息:
IPv4 (RFC 792 [Pos81b]):
- Type = 3 (目的地不可达)
- Code = 4 (需要分片且设置了DF)
- ICMP头第二个字的低16位中的下一跳MTU(在RFC 792中标记为"未使用"),高16位设置为零
IPv6 (RFC 2463 [CD98]):
- Type = 2 (数据包过大)
- Code = 0 (需要分片)
- ICMP6消息的32位MTU字段中的下一跳MTU
8.2.1. PMTU传播 (Propagation of PMTU)
当IPsec实现接收到未经身份验证的PMTU消息,并且它被配置为处理(而不是忽略)此类消息时,它将消息映射到它所对应的SA。通过从PMTU消息的有效载荷中提取头信息并应用第5.2节中描述的过程来实现此映射。由此消息确定的PMTU用于更新SAD PMTU字段,考虑到将应用的AH或ESP头的大小、任何加密同步数据以及在隧道模式SA的情况下由附加IP头施加的开销。
在本地主机实现中,可以以与未受保护通信相同的粒度维护PMTU数据,因此不会丢失功能。PMTU信息的信令是主机内部的。对于所有其他IPsec实现选项,PMTU数据必须通过合成的ICMP PMTU传播。在这些情况下,IPsec实现应该(SHOULD)等待出站流量映射到SAD条目。当此类流量到达时,如果流量将超过更新的PMTU值,则必须(MUST)按如下方式处理流量:
情况1: 原始(明文)数据包是IPv4并且设置了DF位。实现应该(SHOULD)丢弃数据包并发送PMTU ICMP消息。
情况2: 原始(明文)数据包是IPv4并且清除了DF位。实现应该(SHOULD)分片(根据其配置在加密之前或之后)然后转发片段。它应该不(SHOULD NOT)发送PMTU ICMP消息。
情况3: 原始(明文)数据包是IPv6。实现应该(SHOULD)丢弃数据包并发送PMTU ICMP消息。
8.2.2. PMTU老化 (PMTU Aging)
在所有IPsec实现中,与SA关联的PMTU必须(MUST)被"老化",并且需要某种机制来及时更新PMTU,特别是用于发现PMTU是否小于当前网络条件所需。给定的PMTU必须保持足够长的时间,以便数据包从SA的源到达对等体,并且如果当前PMTU太大,则传播ICMP错误消息。
实现应该(SHOULD)使用路径MTU发现文档(RFC 1191 [MD90],第6.3节)中描述的方法,该方法建议定期将PMTU重置为第一跳数据链路MTU,然后让正常的PMTU发现过程根据需要更新PMTU。周期应该(SHOULD)是可配置的。
相关章节: