「OSPFv3」- 报文格式

  CREATED BY JENKINSBOT

协议编号

OSPFv3 与 OSPFv2 使用相同的协议号 89;
1)OSPFv2:IPv4 报文头部中的协议号(Protocol)为 89;
2)OSPFv3:IPv6 报文头部中的下一报头号(Next Header)为 89;

组播地址

OSPFv3 与 OSPFv2 类似,使用组播地址作为 OSPF 报文目的地址;
1)OSPFv2 使用 IPv4 组播地址: OSPF IGP Routers:224.0.0.5;OSPF IGP DR :224.0.0.6;
2)OSPFv3 使用 IPv6 组播地址:OSPF IGP Routers:FF02::5;OSPF IGP DR:FF02::6;

报文类别

OSPFv3 与 OSPFv2 有相同类型的报文:
1)Hello 报文:周期性发送,用来发现、建立和维持 OSPFv3 邻居关系;
2)DD 报文:描述了本地 LSDB 的摘要信息,用于两台设备进行数据库同步;
3)LSR 报文:用于向对方请求所需的 LSA。设备只有在 OSPFv3 邻居双方成功交换 DD 报文后,才会向对方发出 LSR 报文;
4)LSU 报文:向对方发送其所需的 LSA;
5)LSAck 报文:用来对收到的 LSA 进行确认;

变化点:
1)Instance ID:1 Byte,缺省值为 0。允许在一个链路上运行多个 OSPFv3 的实例。每个实例具有唯一的 Instance ID。Instance ID 只在本地链路上有意义;
2)OSPFv3 报文头部移除了所有的认证字段:OSPFv3 的认证可以使用 IPv6 的认证及安全处理,也可以通过 OSPFv3 自身机制来完成报文认证;

OSPFv3 Header

Version:1 Byte,版本,OSPF 的版本号。对于 OSPFv3 来说,其值为 3;
Type:1 Byte,类型,OSPFv3 报文的类型。有下面几种类型:
TYPE=1:Hello 报文
TYPE=2:DD 报文
TYPE=3:LSR 报文
TYPE=4:LSU 报文
TYPE=5:LSAck 报文
Packet length:2 Byte,OSPFv3 报文的总长度,包括报文头在内,单位为字节;
Router ID:4 Byte,始发此报文的路由器的 Router ID;
Area ID:4 Byte,发送该报文的所属区域;
Checksum:2 Byte,使用 IPv6 标准 16 位校验和;
0:1 Byte,保留字段,必须填 0;

OSPFv3 Body : Hello

变化点:
与 OSPFv2 的 Hello 报文相比,OSPFv3 的 Hello 报文去掉了 Network Mask 字段,增加了 Interface ID 字段,用来标识发送该 Hello 报文的接口 ID;

Interface ID:4 Byte,唯一标识了建立连接的(发送 Hello 报文的)接口;

Rtr Pri:1 Byte,Router Priority,DR 优先级。默认为 1。如果设置为 0,则路由器不能参与 DR 或 BDR 的选举;

Options:3 Byte,可选项。扩展到 3 Byte,可选项。与 OSPFv2 相比,增加了 AT 位、R 位和 V6 位;
AT:1 bit,表示是否支持 OSPFv3 认证。若 AT=1,则在 OSPFv3 报文后增加认证尾部字段,包含认证信息;
DC:1 bit,表示是否具有支持按需电路的能力;
R:1 bit,指明始发路由器是否是一台有效的路由器。即指明始发路由器是否具备转发能力;
NP:1 bit,表示是否为 NSSA 区域;
MC:1 bit,表示是否支持转发组播数据报文;
E:1 bit,表示是否支持外部路由;
V6:1 bit,表示是否参与 IPv6 路由计算。如果该位为 0,表示该路由器或链路不参与 IPv6 路由计算;

