A2. Anti-Replay Window (防重放窗口)
A2. Anti-Replay Window (防重放窗口)
接收方将维护一个大小为 W 的防重放窗口。该窗口将限制数据包相对于迄今为止已验证的具有最高序列号的数据包的乱序程度。(除了已为 32 位序列号窗口建立的 32 包和 64 包值之外, 没有为该窗口建立最小或推荐大小的要求。但是, 建议实现者根据使用 ESN 选项的实现所支持的接口速度来缩放这些值。此外, 下面描述的算法假设窗口宽度不超过 2^31 个数据包。) 与高 32 位 (Seqh) 的任何固定值关联的所有 2^32 个序列号将被称为序列号子空间 (sequence number subspace)。下表列出了相关变量及其定义。
Var. Size
Name (bits) Meaning
---- ------ ---------------------------
W 32 Size of window (窗口大小)
T 64 Highest sequence number authenticated so far,
upper bound of window (迄今为止已验证的最高序列号, 窗口上界)
Tl 32 Lower 32 bits of T (T 的低 32 位)
Th 32 Upper 32 bits of T (T 的高 32 位)
B 64 Lower bound of window (窗口下界)
Bl 32 Lower 32 bits of B (B 的低 32 位)
Bh 32 Upper 32 bits of B (B 的高 32 位)
Seq 64 Sequence Number of received packet (接收数据包的序列号)
Seql 32 Lower 32 bits of Seq (Seq 的低 32 位)
Seqh 32 Upper 32 bits of Seq (Seq 的高 32 位)
在执行防重放检查时, 或在确定使用哪些高位比特来验证传入数据包时, 有两种情况:
- Case A (情况A): Tl >= (W - 1)。在这种情况下, 窗口位于一个序列号子空间内。(见图 1)
- Case B (情况B): Tl < (W - 1)。在这种情况下, 窗口跨越两个序列号子空间。(见图 2)
在下面的图中, 底部线 ("----") 显示了两个连续的序列号子空间, 零表示每个子空间的开始。上面的两条较短的线显示了适用的高位比特。"====" 代表窗口。"****" 代表未来的序列号, 即超出当前已验证的最高序列号 (ThTl) 的那些序列号。
Th+1 *********
Th =======*****
--0--------+-----+-----0--------+-----------0--
Bl Tl Bl
(Bl+2^32) mod 2^32
图 1 -- 情况 A
Th ====**************
Th-1 ===
--0-----------------+--0--+--------------+--0--
Bl Tl Bl
(Bl+2^32) mod 2^32
图 2 -- 情况 B