跳到主要内容

3.3.2. Sequence Number Generation (序列号生成)

当建立 SA 时, 发送方的计数器被初始化为 0。发送方为该 SA 递增序列号 (或 ESN) 计数器, 并将该值的低 32 位插入到序列号字段中。因此, 使用给定 SA 发送的第一个数据包将包含序列号 1。

如果启用了防重放 (默认情况下), 发送方在将新值插入序列号字段之前会检查以确保计数器未循环。换句话说, 如果这样做会导致序列号循环, 则发送方绝对不能 (MUST NOT) 在 SA 上发送数据包。尝试传输会导致序列号溢出的数据包是可审计事件 (auditable event)。此事件的审计日志条目应该 (SHOULD) 包括 SPI 值, 当前日期/时间, 源地址, 目标地址, 以及 (在 IPv6 中) 明文流 ID。

发送方假设默认启用防重放, 除非接收方另行通知 (见第 3.4.3 节) 或使用手动密钥管理配置了 SA。因此, AH 实现的典型行为是当序列号 (或 ESN) 循环时或在此值循环之前, 发送方建立新的 SA。

如果禁用了防重放 (如上所述), 则发送方无需监视或重置计数器, 例如, 在手动密钥管理的情况下 (见第 5 节)。但是, 发送方仍然递增计数器, 当它达到最大值时, 计数器会回滚到零。(建议对多发送方, 多播 SA 采用此行为, 除非在发送方和接收方之间协商了本标准范围之外的防重放机制。)

如果选择了 ESN (见附录 B), 则仅在序列号字段中传输序列号的低 32 位, 尽管发送方和接收方都维护完整的 64 位 ESN 计数器。但是, 高 32 位包含在 ICV 计算中。

注意: 如果接收方选择不为 SA 启用防重放, 则接收方不应该 (SHOULD NOT) 在 SA 管理协议中协商 ESN。ESN 的使用使得接收方需要管理防重放窗口 (以便确定 ESN 的高 32 位的正确值, 这些值用于 ICV 计算), 这通常与为 SA 禁用防重放的概念相反。