跳到主要内容

Appendix F. 到同一网络的多个接口 (Multiple Interfaces to Same Network)

        (2) 标准 OSPF 头部中的 checksum 字段不计算, 而是设置为 0.

(3) Key ID (见 Figure 18) 设置为所选密钥的 Key ID.

(4) Auth Data Len 字段设置为将附加到 OSPF 报文的 message digest 的字节长度. 使用 MD5 作为认证算法时, Auth Data Len 为 16.

(5) 32 位 Cryptographic sequence number (见 Figure 18) 设置为一个非递减值, 即至少与该接口上次发送的值一样大. cryptographic sequence number 字段中使用的精确值由实现决定. 例如, 它可以基于简单计数器, 也可以基于系统时钟.

(6) 随后计算 message digest 并将其附加到 OSPF 报文. 用于计算 digest 的认证算法由密钥本身指示. 认证算法的输入由 OSPF 报文和 secret key 组成. 使用 MD5 作为认证算法时, message digest 计算按如下方式进行:

(a) 将 16 字节 MD5 key 附加到 OSPF 报文.

(b) 按 [Ref17] 指定添加尾随 pad 和 length 字段.

(c) 对 OSPF 报文、secret key、pad 和 length 字段的串接运行 MD5 认证算法, 生成 16 字节 message digest (见 [Ref17]).

(d) 将 MD5 digest 写在 OSPF key 上, 即附加到原始 OSPF 报文. digest 不计入 OSPF 报文的 length 字段, 但计入报文的 IP length 字段. digest 之后的任何尾随 pad 或 length 字段都不计数也不传输.

D.5 报文验证 (Message verification)

当 OSPF 报文在接口上收到时, 必须进行认证. 认证过程由标准 OSPF 报文头部中 Autype 的设置指示, 该设置与接收 OSPF 接口的 Autype 设置相匹配.

如果 OSPF 协议报文被接受为真实, 则按 Section 8.2 的规定继续处理该报文. 认证失败的报文会被丢弃.

D.5.1 验证 Null authentication

使用 Null authentication 时, 必须验证 OSPF 头部中的 checksum 字段. 它必须设置为报文中除 authentication 字段外所有 16 位字的反码和的 16 位反码. 如果报文长度不是 16 位字的整数倍, 则在校验和计算前用一个零字节填充报文.

D.5.2 验证 Simple password authentication

使用 Simple password authentication 时, 收到的 OSPF 报文按如下方式认证:

(1) 必须验证 OSPF 头部中的 checksum 字段. 它必须设置为报文中除 authentication 字段外所有 16 位字的反码和的 16 位反码. 如果报文长度不是 16 位字的整数倍, 则在校验和计算前用一个零字节填充报文.

(2) OSPF 报文头部中的 64 位 authentication 字段必须等于为该接口配置的 64 位 password, 即 authentication key.


D.5.3 验证 Cryptographic authentication

使用 Cryptographic authentication 时, 收到的 OSPF 报文按如下方式认证:

(1) 定位接收接口上配置的、Key ID 等于收到 OSPF 报文中指定值的密钥 (见 Figure 18). 如果找不到该密钥, 或该密钥对接收无效, 即 current time < KeyStartAccept 或 current time >= KeyStopAccept, 则丢弃该 OSPF 报文.

(2) 如果 OSPF 头部中的 cryptographic sequence number (见 Figure 18) 小于发送邻居数据结构中记录的 cryptographic sequence number, 则丢弃该 OSPF 报文.

(3) 按以下步骤验证附加的 message digest:

(a) 将收到的 digest 暂存.

(b) 按 Section D.4.3 的 Step 6 指定计算新的 digest.

(c) 比较计算出的 digest 和收到的 digest. 如果它们不匹配, 丢弃该 OSPF 报文. 如果它们匹配, 则该 OSPF 协议报文被接受为真实, 并将邻居数据结构中的 "cryptographic sequence number" 设置为报文 OSPF 头部中的序列号.

E. 分配 Link State ID 的算法 (An algorithm for assigning Link State IDs)

AS-external-LSAs 和 summary-LSAs 中的 Link State ID 通常设置为所描述网络的 IP 地址. 但是, 如有必要, 可在 Link State ID 中设置网络的一个或多个主机位. 这允许路由器为地址相同但掩码不同的网络产生独立 LSA. 在存在 supernetting 和 subnet 0s 时可能出现这样的网络 (见 [Ref10]).

本附录给出一种设置 Link State IDs 中主机位的可能算法. 选择这种算法属于本地决策. 不同路由器可以自由使用不同算法, 因为唯一受影响的 LSA 是路由器自身产生的 LSA. 对所用算法的唯一要求是, 只要可能就应使用网络的 IP 地址作为 Link State ID; 这最大化了与 RFC 1583 之前 OSPF 实现的互操作性.

下述算法以 AS-external-LSAs 表述. 这只是为了清晰; 完全相同的算法可用于 summary-LSAs. 假设路由器希望为地址为 NA、掩码为 NM1 的网络产生 AS-external-LSA. 随后使用以下步骤确定该 LSA 的 Link State ID:

(1) 判断路由器是否已经在产生 Link State ID 等于 NA 的 AS-external-LSA. 在这样的 LSA 中, 路由器自身将被列为该 LSA 的 Advertising Router. 如果没有, 则将 Link State ID 设置为 NA, 算法终止. 否则,

(2) 从已存在 AS-external-LSA 的主体中获得网络掩码. 将该掩码称为 NM2. 随后有两种情况:

o NM1 比 NM2 更长, 即更具体. 在这种情况下, 将新 LSA 中的 Link State ID 设置为网络 [NA,NM1] 且所有主机位均置位的值, 即等于 NA 与 NM1 中未置位的所有位进行或运算后的值, 也就是网络 [NA,NM1] 的广播地址.

o NM2 比 NM1 更长. 在这种情况下, 更改现有 LSA (Link State ID 为 NA), 使其通过递增序列号来引用新网络 [NA,NM1],