image.png

1. 特征


  • OSPFv3 在 OSPFv2 基础上进行了修改,是一个独立的路由协议(RFC5340、RFC2740)
  • 协议号依然是 89(与 OSPFv2 相同)
  • 通过包头的 Type 字段标识 5 种包类型(Hello、DD、LSR、LSU、LSAck)
  • 采用 Link-Local 地址作为源发送协议报文(除了 Virtual-Link 外)
  • 路由和拓扑分离,通过 Intra-Area-Prefix LSA(LSA Type 9)关联
  • 通过组播地址作为目的发送协议报文,「IPv6 中 Hop Limit=1(相当于 TTL 值)」
    • FF02::5(All-SPF Router)
    • FF02::6(All-DR/BDR Router)
  • IPv6 地址的变化对 OSPFv3 的影响
    1. IPv6 地址扩大为 128 位后 OSPFv3 的 LSA 长度增加
    2. OSPFv3 使用 Link-Local 地址进行报文的发送(Virtual-Link 通过全球单播发送更新)
    3. OSPFv3 基于 Link 进行通信,不再基于 Subnet(不基于全球单播地址)
    4. OSPFv3 使用 IPv6 扩展头进行报文的认证和加密

      2. OSPFv3 和 OSPFv2 的对比


1)相同点和不同点

  • 相同点:
    • 网络类型和接口类型
    • 接口状态机和邻居状态机
    • 都有链路状态数据库(LSDB)
    • 泛洪机制相同
    • 五种协议报文(Heelo、DD、LSP、LSU、LSAck)
    • 路由计算基本相同(SPF)
  • 不同点:

    • OSPFv3 基于链路的运行
    • OSPFv3 使用链路本地地址(虚连接除外)
    • OSPFv3 通过 Router ID 唯一标识邻居
    • OSPFv3 认证变化
    • OSPFv3 支持未知 LSA 的泛洪
    • OSPFv3 支持链路多实例
    • OSPFv3 的报文的格式不同
    • OSPFv3 的 Option 字段不同
    • OSPFv3 的 LSA 类型和内容不同

      2)OSPFv3 基于链路的运行

  • OSPFv2 是基于网络运行的,两个路由器之间必须在同一个网段才会形成邻居关系

  • OSPFv3 是基于链路实现的,一个链路可以划分为多个子网节点,即使不在同一个子网内,只要在同一链路上就可以直接通信

image.png

3)OSPFv3 使用链路本地地址

  • OSPFv3 的路由器使用链路本地地址作为发送报文的源地址,目的是组播(虚连接除外)
  • 在虚连接上, 必须使用全球单播地址或者唯一本地地址作为 OSPFv3 协议报文的源地址
  • 由于链路本地地址只在本链路上有意义且只能在本链路上泛洪,因此链路本地地址只能出现在 Link LSA(LSA Type 8)

    4)OSPFv3 通过 Router ID 唯一标识邻居

  • 在 OSPFv2 中,当网络类型为 P2P 或通过 Vlink 与邻居相连时,通过 Router ID 来标识邻居路由器;当网络类型为 Broadcast 或 NBMA 时,通过邻居接口的 IP 来表示邻居路由器

  • 在 OSPFv3 中,无论如何都采用 Router ID 来唯一标识邻居。如果没有指定 Router ID,OSPFv3 协议不会工作

    5)OSPFv3 认证的变化

  • OSPFv2 认证在报文的Header中

  • OSPFv3 认证一般依赖 IPv6 的扩展验证头(IPsec),并使用 IPv6 标准的校验和

    6)OSPFv3 对未知 LSA 的泛洪

  • OSPFv2 不支持对未知类型的 LSA 进行泛洪

  • OSPFv3 支持对未知类型的 LSA 进行泛洪。只有当未知类型 LSA 的泛洪范围是区域(LSA Type 8)或链路,而且 LSA 头部报文中 U-bit 没有置位时,未知类型 LSA 才可以向 Stub 区域泛洪(防止大量的未知 LSA 泛洪到 Stub 区域)

    7)OSPFv3 链路支持多实例

  • 支持在同一链路上运行多个实例,实现链路复用(接口可以配置多实例,但是不能是同一个进程)

    • 在 Hello 报文中添加 Instance ID 字段来实现
    • 如果接口配置的 Instance ID 与接收到 Hello 报文的 Instance ID 不匹配,则丢弃报文,从而无法建立邻居
  • 默认实例 0,同一进程只能关联一个实例,不同进程可以关联不同实例