HelloInterval:2 Byte,发送 Hello 报文的时间间隔;
RouterDeadInterval :2 Byte,失效时间。如果在此时间内未收到邻居发来的 Hello 报文,则认为邻居失效;
Designated Router ID:4 Byte,DR 的 Router ID;
Backup Designated Router ID :4 Byte,BDR 的 Router ID;
Neighbor ID:4 Byte,邻居,以 Router ID 标识;
说明:DD 报文、LSR 报文、LSU 报文和 LSAck 报文格式与 OSPFv2 相比变化不大,本课程不再赘述;

OSPFv3 Body : LSU : LSA : Header

与 OSPFv2 的 LSA 头部相比,OSPFv3 的 LSA 头部去掉了 Options 字段,并扩充了 LS Type 字段;

OSPFv3 同样使用 LS Type、Link State ID 和 Advertising Router 三元组唯一地标识一个 LSA;

变化点:
LS Type:扩展到 2 Byte,Link State Type,链路状态类型;
U:1 bit,标识对未知 LSA 的处理方法;
S2/S1:2 bit,标识 LSA 的泛洪范围;
LSA Function Code:13 bit,LSA 功能代码,标识了 LSA 的类型;

LS Age:2 Byte,LSA 产生后所经过的时间,以秒为单位。无论 LSA 是在链路上传送,还是保存在 LSDB 中,其值都会在不停的增长;
LS Type:2 Byte,LSA 的类型。该字段的高 3 位标识 LSA 的通用属性,剩下的比特位标识 LSA 的特定功能;
1)U 位标识了对未知 LSA 的处理方法,即标识了不识别 LSA 功能代码的路由器应如何处理 LSA;
—- U=0:把此 LSA 当作具有链路本地泛洪范围来对待,从而只能泛洪到本地链路上;
—- U=1:把此 LSA 当作类型已知的 LSA 来处理,也就是存储下来并泛洪出去;
2)S2/S1 位标识了 LSA 的泛洪范围;
—- S2 S1=0 0:链路本地范围内,即只在始发链路上泛洪;
—- S2 S1=0 1:区域范围内,即泛洪到始发区域内的所有路由器;
—- S2 S1=1 0:AS 范围内,即泛洪到本 AS 的所有路由器;
—- S2 S1=1 1:预留;

Link State ID:4 Byte,本地 32 位标识符,与 IPv6 地址无关,与 LSA 中的 LS Type 和 Advertising Router 一起在路由域中描述一个 LSA。OSPFv3 与 OSPFv2 相比,Link State ID 不再包含地址信息;
Advertising Router:4 Byte,产生此 LSA 的路由器的 Router ID;
LS Sequence Number:4 Byte,LSA 的序列号。其他路由器根据这个值可以判断哪个 LSA 是最新的;
LS Checksum:2 Byte,除了 LS Age 外其它各域的校验和;
Length:2 Byte,LSA 的总长度,包括 LSA Header,以字节为单位;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE

OSPFv3 与 OSPFv2 相比,具有类似的 LSA 名称,但是功能略有区别;
OSPFv3 新增了两类 LSA,包括:链路 LSA 和区域内前缀 LSA;

TYPE NAME DESC
0x2001 Router-LSA(路由器 LSA) 与 OSPFv2/Route-LSA 作用类似,但不再描述地址信息,仅描述拓扑结构
0x2002 Network-LSA(网络 LSA) 与 OSPFv2/Network-LSA 作用类似,但不再描述地址信息,仅描述拓扑结构
0x2003 Inter-Area-Prefix-LSA(区域间前缀 LSA) 与 OSPFv2/Network-Summary-LSA 相比,作用类似,名称不同
0x2004 Inter-Area-Router LSA(区域间路由器 LSA) 与 OSPFv2/ASBR-Summary-LSA 相比,作用类似,名称不同
0x2005 AS-External-LSA(AS 外部 LSA) 与 OSPFv2 相比,作用与名称完全相同
0x2007 NSSA LSA(非完全末梢区域 LSA) 与 OSPFv2 相比,作用与名称完全相同
0x2008 Link-LSA(链路 LSA) OSPFv3 新增
0x2009 Intra-Area-Prefix-LSA(区域内前缀 LSA) OSPFv3 新增

