跳到主要内容

2. 与 OSPF for IPv4 的差异

OSPF for IPv4 [OSPFV2] 中的大多数算法都已保留在 OSPF for IPv6 中. 然而, 由于 IPv4 和 IPv6 之间的协议语义变化, 或者仅仅为了处理 IPv6 更大的地址长度, 一些变更是必要的.

以下各小节描述本文档与 [OSPFV2] 之间的差异.

2.1. 按链路而非按子网进行协议处理

IPv6 使用术语 "link" 表示 "节点可在其上通过链路层通信的通信设施或介质" ([IPV6]). "Interfaces" 连接到 links. 多个 IPv6 子网 (subnets) 可以分配给同一条链路 (link), 并且两个节点即使不共享同一个 IPv6 子网 (IPv6 prefix), 也可以在同一条链路上直接通信.

因此, OSPF for IPv6 按链路运行, 而不是采用 IPv4 中按 IP 子网运行的行为. IPv4 OSPF 规范 ([OSPFV2]) 中使用的 "network" 和 "subnet" 一般应替换为 link. 同样, OSPF interface 现在连接到一条链路, 而不是连接到一个 IP 子网.

这一变化影响 OSPF 协议数据包的接收, Hello 数据包的内容, 以及 network-LSA 的内容.

2.2. 移除地址语义

在 OSPF for IPv6 中, 地址语义 (addressing semantics) 已从 OSPF 协议数据包和主要 LSA 类型中移除, 从而留下一个独立于网络协议的核心. 具体而言:

  • 除了 Link State Update 数据包所携带的 LSA 负载外, OSPF 数据包中不包含 IPv6 地址. 详情见第 2.7 节.

  • Router-LSA 和 network-LSA 不再包含网络地址, 而只是表达拓扑信息. 详情见第 2.8 节.

  • OSPF Router ID, Area ID, 和 LSA Link State ID 保持 IPv4 的 32 bit 大小. 它们不能再被分配为 (IPv6) 地址.

  • 相邻路由器现在始终由 Router ID 标识. 以前, 在 broadcast, NBMA (Non-Broadcast Multi-Access), 和 point-to-multipoint 链路上, 相邻路由器由 IPv4 地址标识.

2.3. 增加泛洪作用域

LSA 的泛洪作用域 (flooding scope) 已被泛化, 并且现在显式编码在 LSA 的 LS type 字段中. LSA 现在有三个独立的泛洪作用域:

  • Link-local 作用域. LSA 只在本地链路上泛洪, 不再继续传播. 用于新的 link-LSA. 详情见第 4.4.3.8 节.

  • Area 作用域. LSA 只在单个 OSPF area 内泛洪. 用于 router-LSA, network-LSA, inter-area-prefix-LSA, inter-area-router-LSA, 和 intra-area-prefix-LSA.

  • AS 作用域. LSA 在整个路由域 (routing domain) 内泛洪. 用于 AS-external-LSA. 发起 AS scoped LSA 的路由器被视为 AS Boundary Router (ASBR), 并会在常规 area 的 router-LSA 中设置其 E-bit.

2.4. 显式支持单条链路上的多个实例

OSPF 现在支持在单条链路上运行多个 OSPF 协议实例的能力. 例如, 在多个提供商共享的 NAP 网段上, 这可能是必需的. 各提供商可能支持彼此分离的 OSPF 路由域, 即使它们共同使用一个或多个物理网络段 (即 links), 这些路由域也希望保持分离. 在 OSPF for IPv4 中, 这是通过 OSPF for IPv4 头部中的认证字段以一种临时方式支持的.

运行多个 OSPF 实例的另一个用途是, 如果出于某种原因希望单条链路属于两个或更多 OSPF areas.

通过 OSPF 数据包头部和 OSPF interface 数据结构中包含的 "Instance ID" 来实现对单条链路上多个协议实例的支持. Instance ID 仅影响 OSPF 数据包的接收, 并适用于普通 OSPF interfaces 和 virtual links.

IPv6 link-local 地址用于单条链路, 目的包括邻居发现, 自动配置等. IPv6 路由器不会转发具有 link-local 源地址的 IPv6 数据报 [IP6ADDR]. Link-local 单播地址从 IPv6 地址范围 FE80/10 中分配.

OSPF for IPv6 假定每台路由器都已在该路由器连接的每条物理链路上分配 link-local 单播地址 [IP6ADDR]. 除 virtual links 外, 在所有 OSPF interfaces 上, OSPF 数据包都使用该 interface 关联的 link-local 单播地址作为源地址发送. 路由器学习连接到其链路的所有其他路由器的 link-local 地址, 并在数据包转发期间将这些地址用作下一跳信息.