image.png

8)OSPFv3 的报文头部和 Hello 报文的格式不同

增加了 Instance ID,取消了认证和掩码

image.png
OSPFv3 报文格式解析

  • Version :版本,对于 OSPFv2 该值是 2;对于 OSPFv3 则是 3
  • Type:与 OSPFv2 相同
    • 1:Hello
    • 2:DD
    • 3:LSR
    • 4:LSU
    • 5:LSAck
  • Packet LengthLength:OSPFv3 报文长度 ,2字节
  • RouterID :路由器 ID
  • Area ID :区域 ID
  • Checksum :校验和
  • Instance ID :链路实例 ID,用来标识发送该 Hello 报文的接口 ID,仅用来区分同一路由器上的不同接口,不包含接口信息。通过判断该字段就可以区分同一链路上运行的不同 OSPF 实例,默认 = 0[实例 ID 只在本地链路范围内具有意义]
  • Reserved( 保留 ):保留字段,总是 0
  • Rtr Pri:路由器优先级,优先级高的成为 DR
  • Options:扩展为 24 位

    9)OSPFv3 的 Option 字段不同

  • OSPFv2 中,Option 字段出现在每个 Hello 报文、DD 报文和所有 LSA 中

  • OSPFv3 中,Option 字段只在 Hello 报文、DD、LSA Type 1、LSA Type 2、LSA Type 4、LSA Type 8 中出现

image.png
OSPFv3 Option 字段解释

  • DC:描述路由器是否支持按需拨号
  • R:路由器位,用来标识设备是否具备转发能力的路由器
    • R=1:宣告该节点的路由信息将参与路由计算
    • R=0:宣告该节点的路由信息将不会参与路由计算。可以使设备不转发非本地地址的报文
  • N:是否是在 NSSA 区域,描述了路由器对 LSA Type 7 的处理
  • MC:描述路由器是否运行了 MOSPF
  • E:描述该区域是否能泛洪 AS external LSA,如果 E-bit 设置不正确,邻接关系就不能形成
    • E=1:支持 LSA Type 5 的泛洪
    • E=0:不支持 LSA Type 5 的泛洪
  • V6:用来标识路由器或链路是否参与 IPv6 路由计算
    • R=1:路由器或链路参与 IPv6 路由计算
    • R=0:路由器或链路不参与 IPv6 路由计算

      10)OSPFv3 的 LSA 类型和内容不同

      相比于 OSPFv2 减少了 Options 和 LS Type 中增加了 U、S2/S1、LSA Function code

image.png
OSPFv3 LSA 新增类型解释

  • U:指示路由器如何处理无法识别的 LSA
    • U=0:按照 S2/S1 标识的范围进行泛洪
    • U=1:作为 Link-Loacl 范围的 LSA 进行泛洪
  • S2/S1:共同标识 LSA 的泛洪范围
    • S2=0,S1=0:Link-Local Scope(链路本地范围),LSA只在本地链路上泛洪(新增的8类Link-LSA),不会超出这个范围
    • S2=0,S1=1:Area Scope(区域范围),在 LSA Type 1、2、3、4、9 区域范围泛洪
    • S2=1,S1=0:AS Scope(自治系统范围),LSA 将泛洪到整个路由域(LSA Type 5)
  • LSA Function Code:LSA 的类型编码

image.png

3. OSPFv3 LSA类型


  • Router LSA 不再包含地址信息而是通过 ID 标识,运行 OSPFv3 的设备为它所连接的每条链路产生单独的 Link LSA,用来表示接口
    • LSA Type 8 将该接口的 Link-Local 地址以及所有 IPv6 地址信息向该接口的其他路由器通告
  • Router LSA 和 Network LSA 不再包含路由信息(只有拓扑信息),这两类 LSA 所携带的路由信息由 Intra Area Prefix LSA 来描述
    • LSA Type 9 包含路由信息,并用来公告一个或多个 IPv6 地址前缀 | LSA 类型 | LSA 生成 | LSA 作用和泛洪范围 | | —- | —- | —- | | Router LSA(Type 1) | 每个设备都会产生 |
      - 描述设备的链路状态和开销
      - 在所属的区域内泛洪
      | | Network LSA(Type 2) | DR 产生 |
      - 描述网络中所链设备的 Router ID
      - 在所属的区域内泛洪
      | | Inter-Area-Prefix LSA(Type 3) | ABR 产生 |
      - 描述区域内某个网段的路由
      - 在非 Totally Stub/Nssa 区域的相关区域防洪(跨区域传播,但是每经过一个 ABR,Adv 会改变)
      | | Inter-Area-Router LSA(Type 4) | ABR 产生 |
      - 描述 ASBR 的位置信息
      - 在非 Totally Stub 区域的相关区域泛洪(跨区域传播,但是每经过一个 ABR 会改变 Adv 进行跨区域通告)
      | | AS-External LSA(Type 5) | ASBR 产生 |
      - 描述 ASBR 到达外部目标网络的路由信息
      - 在非 Stub/Nssa 区域的整个 OSPFv3 域中泛洪
      | | NSSA LSA(Type 7) | ASBR 产生 |
      - 描述 Nssa 中 ASBR 到达外部目标网络的路由信息
      - 在 Nssa 区域内泛洪,经过 ABR 会将 LSA Type 7 转 LSA Type 5
      | | Link LSA(Type 8) | 每个设备为每个链路都会产生 |
      - 描述此链路上的 Link-loacl、IPv6 前缀地址,并提供在 LSA Type 2 中设置的链路选项
      - 在该链路内泛洪
      | | Intra-Area-Prefix-LSA(Type 9) | 每个设备和 DR 都会产生 |
      - 如果是设备产生,描述与 Type 1 LSA 相关的 IPv6 前缀;如果是 DR 产生,描述与 LSA Type 2 相关的 IPv6 前缀
      - 在所属的区域内泛洪
      |

1)Router LSA(LSA Type 1)

  • 通过 Originating Router 标识发起该 LSA 的 Router ID
  • 不包含前缀信息、StubNet 类型,只描述路由器的一个接口链路状态和开销
  • 每个 LSA Type 1 包含若干链路描述,设备会为每个运行 OSPFv3 的接口在所在区域产生。可以使用多个 LSA Type 1 描述信息,通过 Link State ID 区分多个不同的 Router LSA
  • Flags 字段:相比 OSPFv2,新增了一个 W 字段
    • W:表明是 MOSPF(支持组播,相比 OSPFv2 新增)
    • E-:表明是 ASBR
    • V:表明是虚链路
    • B:表明是 ABR
  • 链路类型 | Type | Neighbor Router ID | Neighbor Interface ID | | —- | —- | —- | | P2P | 邻居的 Router ID | 邻居的接口 ID | | Transit | DR 的 Router ID | DR 的接口 ID | | Virtual Link | 邻居的 Router ID | 邻居的 Vlink 接口 ID |

image.png
image.png

2)Network LSA(LSA Type 2)

  • 取消了 IPv6 中无关紧要的掩码
  • 通过 Link State ID 与 DR 的接口 ID 相关联
  • 通过 Originating Router 标识 DR 的 Router ID

image.png
image.png

3)Inter-Area-Prefix LSA(LSA Type 3)

  • Link State ID 仅用来区分相同的 LSA
  • 每个 LSA Type 3 包含一条具体地址的前缀信息或汇总地址的前缀信息
  • LSA Type 3 中不包含 Link-Local 地址信息