如表中所示,OSPFv3 的 LS Type 字段,U 位缺省为 0;除 Type5 和 Type8 的 LSA 外,其余的 LSA 泛洪范围都是区域范围内(S2 S1=0 1);
1)链路本地范围。LSA 仅在本地链路上泛洪,包括:Link-LSA;
2)区域范围。LSA 在单个 OSPF 区域内泛洪,包括:Router-LSA、Network-LSA、Inter-Area-Prefix-LSA、Inter-Area-Router-LSA、NSSA LSA 和 Intra-Area-Prefix-LSA;
3)AS 范围。LSA 在整个路由域(自治系统)中扩散,包括:AS-External-LSA;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 1 (Router-LSA)

在 OSPFv2 中,通过 Link Type、Link ID 以及 Link Data 来描述一个接口信息;

在 OSPFv3 中,设备会为每个运行 OSPFv3 接口所在的区域产生一个 LSA,描述了设备的链路状态(Link Type、Interface ID、Neighbor Interface ID 和 Neighbor Router ID )和开销,在所属的区域内传播;

重要字段介绍:
Link Type:1 Byte,链路类型;
Interface ID:4 Byte,接口 ID;
Neighbor Interface ID:4 Byte,邻居的接口 ID;
Neighbor Router ID:4 Byte,邻居的路由器 ID;

OSPFv3 的 Router-LSA 字段解释:
W:Wild-Card Receiver,值为 1 时,表示该路由器支持组播路由;
V:Virtual Link,值为 1 时,表示产生此 LSA 的路由器是虚连接的一端;
E:External,值为 1 时,表示产生此 LSA 的路由器是 ASBR;
B:Border,值为 1 时,表示产生此 LSA 的路由器是 ABR;

Options:3 Byte,可选项;
DC:1 bit,表示是否具有支持按需电路的能力;
R:1 bit,指明始发路由器是否是一台有效的路由器;
NP:1 bit,表示是否为 NSSA 区域;
MC:1 bit,表示是否支持转发组播数据报文;
E:1 bit,表示是否支持外部路由;
V6:1 bit,表示是否参与 IPv6 路由计算。如果该位为 0,表示该路由器或链路不参与 IPv6 路由计算;

Link Type:1 Byte,链路类型;
1:点到点连接到另一台路由器;
2:连接到一个传送网络(Transit Network);
3:保留;
4:虚链路;

Metric:2 Byte,流量出接口的开销值;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 2 (Network-LSA)

与 OSPFv2 相比,OSPFv3 的 Network-LSA 删除了网络掩码字段,仅用相连的路由器的 Router ID 来描述本网段的链路状态,由 DR 产生,在所属的区域内传播;

OSPFv3 的 Network-LSA 字段解释:
Attached Router:4 Byte,相连的路由器,指连接在同一个网段上的所有路由器的 Router ID,也包括 DR 的 Router ID;
Options:与 Router-LSA 中的 Options 字段相同;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 3 (Inter-Area-Prefix-LSA)

与 OSPFv2 类似,由 ABR 产生,描述区域内某个 IPv6 地址前缀的路由,并通告给其他相关区域。每个 IPv6 地址前缀,ABR 都会单独发送一个 Type3 的 LSA;

重要字段介绍(描述前缀的三元组)

PrefixLength:1 Byte,前缀的比特数;

PrefixOptions:1 Byte,表示这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。由 LSA 公告的每个前缀都拥有一个自己的 PrefixOptions 字段;

PrefixOptions 字段格式如下:
P:1 bit,传播位。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位;
MC:1 bit,组播位;如果设置为 1,则这个前缀应该纳入组播计算中,否则不纳入组播计算;
LA:1 bit,本地地址位;本地地址位。如果设置为 1,则这个前缀是路由器的一个接口地址;
NU:1 bit,非单播位;如果设置为 1,则这个前缀不会纳入 IPv6 单播路由计算中;

