4. 在 OSPF 中支持 UPA (Supporting UPA in OSPF)
[RFC2328] 的附录 B 为 OSPFv2 定义了以下架构常量 (architectural constant):
LSInfinity
表示 LSA 所描述的目标不可达的度量值. 它在 summary-LSAs 和 AS-external-LSAs 中使用, 可作为过早老化 (premature aging) 的替代方法 (见第 14.1 节). 它被定义为全部为 1 的 24-bit 二进制值:
0xffffff.
[RFC5340] 的附录 B 指出:
OSPF 协议的架构常量定义在 [OSPFV2] 的附录 B 中.
这表明这些相同的常量同样适用于 OSPFv3.
[RFC2328] 第 14.1 节还描述了 LSInfinity 的用法, 即作为一种指示前缀可达性丢失的方法:
例如, 当路由器先前通告的某条外部路由不再可达时, 也可以使用过早老化. 在这种情况下, 路由器可以通过过早老化从路由域中刷新其 AS-external-LSA. 与为该目标发起一个新 LSA 并指定 LSInfinity 度量值相比, 此过程更可取.
此外, OSPFv3 [RFC5340] 定义了 NU-bit. PrefixOptions 字段中设置了 NU-bit 的前缀不会纳入路由计算.
在 OSPFv2 中, 对于通过 OSPFv2 Summary-LSA [RFC2328], AS-external-LSAs [RFC2328], Not-So-Stubby Area (NSSA) AS-external-LSA [RFC3101] 和 OSPFv2 IP Algorithm Prefix Reachability Sub-TLV [RFC9502] 通告的前缀可达性, 支持 UPA.
在 OSPFv3 中, 对于通过 OSPFv3 E-Inter-Area-Prefix-LSA [RFC8362], E-AS-External-LSA [RFC8362], E-Type-7-LSA [RFC8362] 和 SRv6 Locator LSA [RFC9513] 通告的前缀可达性, 支持 UPA.
对于通过 Inter-Area-Prefix-LSA [RFC5340], AS-External-LSA [RFC5340], NSSA-LSA [RFC5340] 通告的前缀可达性, UPA 使用其对应的扩展 LSA (extended LSA) 进行信令. 这要求按照 [RFC8362] 第 6.2 节规定的稀疏模式 (sparse mode) 支持 OSPFv3 Extended LSAs.
4.1. 在 OSPF 中通告 UPA (Advertisement of UPA in OSPF)
如果 ABR 或 ASBR 在 OSPFv2 或 OSPFv3 内部区域间前缀或外部前缀的通告中通告 UPA, 则它必须将 age 设置为低于 MaxAge 的值, 并将度量值设置为 LSInfinity.
区域内的 UPA 泛洪 (flooding) 遵循 OSPFv2 [RFC2328] 和 OSPFv3 [RFC5340] 定义的现有标准过程.
4.2. 在 OSPF 中对 UPA 进行信令 (Signaling UPA in OSPF)
出于多种原因, 前缀可以在 OSPFv2 中使用 LSInfinity 度量值进行通告, 或者在 OSPFv3 中通过在 PrefixOptions 中设置 NU-bit 进行通告. 虽然 OSPFv2 和 OSPFv3 规定了 LSInfinity 度量值和 NU-bit 的处理方式, 但仍需要显式信令, 以便将 UPA 与使用 LSInfinity 度量值或 NU-bit 的其他场景区分开来.
[RFC9792] 定义了 OSPFv2 和 OSPFv3 Prefix Extended Flags Sub-TLV, 用于在 OSPFv2 和 OSPFv3 中通告额外的前缀属性标志.
Prefix Attribute Flags Sub-TLV 中定义了 2 个新比特:
U-Flag: Unreachable Prefix Flag (bit 0). 设置时, 表示该前缀不可达.
UP-Flag: Unreachable Planned Prefix Flag (bit 1). 设置时, 该标志表示该前缀由于计划事件 (例如计划维护) 而不可达.
发起节点禁止在未设置 U-flag 的情况下设置 UP-flag.
如果通告中未设置 U-flag, 接收节点必须忽略 UP-flag.
4.2.1. 在 OSPFv2 中对 UPA 进行信令 (Signaling UPA in OSPFv2)
OSPFv2 Prefix Extended Flags Sub-TLV [RFC9792] 是 OSPFv2 Extended Prefix TLV [RFC7684] 的一个 sub-TLV.
使用 U-Flag 或 UP-Flag 通告的前缀必须将度量值设置为 LSInfinity. 如果前缀度量值不等于 LSInfinity, 则必须忽略这两个标志. 因此, 对于使用 U-Flag 或 UP-Flag 通告的默认算法 0 中的前缀, 必须在基础 OSPFv2 LSA 中通告不可达前缀, 例如 OSPFv2 Summary-LSA [RFC2328], AS-external-LSAs [RFC2328] 或 NSSA AS-external LSA [RFC3101].
4.2.2. 在 OSPFv3 中对 UPA 进行信令 (Signaling UPA in OSPFv3)
OSPFv3 Prefix Extended Flags Sub-TLV 被定义为 [RFC8362] 中以下 OSPFv3 TLV 的 sub-TLV:
- Intra-Area-Prefix TLV
- Inter-Area-Prefix TLV
- External-Prefix TLV
使用 U-Flag 或 UP-Flag 通告的前缀必须将度量值设置为 LSInfinity. 对于默认算法 0 前缀, 必须在父 TLV 中设置 LSInfinity. 对于 IP Algorithm Prefixes [RFC9502], 必须在 OSPFv3 IP Algorithm Prefix Reachability sub-TLV 中设置 LSInfinity. 如果前缀度量值不等于 LSInfinity, 则必须忽略这两个标志.
使用 U-Flag 或 UP-Flag 通告的前缀必须在父 TLV 的 PrefixOptions 中设置 NU-bit. 如果父 TLV 的 PrefixOptions 中未设置 NU-bit, 则必须忽略这两个标志.
4.3. 在 OSPF 中传播 UPA (Propagation of UPA in OSPF)
OSPF ABR 负责将 UPA 通告传播到其他区域, 因此需要识别此类通告. 如果不能识别, UPA 将无法到达远端区域中的路由器.
在 OSPF 区域之间通告前缀可达性时, 假定源区域中存在前缀可达性. 由于 UPA 传播的是不可达性, 因此禁止将这种可达性要求应用于 UPA.
OSPF ABR 或 ASBR 可以在相连区域或域之间通告接收到的 UPA. 这样做时, 必须保留 UPA 中原始的 LSInfinity 度量值. 在向相连区域重新通告 UPA 时, 禁止考虑到达接收到的 UPA 发起者的成本.