2. IKE 协议细节与变体
IKE 通常监听并通过 UDP 端口 500 发送,尽管 IKE 消息也可能以略有不同的格式在 UDP 端口 4500 上被接收(参见第 2.23 节)。由于 UDP 是一种数据报(不可靠)协议,IKE 在其定义中包含了从传输错误(包括丢包、包重放和包伪造)中恢复的能力。IKE 的设计目标是在以下条件满足时即可正常工作:(1) 在超时之前,一系列重传数据包中至少有一个到达目的地;并且 (2) 信道中伪造和重放的数据包尚未多到耗尽任一端点的网络或 CPU 容量。即使在缺乏这些最低性能要求的情况下,IKE 也被设计为能够干净地失败(如同网络已中断一般)。
尽管 IKEv2 消息本应较短,但它们包含的结构在大小上没有硬性的上限(特别是数字证书),并且 IKEv2 自身没有对大消息进行分片的机制。IP 定义了对超大 UDP 消息进行分片的机制,但各实现所支持的最大消息大小不一。此外,使用 IP 分片会使实现面临拒绝服务(DoS)攻击 [DOSUDPPROT]。最后,某些 NAT 和/或防火墙实现可能会阻断 IP 分片。
所有 IKEv2 实现 MUST 能够发送、接收和处理长度最多为 1280 个八位组的 IKE 消息,并且 SHOULD 能够发送、接收和处理长度最多为 3000 个八位组的消息。IKEv2 实现需要了解所支持的最大 UDP 消息大小,并且 MAY 通过省略某些证书或密码套件提议来缩短消息,只要这样能使消息保持在最大值以下。在可能的情况下,使用 "Hash and URL" 格式而非在交换中直接包含证书,可以避免大多数问题。不过,实现和配置需要记住,如果 URL 查询只能在 Child SA 建立之后才能进行,递归问题可能会阻碍该技术生效。
在端口 4500 上发送的所有包含 IKE 消息的数据包的 UDP 负载 MUST 以四个零作为前缀;否则,接收方将不知道如何处理它们。