Address Prefix:变长,IPv6 地址前缀;

其他字段

Metric:3 Byte,到目的地址的开销值;

注意事项

缺省路由的前缀长度为 0。ABR 也能够始发一个区域间 Type3 的 LSA 向一个末梢区域通告一条缺省路由;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 4 (Inter-Area-Router-LSA)

与 OSPFv2 类似,由 ABR 产生,描述到 ASBR 的路由,通告给除 ASBR 所在区域的其他相关区域。对于所描述的每一个 ASBR,ABR 都会单独发送一个 Type4 的 LSA ;

重要字段介绍:
Destination Router ID:4 Byte,LSA 中描述的目的路由器的 Router ID,即 ASBR 的 Router ID;
Options:Options 字段描述的不是源路由器的能力,而是目的路由器所支持的能力,所以此字段值应该等于目的路由器的 Router-LSA 的 Options 字段值;
Metric:3 Byte,到目的地址的开销值;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 5 (AS-External-LSA)

与 OSPFv2 类似,由 ASBR 产生,描述到达 AS 外部的一个前缀的路由,通告到所有的区域(除了 Stub 区域和 NSSA 区域);

字段解释:

E:1 bit,外部路由的 Metric 类型;
如果设置为 1,表示此为 2 类外部路由,其 Metric 不随着路由的传递而增长;
如果设置为 0,表示此为 1 类外部路由,其 Metric 随着路由的传递而增长;

F:1 bit,如果设置为 1,则表示后面的 Forwarding Address 可选字段存在;

T:1 bit,如果设置为 1,则表示后面的 External Route Tag 可选字段存在;

Metric:3 Byte,到目的地址的开销值;

PrefixLength、PrefixOptions 和 Address Prefix 为描述前缀的三元组,与 Inter-Area-Prefix-LSA 中该字段含义相同;

Forwarding Address:4 Byte,可选的 128 位 IPv6 地址,当前面的 F 位为 1 时存在。表示到达目的的数据应该转发到这个地址;

External Route Tag:4 Byte,可选的标记位。可以用于 ASBR 之间的通信。一个比较常见的例子是:在 OSPF 自治系统的两个边界路由器上进行路由引入时,通过对引入的路由进行标记,可以很方便地进行路由过滤;

Referenced Link State ID:4 Byte,若 Referenced LS Type 不为 0,则该字段存在,表示引用链路状态 ID;

Referenced LS Type:2 Byte,引用链路状态类型,表明这个 LSA 是否需要参考其他 LSA;
0:不参考
1:参考 Router-LSA
2:参考 Network-LSA

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 8 (Link-LSA)

每个设备都会为每个链路产生一个 Link-LSA,仅在始发链路内泛洪;

Link-LSA 作用:
向该链路上其他路由器通告本接口的链路本地地址;
向该链路上其他路由器通告本接口的 IPv6 前缀列表;
向该链路上其他路由器通告本链路始发的 Network-LSA 中设置的可选项;

重要字段介绍:
Link-Local Interface Address:16 Byte,路由器与该链路相连的接口上配置的链路本地地址(该地址只出现在 Link-LSA 中);
Rtr Pri:1 Byte,该路由器在该链路上的优先级(Router Priority);
Options:3 Byte,提供给 Network-LSA 的 Options;
Number of Prefixes:4 Byte,该 LSA 中携带的 IPv6 地址前缀个数;
PrefixLength、PrefixOptions 和 Address Prefix 为描述前缀的三元组,与 Inter-Area-Prefix-LSA 中该字段含义相同;

OSPFv3 Body : LSU : LSA : Body : LSA TYPE 9 (Intra-Area-Prefix-LSA)

