Skip to main content

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)是可配置的。


相关章节: