4.5. Flooding (泛洪)
大部分泛洪算法与 [OSPFV2] 第13节中描述的 IPv4 泛洪机制保持不变. 特别是, 用于确定哪个 LSA 实例更新的协议过程 ([OSPFV2] 的第13.1节), 响应自产生 LSA 的更新 ([OSPFV2] 的第13.4节), 发送链路状态确认数据包 ([OSPFV2] 的第13.5节), 重传 LSA ([OSPFV2] 的第13.6节) 以及接收链路状态确认数据包 ([OSPFV2] 的第13.7节), 对于 IPv6 和 IPv4 完全相同.
但是, 泛洪范围 (Flooding Scope) 和未知 LSA 类型处理 (参见附录 A.4.2.1) 的添加导致 OSPF 泛洪算法发生了一些变化: 接收链路状态更新 ([OSPFV2] 的第13节) 和发送链路状态更新 ([OSPFV2] 的第13.3节) 必须考虑 LSA 的范围和 U 位设置. 此外, 由于 LSA 类型的重组和 IPv6 LSA 内容, 将 LSA 安装到 OSPF 数据库 ([OSPFV2] 的第13.2节) 在 IPv6 中会导致不同的事件. 下面详细描述这些变化.
4.5.1. 接收链路状态更新数据包
LS 类型中泛洪范围的编码和处理未知 LS 类型的需要导致接收链路状态更新数据包的处理发生修改. 与 IPv4 一样, 检查接收到的链路状态更新数据包中的每个 LSA. 在 IPv4 中, 为每个 LSA 执行八个步骤, 如 [OSPFV2] 的第13节所述. 对于 IPv6, 所有步骤都相同, 除了步骤2和步骤3修改如下:
(2) 检查 LSA 的 LS 类型. 如果接口区域已配置为末梢区域 (Stub Area) 或 NSSA 区域, 并且 LS 类型指示"AS 泛洪范围 (AS Flooding Scope)", 则丢弃 LSA 并从链路状态更新数据包中获取下一个.
这概括了 IPv4 行为, 其中 AS外部-LSA 和 AS 范围不透明 LSA [OPAQUE] 不会在末梢区域或 NSSA 区域中泛洪.
(3) 否则, 如果 LSA 的 LS 类型中的泛洪范围设置为"保留 (Reserved)", 则丢弃 LSA 并从链路状态更新数据包中获取下一个.
[OSPFV2] 第13节中的步骤5b (发送链路状态更新数据包) 和步骤5d (在链路状态数据库中安装 LSA) 对于 IPv6 也有所不同, 如下面的第4.5.2节和第4.5.3节所述.
4.5.2. 发送链路状态更新数据包
发送链路状态更新数据包在 [OSPFV2] 的第13.3节中描述. 对于 IPv4 和 IPv6, 发送链路状态更新数据包的步骤相同 ([OSPFV2] 第13.3节的步骤1至步骤5). 但是, 可以在其上泛洪 LSA 的合格接口 (Eligible Interfaces) 列表不同. 对于 IPv6, 根据以下因素选择合格接口:
- LSA 的泛洪范围.
- 对于具有区域或链路本地泛洪范围的 LSA, 与 LSA 关联的特定区域或接口.
- LSA 是否具有可识别的 LS 类型.
- LS 类型中 U 位的设置. 如果 U 位设置为 0, 则无法识别的 LS 类型被视为具有链路本地范围. 如果设置为 1, 则存储和泛洪无法识别的 LS 类型, 就好像它们已被识别一样.
选择合格接口集然后分为以下情况:
情况1: LSA 的 LS 类型已识别. 在这种情况下, 根据 LS 类型中编码的泛洪范围设置合格接口集. 如果泛洪范围是"AS 泛洪范围", 则合格接口是除虚拟链路外的所有路由器接口. 此外, AS外部-LSA 不会在连接到末梢区域或 NSSA 区域的接口上泛洪. 如果泛洪范围是"区域泛洪范围", 则合格接口是连接到 LSA 关联区域的那些接口. 如果泛洪范围是"链路本地泛洪范围", 则有一个合格接口, 即连接到 LSA 关联链路的接口.
情况2: LS 类型无法识别, 并且 LS 类型中的 U 位设置为 0 (将 LSA 视为具有链路本地泛洪范围). 在这种情况下, 有一个合格接口, 即接收 LSA 的接口.
情况3: LS 类型无法识别, 并且 LS 类型中的 U 位设置为 1 (存储和泛洪 LSA, 就好像该类型已理解一样). 在这种情况下, 根据编码的泛洪范围选择合格接口, 与上述情况1相同.
在将 LSA 添加到给定邻居的链路状态重传列表之前, 有时必须做出进一步的决定 ([OSPFV2] 第13.3节中的步骤1d). 如果 LS 类型被路由器识别但不被邻居识别 (可以通过检查邻居在其数据库描述数据包中通告的选项字段来确定), 并且 LSA 的 U 位设置为 0, 则当且仅当该邻居是连接链路的指定路由器或备用指定路由器时, 才应将 LSA 添加到邻居的链路状态重传列表中.
4.5.3. 在数据库中安装 LSA
根据 LSA 的泛洪范围, 有三个独立的位置来存储 LSA. 只要 LS 类型已知或其 U 位为 1, 具有 AS 泛洪范围的 LSA 就存储在全局 OSPF 数据结构 (参见第4.1节) 中. 只要 LS 类型已知或其 U 位为 1, 具有区域泛洪范围的 LSA 就存储在适当的区域数据结构 (参见第4.1.1节) 中. 具有链路本地泛洪范围的 LSA, 以及具有未知 LS 类型且 U 位设置为 0 (将 LSA 视为具有链路本地泛洪范围) 的 LSA, 存储在适当的接口数据结构中.
将 LSA 存储到链路状态数据库时, 必须检查 LSA 的内容是否已更改. 内容的更改完全按照 [OSPFV2] 的第13.2节所示. 当 LSA 的内容已更改时, 必须根据 LSA 的 LS 类型重新计算路由表的以下部分.