在 OSPFv2 中,可以通过 Type1 和 Type2 的 LSA 来描述拓扑信息和网段信息;而 OSPFv3 的此两类 LSA 仅包含拓扑信息,那 OSPFv3 如何描述网段信息呢?
Type9 LSA 描述的是网段信息,只在所属的区域内传播,它需要依赖于拓扑信息,才能实现 OSPFv3 的路由计算。其类型可以分为两种:
每台设备均产生描述与 Router-LSA 相关联的 IPv6 前缀地址的 Type9 LSA;
DR 会产生描述与 Network-LSA 相关联的 IPv6 前缀地址的 Type9 LSA;

Number of Prefixes:4 Byte,该 LSA 中携带的 IPv6 地址前缀个数。必要的话,可以通过多个 Intra-Area-Prefix-LSA 来携带前缀,这样可以控制 LSA 的长度;

Referenced LS type:4 Byte,表明这个 LSA 是参考一个 Router-LSA,还是一个 Network-LSA;
1)取值 1:表示参考一个 Router-LSA
2)取值 2:表示参考一个 Network-LSA;

Referenced Link State ID:4 Byte;
1)设为 0:当这个 LSA 是参考一个 Router-LSA 时;
2)设为该链路的 DR 的 Interface ID:当这个 LSA 是参考一个 Network-LSA 时;

Referenced Advertising Router:4 Byte;
1)设为这个路由器的 Router ID:当这个 LSA 是参考一个 Router-LSA 时;
2)设为该链路的 DR 的 Router ID:当这个 LSA 是参考一个 Network-LSA 时;

PrefixLength、PrefixOptions 和 Address Prefix 为描述前缀的三元组,与 Inter-Area-Prefix-LSA 中该字段含义相同;

Metric:2 Byte,前缀开销值。与 Router-LSA 的接口开销值相同单位;

在 OSPFv3 中,当一条链路或它的前缀发生变化时,相连的路由器会发送一个 Intra-Area-Prefix-LSA。但是,这条 LSA 不会触发 SPF 计算;

LSA Structure

[R2]display ospfv3 lsdb
      * indicates STALE LSA

           OSPFv3 Router with ID (10.1.2.2) (Process 1)
// ---------------------------------------------------------------------------- // TYPE 8 LSA

               Link-LSA (Interface GigabitEthernet0/0/0)
Link State ID   Origin Router    Age   Seq#            CkSum  Prefix
0.0.0.3	   10.1.2.2            0080  0x80000002 0x1c52      1
0.0.0.4	   10.1.3.3            0075  0x80000002 0x2a59      1
0.0.0.5	   10.1.4.4            0089  0x80000002 0xe2a3      1
// ---------------------------------------------------------------------------- // TYPE 8 LSA

               Link-LSA (Interface GigabitEthernet0/0/1)
Link State ID   Origin Router    Age   Seq#            CkSum  Prefix
0.0.0.4         	   10.1.1.1            0070  0x80000002 0xe971      1
0.0.0.4         	   10.1.2.2            0069  0x80000002 0x9fdd       1

               Router-LSA (Area 0.0.0.0)
……
               Network-LSA (Area 0.0.0.0)
Link State ID   Origin Router    Age   Seq#            CkSum
0.0.0.4             10.1.2.2            0030  0x80000001 0x9564
0.0.0.5             10.1.4.4            0036  0x80000002 0xc810

               Intra-Area-Prefix-LSA (Area 0.0.0.0)
Link State ID   Origin Router    Age   Seq#            CkSum  Prefix Reference
0.0.0.1         	   10.1.2.2            0028  0x80000006 0x1527      1   Network-LSA
0.0.0.1         	   10.1.4.4            0034  0x80000003 0xfc28       1   Network-LSA
[R2]display ospfv3 lsdb
      * indicates STALE LSA

           OSPFv3 Router with ID (10.1.2.2) (Process 1)

               Link-LSA (Interface GigabitEthernet0/0/0)
Link State ID   Origin Router    Age   Seq#            CkSum  Prefix
0.0.0.3	   10.1.2.2            0080  0x80000002 0x1c52      1
0.0.0.4	   10.1.3.3            0075  0x80000002 0x2a59      1
0.0.0.5	   10.1.4.4            0089  0x80000002 0xe2a3      1

               Link-LSA (Interface GigabitEthernet0/0/1)
Link State ID   Origin Router    Age   Seq#            CkSum  Prefix
0.0.0.4         	   10.1.1.1            0070  0x80000002 0xe971      1
0.0.0.4         	   10.1.2.2            0069  0x80000002 0x9fdd       1

               Router-LSA (Area 0.0.0.0)
……
               Network-LSA (Area 0.0.0.0)
Link State ID   Origin Router    Age   Seq#            CkSum
0.0.0.4             10.1.2.2            0030  0x80000001 0x9564
0.0.0.5             10.1.4.4            0036  0x80000002 0xc810
// ---------------------------------------------------------------------------- // TYPE 9 LSA

               Intra-Area-Prefix-LSA (Area 0.0.0.0)
Link State ID   Origin Router    Age   Seq#            CkSum  Prefix Reference
0.0.0.1         	   10.1.2.2            0028  0x80000006 0x1527      1   Network-LSA
0.0.0.1         	   10.1.4.4            0034  0x80000003 0xfc28       1   Network-LSA

Link-LSA Detail

[R2]display ospfv3 lsdb link 0.0.0.5

           OSPFv3 Router with ID (10.1.2.2) (Process 1)

               Link-LSA (Interface GigabitEthernet0/0/0)

  LS Age: 446
  LS Type: Link-LSA
  Link State ID: 0.0.0.5 
  Originating Router: 10.1.4.4
  LS Seq Number: 0x80000002
  Retransmit Count: 0
  Checksum: 0xE2A3
  Length: 56
  Priority: 1
  Options: 0x000013 (-|R|-|-|E|V6)
  Link-Local Address: FE80::2E0:FCFF:FEAC:6C5 // ------------------------------ // 链路本地地址
  Number of Prefixes: 1

   Prefix: 2001:DB8:2345:23::/64 // ------------------------------------------- // 直连网段的 IPv6 地址前缀
    Prefix Options: 0 (-|-|-|-|-)

输出信息解释:
LS age:LSA 的老化时间。
LS Type:LSA 的类型,包括:Router-LSA、Network-LSA、Inter-Area-Prefix-LSA、Inter-Area-Router-LSA、AS-external-LSA、NSSA-LSA、Link-LSA、Intra-Area-Prefix-LSA。
Link State ID:LSA 报文头中的链路状态 ID。
Originating Router:产生 LSA 的路由器。
LS Seq Number:LSA 序列号(来自 LSA 报头)。
Checksum:LSA 的校验和。
Length:LSA 的长度。
Priority:该 Link 对应接口的优先级。
Options:该 Link 的 Option 值。
Link-Local Address:链路本地地址。
Number of Prefixes:该 LSA 中包含的 IPv6 前缀数目。
Prefix:IPv6 前缀。
Prefix Options:前缀 Option 值。

Intra-Area-Prefix-LSA Detail

[R2]display ospfv3 lsdb intra-prefix 

           OSPFv3 Router with ID (10.1.2.2) (Process 1)

               Intra-Area-Prefix-LSA (Area 0.0.0.0)
……

  LS Age: 556
  LS Type: Intra-Area-Prefix-LSA
  Link State ID: 0.0.0.1 
  Originating Router: 10.1.4.4
  LS Seq Number: 0x80000003
  Retransmit Count: 0
  Checksum: 0xFC28
  Length: 44
  Number of Prefixes: 1
  
  // -------------------------------------------------------------------------- // 参考由DR(R4)产生的Network-LSA

  Referenced LS Type: 0x2002
  Referenced Link State ID: 0.0.0.5
  Referenced Originating Router: 10.1.4.4

   Prefix: 2001:DB8:2345:23::/64 // ------------------------------------------- // 由DR产生,路由器直接相连的传输网段的IPv6地址前缀
    Prefix Options: 0 (-|-|-|-|-)
      Metric: 0