在 virtual links 上, OSPF 协议数据包的源地址必须使用 global scope IPv6 地址.

Link-local 地址出现在 OSPF link-LSA 中 (见第 4.4.3.8 节). 但是, 其他 OSPF LSA 类型中不允许出现 link-local 地址. 特别是, link-local 地址不得在 inter-area-prefix-LSA (第 4.4.3.4 节), AS-external-LSA (第 4.4.3.6 节), NSSA-LSA (第 4.4.3.7 节), 或 intra-area-prefix-LSA (第 4.4.3.9 节) 中通告.

2.6. 认证变更

在 OSPF for IPv6 中, 认证 (authentication) 已从 OSPF 协议中移除. "AuType" 和 "Authentication" 字段已从 OSPF 数据包头部中移除, 所有与认证相关的字段也已从 OSPF area 和 interface 数据结构中移除.

在 IPv6 上运行时, OSPF 依赖 IP Authentication Header (见 [IPAUTH]) 和 IP Encapsulating Security Payload (见 [IPESP]) 来确保路由交换的完整性和认证/机密性, 如 [OSPFV3-AUTH] 中所述.

OSPF 数据包交换针对意外数据损坏的保护由标准 IPv6 Upper-Layer checksum 提供 (如 [IPV6] 第 8.1 节所述), 该校验和覆盖整个 OSPF 数据包以及前置的 IPv6 pseudo-header (见 Appendix A.3.1).

2.7. 数据包格式变更

OSPF for IPv6 直接运行在 IPv6 之上. 除此之外, 所有地址语义都已从 OSPF 数据包头部中移除, 使其本质上 "独立于网络协议". 所有地址信息现在仅包含在各种 LSA 类型中.

具体而言, OSPF 数据包格式的变更包括:

  • OSPF version number 已从 2 递增到 3.

  • Hello 数据包和 Database Description 数据包中的 Options field 已扩展到 24 bit.

  • Authentication 和 AuType 字段已从 OSPF 数据包头部中移除 (见第 2.6 节).

  • Hello 数据包现在完全不包含地址信息. 相反, 它现在包含一个 Interface ID, 该 Interface ID 由发起路由器分配, 用于在其自身 interfaces 中唯一标识它连接到该链路的 interface. 如果该路由器成为该链路上的 Designated Router, 此 Interface ID 将用作 network-LSA 的 Link State ID.

  • 已向 Options field 添加两个 Options bits, 即 "R-bit" 和 "V6-bit", 用于在 SPF 计算期间处理 router-LSA (见 Appendix A.2). 如果 "R-bit" 清零, OSPF speaker 可以参与 OSPF 拓扑分发, 但不会被用于转发 transit traffic; 这可用于希望参与路由协议的 multi-homed hosts. V6-bit 是对 R-bit 的专门化; 如果 V6-bit 清零, OSPF speaker 可以参与 OSPF 拓扑分发, 但不会被用于转发 IPv6 数据报. 如果 R-bit 置位且 V6-bit 清零, 则不转发 IPv6 数据报, 但可以转发属于其他协议族的数据报.

  • OSPF 数据包头部现在包含 "Instance ID", 允许在单条链路上运行多个 OSPF 协议实例 (见第 2.4 节).

2.8. LSA 格式变更

所有地址语义都已从 LSA 头部, router-LSA, 和 network-LSA 中移除. 这两种 LSA 现在以独立于网络协议的方式描述路由域的拓扑. 新增的 LSA 用于分发 IPv6 地址信息以及下一跳解析所需的数据. IPv4 中某些 LSA 的名称已更改, 以便彼此更加一致.

