跳到主要内容

2.5. Sequence Number (序列号)

该无符号 32 位字段包含一个计数器值, 该值对于每个发送的数据包增加 1, 即每个 SA 的数据包序列号。对于单播 SA 或单发送方多播 SA, 发送方必须 (MUST) 为每个传输的数据包递增此字段。允许在多个发送方之间共享 SA, 但通常不建议这样做。AH 没有提供在多个发送方之间同步数据包计数器或在多个发送方的上下文中有意义地管理接收方数据包计数器和窗口的方法。因此, 对于多发送方 SA, AH 的防重放 (anti-reply) 功能不可用 (见第 3.3.2 节和第 3.4.3 节)。

该字段是强制的, 并且即使接收方不选择为特定 SA 启用防重放服务, 也必须 (MUST) 始终存在。序列号字段的处理由接收方自行决定, 但所有 AH 实现必须 (MUST) 能够执行第 3.3.2 节 "Sequence Number Generation (序列号生成)" 和第 3.4.3 节 "Sequence Number Verification (序列号验证)" 中描述的处理。因此, 发送方必须 (MUST) 始终传输此字段, 但接收方无需对其采取行动。

当建立 SA 时, 发送方的计数器和接收方的计数器被初始化为 0。(使用给定 SA 发送的第一个数据包的序列号为 1; 有关如何生成序列号的更多详细信息, 请参阅第 3.3.2 节。) 如果启用了防重放 (默认情况下), 则传输的序列号绝对不能循环。因此, 在 SA 上传输第 2^32 个数据包之前, 发送方的计数器和接收方的计数器必须 (MUST) 重置 (通过建立新的 SA 并因此使用新密钥)。