image.png
image.png

4)Inter-Area-Router LSA(LSA Type 4)

  • Link State ID 用来表示 ASBR 的 Router ID
  • 由 Originating Router 标识 ABR 设备,每经过一个 ABR 会改变 Originating Router
  • 每个 LSA Type 4 包含一个 ASBR 路由器位置信息
  • ASBR Router LSA 中的能力选项(Options)与 LSA 中所描述的中能力选项(Options)保持一致

image.png
image.png

5)AS-External LSA(LSA Type 5)

  • Link State ID 仅用来区分相同的 LSA
  • LSA Type 5 不含有Link-Local地址信息
  • Flags:
    • E-bit:表示外部类型
      • E=0:表示外部类型为OE1
      • E=1:表示外部类型为OE2(默认)
    • F-bit:表示有转发地址可选项
    • T-bit:表示有外部 Tag 可选项
  • 可选项:
    • Forwarding
    • Tag

image.png
image.png

6)Link LSA(LSA Type 8)

  • 各个字段解释
    • Rtr Pri:路由器在该链路的优先级,用于选举 DR
    • Option:提供给 LSA Type 2 的可选项
    • Link Local Interface Address:路由器接口上配置的 Link-Local 地址(Link-Local 只出现在 LSA Type 8 中)
    • Prefix:LSA 携带了多少 IPv6 地址前缀
  • 仅在本链路上传播
  • 通过该 LSA 进行 DR/BDR 选举
  • 向本链路上的其他路由器提供本链路的 Link-Local 地址,作为下一跳地址;并通告本链路上的 IPv6 地址前缀,使其与本链路相关联
  • 允许路由器在该类型 LSA 中插入其他可选项,与本链路产生的 LSA Type 2 相关联

image.png
image.png

7)Intra-Area-Prefix LSA(LSA Type 9)

OSPFv3 由 Prefix-length,Prefix Option,Prefix 表示前缀信息

  • 为什么引入 Intra-Area-Prefix-LSA?
    • OSPFv2 中,依附于路由器和 Stub 网络的 Subnet 出现在 Router LSA 中,依附于 Transit 网络的 Subnet 出现在 Network-LSA 中
    • OSPFv3 中,Router-LSA 和 Network-LSA 不再包含地址信息,所以引入 Intra-Area-Prefix-LSA
  • 区域内泛洪
  • 每台路由器或 Transit 网络可以产生多个 Intra-Area-Prefix-LSA
  • Referenced LS type:表明这个 LSA 是参考一个 LSA Type 1,还是一个 LSA Type 2
    • Type=0x2001:表示参考一个 LSA Type 1
    • Type=0x2002:表示参考一个 LSA Type 2
  • Referenced Link State ID:
    • 当这个 LSA 是参考一个 LSA Type 1 时,设置为 0
    • 当这个 LSA 是参考一个 LSA Type 2 时,设置为该链路的 DR 的 Interface ID
  • Referenced Advertising Router:
    • 当这个 LSA 是参考一个 LSA Type 1 时,设置为该路由器的 Router ID
    • 当这个 LSA 是参考一个 LSA Type 2 时,设置为该链路 DR 的 Router ID
  • Intra-Area-Prefix-LSA 携带区域内 IPv6 Prefix 信息
    • 依附于路由器的 Prefix(LSA Type 1)
    • 依附于 Stub 网络的 Prefix(LSA Type 2)
    • 依附于 Transit 网络的 Prefix(LSA Type 1)

image.png
Prefix Option 的前缀表示方法:

  • P=1:传播位,表示 NSSA 区域的前缀要被ABR传播出去
  • MC=1:组播位,这个前缀应该纳入组播计算
  • LA=1:本地地址位,这个前缀是路由器的一个接口地址
  • NU=1:这个前缀不会纳入 IPv6 单播计算

image.png
image.png