具体而言, LSA 格式的变更包括:

  • Options field 已从 LSA 头部中移除, 扩展到 24 bit, 并移入 router-LSA, network-LSA, inter-area-router-LSA, 和 link-LSA 的主体中. 详情见 Appendix A.2.

  • LSA Type 字段已扩展到 16 bit (进入原 Options 空间), 其中高三位编码泛洪作用域和未知 LSA 类型的处理方式 (见第 2.9 节).

  • LSA 中的地址现在表示为 [prefix, prefix length], 而不是 [address, mask] (见 Appendix A.4.1). 默认路由表示为长度为 0 的前缀.

  • Router-LSA 和 network-LSA 现在不含地址信息, 并且独立于网络协议.

  • 路由器 interface 信息可以分布在多个 router-LSA 中. 接收方在运行 SPF 计算时必须拼接由给定路由器发起的所有 router-LSA.

  • 引入了一种新的 LSA, 称为 link-LSA. Link-LSA 具有 link-local 泛洪作用域; 它们从不泛洪到与其关联链路之外. Link-LSA 有三个用途: 1) 向连接到该链路的所有其他路由器提供该路由器的 link-local 地址, 2) 告知连接到该链路的其他路由器与该链路关联的 IPv6 prefix 列表, 3) 允许该路由器通告一组 Options bits, 以便与将为该链路发起的 network-LSA 关联. 详情见第 4.4.3.8 节.

  • 在 IPv4 中, router-LSA 携带路由器的 IPv4 interface 地址, 即 link-local 地址在 IPv4 中的等价物. 这些地址只在 OSPF 路由计算期间计算下一跳时使用 (见 [OSPFV2] 第 16.1.1 节), 因此不需要泛洪到本地链路之外. 因而, 使用 link-LSA 分发这些地址效率更高. 请注意, 并非在所有情况下都能通过接收 Hello 来学习 link-local 地址. 在 NBMA 链路上, 下一跳路由器不一定交换 Hello. 相反, 这些路由器通过 Designated Router (DR) 获知彼此的存在.

  • network LSA 中的 Options field 设置为链路上每台路由器在其 link-LSA 中通告的 Options 的逻辑 OR.

  • Type-3 summary-LSA 已重命名为 "inter-area-prefix-LSA". Type-4 summary LSA 已重命名为 "inter-area-router-LSA".

  • inter-area-prefix-LSA, inter-area-router-LSA, NSSA-LSA, 和 AS-external-LSA 中的 Link State ID 已失去其地址语义, 现在仅用于标识 Link State Database 中的单个片段. 以前由 Link State ID 表达的所有地址或 Router ID 现在都携带在 LSA 主体中.

  • Network-LSA 和 link-LSA 是仅有的 Link State ID 携带额外含义的 LSA. 对于这些 LSA, Link State ID 始终是发起路由器在所描述链路上的 Interface ID. 因此, network-LSA 和 link-LSA 现在是仅有的无法限制大小的 LSA: network-LSA 必须列出连接到该链路的所有路由器, link-LSA 必须列出路由器在该链路上的所有地址.

  • 引入了一种新的 LSA, 称为 intra-area-prefix-LSA. 该 LSA 携带 IPv4 中包含在 router-LSA 和 network-LSA 中的所有 IPv6 prefix 信息. 详情见第 4.4.3.9 节.

  • 在 AS-external-LSA 中包含 forwarding address 或 external route tag 现在是可选的. 此外, AS-external-LSA 现在可以引用另一个 LSA, 以包含 OSPF 协议范围之外的附加路由属性. 例如, 该引用可用于将 BGP path attributes 附加到外部路由.

2.9. 处理未知 LSA 类型

未知 LSA 类型的处理方式已变得更加灵活, 因而根据 LS type, 未知 LSA 类型会被视为具有 link-local 泛洪作用域, 或者会像已被理解一样被存储和泛洪. 此行为显式编码在链路状态头部的 LS type 字段中的 LSA Handling bit 中 (见 Appendix A.4.2.1 中的 U-bit).

IPv4 OSPF 对未知类型直接丢弃的行为不受支持, 原因是希望在单条链路上混合使用具有不同能力的路由器. 当 Designated Router 支持的选项少于链路上的其他路由器时, 丢弃未知类型会导致问题.

2.10. Stub/NSSA Area 支持

在 OSPF for IPv4 中, stub 和 NSSA areas 旨在最小化这些 area 内部路由器的 link-state database 和 routing table 大小. 这允许资源很少的路由器也能参与非常大的 OSPF 路由域.

在 OSPF for IPv6 中, 保留了 stub 和 NSSA areas 的概念. 在 IPv6 中, 在强制性 LSA 类型中, stub areas 仅携带 router-LSA, network-LSA, inter-area-prefix-LSA, link-LSA, 和 intra-area-prefix-LSA. NSSA areas 受限于这些类型, 当然还包括 NSSA-LSA. 这等价于 IPv4 stub areas 中携带的 LSA 类型: router-LSA, network-LSA, type 3 summary-LSA, 以及对于 NSSA areas: stub area 类型和 NSSA-LSA.

2.11. 通过 Router ID 标识邻居

在 OSPF for IPv6 中, 给定链路上的相邻路由器始终由其 OSPF Router ID 标识. 这不同于 IPv4 的行为: 在 IPv4 中, point-to-point networks 和 virtual links 上的邻居由其 Router ID 标识, 而 broadcast, NBMA, 和 point-to-multipoint 链路上的邻居由其 IPv4 interface 地址标识.

这一变化影响 OSPF 数据包的接收 (见 [OSPFV2] 第 8.2 节), 邻居查找 ([OSPFV2] 第 10 节), 以及 Hello 数据包的接收 ([OSPFV2] 第 10.5 节).

Router ID 0.0.0.0 被保留, 不应该使用.