Skip to main content

OSPFv3报文格式

OSPFv3报文头格式 OSPFv3分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。OSPFv3这五种报文具有相同的报文头格式,长度为24B。

  • OSPFv3 Hello Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。

  • OSPFv3 DD 两台路由器在邻接关系初始化时,用DD报文(Database Description Packet)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。

  • OSPFv3 LSR 两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。

  • OSPFv3 LSU LSU报文用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。

  • OSPFv3 LSAck OSPFv3 LSAck报文用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。

协议栈结构

OSPFv3用IPv6报文直接封装协议报文,协议号为89,在IPv6 Next Header里标识。

OSPFv3协议栈结构
+-------------------------------------+
|                OSPFv3               |
+-------------------------------------+
|     IPv6 Header Next Header = 89    |
+-------------------------------------+
|          L2   Type = 0x86dd         |
+-------------------------------------+
|                  L1                 |
+-------------------------------------+

OSPFv3报文头格式

OSPFv3分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。OSPFv3这五种报文具有相同的报文头格式,长度为24B。

OSPFv3报文头格式
+0-------7-------15---------23------------31
|Version | Type  |      Packet length      |
+-------------------------------------------
|               Router ID                  |
+-------------------------------------------
|                Area ID                   |
+-------------------------------------------
|    Checksum    |Instance ID|     0       |
+------------------------------------------+
OSPFv3 头部字段含义
字段 Length 含义
Version 1B 版本,OSPF的版本号。对于OSPFv3来说,其值为3。
Type 1B 类型,OSPFv3报文的类型,有下面几种类型: 1:Hello报文;2:DD报文;3:LSR报文;4:LSU报文;5:LSAck报文。
Packet length 2B OSPFv3报文的总长度,包括报文头在内,单位为字节。
Router ID 4B 始发此包的路由器的Router ID。
Area ID 4B 发送该报文的所属区域。
Checksum 2B 使用IPv6标准16位校验和。校验内容包括前导的IPv6伪头和OSPF协议包头。伪头中的Upper-Layer Packet Length字段值等于OSPF包头中的Packet length字段值。如果包长度不是16位的整数倍,则用0填充后进行计算。计算校验和时校验和字段本身设置为0。
Instance ID 1B 缺省值为0。允许在一个链路上运行多个OSPFv3的实例。每个实例应该具有唯一的Instance ID。Instance ID只在本地链路上有意义。如果接收到的OSPF包的Instance ID和本接口的Instance ID不同,则丢弃这个包。
0 1B 保留字段,必须填0。

OSPFv3 Hello

Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。

OSPFv3 Hello报文格式
+0--------7-------15---------23------------31----------------
|Version=3| Type=1|      Packet length      |         |
+--------------------------------------------         |
|                Router ID                  |         |
+--------------------------------------------  General Header
|                 Area ID                   |         |
+--------------------------------------------         |
|    Checksum     |Instance ID|     0       |         |
+------------------------------------------------------------
|                 Interface ID              |
+--------------------------------------------
| Rtr Pri |             Options             |
+--------------------------------------------
|  HelloInterval  |   RouterDeadInterval    |
+--------------------------------------------
|             Designated Router ID          |
+--------------------------------------------
|         Backup Designated Router ID       |
+--------------------------------------------
|                 Neighbor ID               |
+--------------------------------------------
|                     ...                  |
+-------------------------------------------+
OSPFv3 Hello 报文字段含义
字段 长度 含义
Interface ID 32bit 唯一标识了建立连接的(发送Hello报文的)接口。
Rtr Pri 8bit DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。
Options 24bit 可选项: E:允许Flood AS-External-LSAs MC:转发IP组播报文 N/P:处理Type-7 LSAsDC:处理按需链路,详见Options字段,E & N/P 可以看出该路由器区域类型。
Hello Interval 16bit 发送Hello报文的时间间隔。
Router Dead Interval 16bit 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。
Designated Router ID 32bit DR的Router ID。
Backup Designated Router ID 32bit BDR的Router ID。
Neighbor ID 32bit 邻居,以Router ID标识。

OSPFv3 DD

两台路由器在邻接关系初始化时,用DD报文(Database Description Packet)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。

OSPFv3 DD报文格式
+0--------7-------15---------23------------31----------------
|Version=3| Type=2|      Packet length      |         |
+--------------------------------------------         |
|                Router ID                  |         |
+--------------------------------------------  General Header
|                 Area ID                   |         |
+--------------------------------------------         |
|    Checksum     |Instance ID|     0       |         |
+------------------------------------------------------------
|    0    |              Options            |
+--------------------------------------------
| Interface MTU   |  0        |00000|I|M|M/S|
+--------------------------------------------
|               DD Sequence Number          |
+--------------------------------------------
|                  LSA Header               |
+--------------------------------------------
|                     ...                  |
+-------------------------------------------+
OSPFv3 DD报文字段含义
字段 长度 含义
Options 24bit 可选项:E:允许Flood AS-External-LSAs;MC:转发IP组播报文;N/P:处理Type-7 LSAs;DC:处理按需链路。详见Options字段
Interface MTU 16bit 在不分片的情况下,此接口最大可发出的IP报文长度。
I 1bit 当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。
M (More) 1bit 当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。
M/S (Master/Slave) 1bit 当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
DD sequence number 32bit DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
LSA Header 可变 该DD报文中所包含的LSA的头部信息。

OSPFv3 LSR

两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。

OSPFv3 LSR报文格式
+0--------7-------15---------23------------31----------------
|Version=3| Type=3|      Packet length      |         |
+--------------------------------------------         |
|                Router ID                  |         |
+--------------------------------------------  General Header
|                 Area ID                   |         |
+--------------------------------------------         |
|    Checksum     |Instance ID|     0       |         |
+------------------------------------------------------------
|    0            |        LS type          |
+--------------------------------------------
| Interface MTU   |  0        |00000|I|M|M/S|
+--------------------------------------------
|                Link State ID              |
+--------------------------------------------
|               Advertising Router          |
+--------------------------------------------
|                     ...                  |
+-------------------------------------------+
OSPFv3 LSR报文字段含义
字段 长度 含义
LS type 16bits LSA的类型号。
Interface MTU 16bits 在不分片的情况下,此接口最大可发出的IP报文长度。
Link State ID 32bits 根据LSA中的LS Type和LSA description在路由域中描述一个LSA。
Advertising Router 32bits 产生此LSA的路由器的Router ID。

OSPFv3 LSU

LSU报文用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。

LSU 头部格式

OSPFv3 LSU 报文格式
+0--------7-------15---------23------------31
|Version=3| Type=4|      Packet length      |
+--------------------------------------------
|                Router ID                  |
+--------------------------------------------
|                 Area ID                   |
+--------------------------------------------
|    Checksum     |Instance ID|     0       |
+--------------------------------------------
|                 # LSAs                    |
+--------------------------------------------
|                  LSAs                     |
+--------------------------------------------
|                   ...                     |
+-------------------------------------------+
OSPFv3 LSU报文字段含义
字段 长度 含义
Version 1B 版本,OSPF的版本号。对于OSPFv3来说,其值为3。
Type 1B 类型,OSPFv3报文的类型,有下面几种类型: 1:Hello报文;2:DD报文;3:LSR报文;4:LSU报文;5:LSAck报文。
Packet length 2B OSPFv3报文的总长度,包括报文头在内,单位为B。
Router ID 4B 始发此包的路由器的Router ID。
Area ID 4B 发送该报文的所属区域。
Checksum 2B 使用IPv6标准16位校验和。校验内容包括前导的IPv6伪头和OSPF协议包头。伪头中的Upper-Layer Packet Length字段值等于OSPF包头中的Packet length字段值。如果包长度不是16位的整数倍,则用0填充后进行计算。计算校验和时校验和字段本身设置为0。
Instance ID 1B 缺省值为0。允许在一个链路上运行多个OSPFv3的实例。每个实例应该具有唯一的Instance ID。Instance ID只在本地链路上有意义。如果接收到的OSPF包的Instance ID和本接口的Instance ID不同,则丢弃这个包。
0 1B 保留字段,必须填0。
#LSAs 4B LSA的数量。

LSA 头部结构

OSPFv3常用的LSA共有7种,分别为:

  • Router-LSA(Type1)

  • Network-LSA(Type2)

  • Inter-Area-Prefix-LSA(Type3)

  • Inter-Area-Router-LSA(Type4)

  • AS-external-LSA(Type5)

  • Link-LSA(Type8)

  • Intra-Area-Prefix-LSA(Type9)

LSA 头部结构
+0----------------15---------23------------31
|       LS age    |         LS type         |
+--------------------------------------------
|                Link State ID              |
+--------------------------------------------
|              Advertising Router           |
+--------------------------------------------
|              LS sequence number           |
+--------------------------------------------
|   LS Checksum   |          Length         |
+--------------------------------------------
OSPFv3 LSA头部字段含义
字段 长度 含义
LS age 16bit LSA产生后所经过的时间,以秒为单位。无论LSA是在链路上传送,还是保存在LSDB中,其值都会在不停的增长。
LS type 16bit LSA的类型,标识了LSA的功能。该字段的高3位标识LSA的通用属性,剩下的比特位标识LSA的特定功能。详见LS Type
Link State ID 32bit 与LSA中的LS Type和Advertising Router一起在路由域中描述一个LSA。
Advertising Router 32bit 产生此LSA的路由器的Router ID。
LS sequence number 32bit LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。
LS checksum 16bit 除了LS age外其它各域的校验和。
length 16bit LSA的总长度,包括LSA Header,以B为单位。

Router-LSA

Router-LSA(Type1):每个路由器都会产生,描述了路由器的链路状态和花费,在所属的区域内传播。

Router-LSA格式
+0--------7-------15-----------------------31----------
|       LS age    |0|0|1|         1         |
+-------------------------------------------+
|                Link State ID              |
+-------------------------------------------+
|              Advertising Router           |LSA Header
+-------------------------------------------+
|             LS sequence number            |
+-------------------------------------------+
|   LS checksum   |          Length         |
+-------------------------------------------+----------
| 0| |W|V|E|B|            Options           |
+-------------------------------------------+
|    Type    |  0 |          metric         |
+-------------------------------------------+
|                Interface ID               |
+-------------------------------------------+
|            Neighbor Interface ID          |
+-------------------------------------------+
|              Neighbor Router ID           |
+-------------------------------------------+
|                     ...                  |
+-------------------------------------------+
|    Type    |  0 |          Metric         |
+-------------------------------------------+
|                Interface ID               |
+-------------------------------------------+
|            Neighbor Interface ID          |
+-------------------------------------------+
|              Neighbor Router ID           |
+-------------------------------------------+
|                     ...                  |
+-------------------------------------------+
OSPFv3 Router-LSA字段含义

Network-LSA

Network-LSA(Type2):由广播网或NBMA网络中的DR产生,Network-LSA中记录了这一网络上所有路由器的Router ID,描述本网段的链路状态,在所属的区域内传播。

Network-LSA格式
+0--------7-------15-----------------------31----------
| LS age |0|0|1| 2 |
+-------------------------------------------+
| Link State ID |
+-------------------------------------------+
| Advertising Router |LSA Header
+-------------------------------------------+
| LS sequence number |
+-------------------------------------------+
| LS checksum | Length |
+-------------------------------------------+----------
| 0 | Options |
+-------------------------------------------+
| Attached Router |
+-------------------------------------------+
| ... |
+-------------------------------------------+
OSPFv3 Network-LSA字段含义
字段 长度 含义
Options 24bits 参见Options解释。
Attached Router 32bits 连接在同一个网络上的所有路由器的Router ID,也包括DR的Router ID。

Inter-Area-Prefix-LSA格式

OSPFv3该LSA与OSPFv2中的 Type 3 Summary-LSAs 等同。由区域边界路由器始发,这些LSA描述了到其他区域的IPv6地址前缀。每个IPv6地址前缀单独发一个Inter-Area-Prefix-LSA。

Inter-Area-Prefix-LSA格式
+0-----------7-------------15----------------31----------
| LS age |0|0|1| 3 |
+---------------------------------------------+
| Link State ID |
+---------------------------------------------+
| Advertising Router |LSA Header
+---------------------------------------------+
| LS sequence number |
+---------------------------------------------+
| LS checksum | Length |
+---------------------------------------------+----------
| 0 | Metric |
+---------------------------------------------+
|PrefixLength|PrefixOptions| (0) |
+---------------------------------------------+
| Address Prefix |
+---------------------------------------------+
| ... |
+---------------------------------------------+
OSPFv3 Inter-Area-Prefix-LSA字段含义
字段 长度 描述
metric 24 bits 到目的地址的开销值。
PrefixLength 8 bits 前缀的bit数。
PrefixOptions 8 bits 用来表达这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。例如希望在特定情况下忽略一个前缀的计算。 由LSA公告的每个前缀都拥有一个自己的PrefixOptions字段。详见Prefix Options
Address Prefix Variable IPv6地址前缀。缺省路由的前缀长度为0。

Inter-Area-Router-LSA格式

IPv6的这些LSA与IPv4的OSPFv2中的Type 4 summary-LSAs等同。由区域边界路由器始发,这些LSA描述了到其他区域的IPv6地址前缀。每个LSA描述了到某台路由器的一条路由。

Inter-Area-Prefix-LSA格式
+0-----------7-------------15----------------31----------
| LS age |0|0|1| 4 |
+---------------------------------------------+
| Link State ID |
+---------------------------------------------+
| Advertising Router |LSA Header
+---------------------------------------------+
| LS sequence number |
+---------------------------------------------+
| LS checksum | Length |
+---------------------------------------------+----------
| 0 | Options |
+---------------------------------------------+
| 0 | Metric |
+---------------------------------------------+
| Destination Router ID |
+---------------------------------------------+
OSPFv3 Inter-Area-Prefix-LSA字段含义
字段 长度 含义
Options 24bits Options字段描述的不是源路由器的能力,而是目的路由器所支持的能力,所以此字段值应该等于目的路由器的 router-LSA 的Options字段值。
metric 24bits 到目的地址的开销值。
Destination Router ID 32bits LSA中描述的目的路由器的Router ID。

AS-External-LSA

每个AS-external-LSA描述到达自治系统外部的一个前缀的路径。

AS-External-LSA格式
+0-----------7-------------15------23--------31----------
| LS age |0|0|1| 5 |
+---------------------------------------------+
| Link State ID |
+---------------------------------------------+
| Advertising Router |LSA Header
+---------------------------------------------+
| LS sequence number |
+---------------------------------------------+
| LS checksum | Length |
+---------------------------------------------+----------
| | E| F| T| Metric |
+---------------------------------------------+
|PrefixLength|PrefixOptions|Referenced LS type|
+---------------------------------------------+
| Address Prefix |
+---------------------------------------------+
| ... |
+---------------------------------------------+
| Forwarding Address(Optional) |
+---------------------------------------------+
| External Route Tag(Optional) |
+---------------------------------------------+
| Referenced Link State ID(Optional) |
+---------------------------------------------+
OSPFv3 AS-External-LSA字段含义
字段 长度 含义
E 1bit 外部路由的Metric类型。如果设置为1,表示此为2类外部路由,其Metric不随着路由的传递而增长。如果设置为0,表示此为1类外部路由,其Metric随着路由的传递而增长。
F 1bit 如果设置为1,则表示后面的Forwarding Address可选字段存在。
T 1bit 如果设置为1,则表示后面的External Route Tag可选字段存在。
metric 24bits 到目的地址的路由开销。
PrefixLength 8bits 前缀的比特数。
PrefixOptions 8bits 用来表达这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。例如希望在特定情况下忽略一个前缀的计算。 由LSA公告的每个前缀都拥有一个自己的PrefixOptions字段。详见Prefix Options
Referenced LS type 16bits 表明这个LSA是参考一个Router-LSA,还是一个Network-LSA。1表示参考一个router-LSA,2表示参考一个Network-LSA。
Address Prefix Variable IPv6地址前缀。
Forwarding Address 32bits 可选的128位Pv6地址。当前面的F位为1时存在。表示到达目的的数据应该转发到这个地址。在公告路由器不是最优的下一跳的时候可以使用。
External Route Tag 32bits 可选的标记位。可以用于ASBR之间的通信。一个比较常见的例子是,在OSPF自治系统的两个边界路由器上进行路由分发时,通过对引入的路由进行标记,可以很方便地进行路由过滤。
Referenced Link State ID 32bits 当设置了前面的Reference LS Type时存在。如果存在,说明此条外部路由有一些相关信息需要参考另外一个LSA。

作用:

+0-----------7-------------15------23--------31----------
| LS age |0|0|1| 8 |
+---------------------------------------------+
| Link State ID |
+---------------------------------------------+
| Advertising Router |LSA Header
+-------------------------- ------------------+
| LS sequence number |
+---------------------------------------------+
| LS checksum | Length |
+---------------------------------------------+----------
| Rtr Pri | OPtions |
+---------------------------------------------+
| Link-local Interface Address |
+---------------------------------------------+
| #prefixes |
+---------------------------------------------+
|PrefixLength|PrefixOptions | (0) |
+---------------------------------------------+
| Address Prefix |
+---------------------------------------------+
| ... |
+---------------------------------------------+
|PrefixLength|PrefixOptions | Mereic |
+---------------------------------------------+
| Address Prefix |
+---------------------------------------------+
| ... |
+---------------------------------------------+
字段 长度 含义
Rtr Pri 8 bits 该路由器在该链路上的优先级(Router Priority)。
Options 24bits 提供给Network LSA的Options。
Link-local Interface Address 128 bits 路由器与该链路相连的接口上配置的Link Local地址(Link Local地址只出现在Link LSA中)。
# prefixes 32 bits 该LSA中携带了多少IPv6地址Prefix。
PrefixLength 8 bits 前缀的比特数。
PrefixOptions 8 bits 用来表达这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。例如希望在特定情况下忽略一个前缀的计算。 由LSA公告的每个前缀都拥有一个自己的PrefixOptions字段。详见Prefix Options
Address Prefix Variable IPv6地址前缀。

Intra-Area-Prefix-LSA

Intra-Area-Prefix-LSA携带区域内IPv6 Prefix信息。

Intra-Area-Prefix-LSA格式
+0-----------7-------------15------23--------31----------
| LS age |0|0|1| 9 |
+---------------------------------------------+
| Link State ID |
+---------------------------------------------+
| Advertising Router |LSA Header
+-------------------------- ------------------+
| LS sequence number |
+---------------------------------------------+
| LS checksum | Length |
+---------------------------------------------+----------
| #prefixes |Referenced LS type|
+---------------------------------------------+
| Referenced Link State ID |
+---------------------------------------------+
| Referenced Advertising Router |
+---------------------------------------------+
|PrefixLength|PrefixOptions | Mereic |
+---------------------------------------------+
| Address Prefix |
+---------------------------------------------+
| ... |
+---------------------------------------------+
|PrefixLength|PrefixOptions | Mereic |
+---------------------------------------------+
| Address Prefix |
+---------------------------------------------+
| ... |
+---------------------------------------------+
OSPFv3 Intra-Area-Prefix-LSA字段含义
字段 长度 描述
# prefixes 16 bits 在LSA中包含的IPv6前缀数量。必要的话,可以通过多个intra-area-prefix-LSA来携带前缀,这样可以控制LSA的长度。
Referenced LS type 16 bits 表明这个LSA是参考一个Router-LSA,还是一个Network-LSA。1表示参考一个router-LSA,2表示参考一个Network-LSA。
Referenced Link State ID 32 bits 当这个LSA是参考一个Router-LSA时,设置为0。当这个LSA是参考一个Network-LSA时,设置为该链路的DR的Interface ID。
Referenced Advertising Router 32 bits 当这个LSA是参考一个Router-LSA时,设置为这个路由器的Router ID。当这个LSA是参考一个Network-LSA时,设置为该链路的DR的Router ID。
PrefixLength 8 bits 前缀的比特数。
PrefixOptions 8 bits 用来表达这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。例如希望在特定情况下忽略一个前缀的计算。 由LSA公告的每个前缀都拥有一个自己的PrefixOptions字段。详见Prefix Options
Metric 16 bits 前缀开销值。与Router-LSA的接口开销值相同单位。
Address Prefix Variable IPv6地址前缀。

OSPFv3 LSAck

OSPFv3 LSAck报文用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。

OSPFv3 LSAck 报文格式
+0--------7-------15---------23------------31
|Version=3| Type=5| Packet length |
+-------------------------------------------+
| Router ID |
+-------------------------------------------+
| Area ID |
+-------------------------------------------+
| Checksum |Instance ID| 0 |
+-------------------------------------------+
| LSA Headers |
+-------------------------------------------+
| ... |
+-------------------------------------------+
OSPFv3 OSPFv3 LSAck字段含义
字段 长度 含义
LSAs Headers 可变 通过LSA的头部信息确认收到该LSA。

Options

24 位 OSPF 选项字段出现在 OSPF Hello 数据包、DD和某些 LSA(Router-LSA、Network-LSA、inter-area-router-LSA 和Link-LSA)中。选项字段使 OSPF 路由器能够支持(或不支持)可选功能,并将其功能级别传达给其他 OSPF 路由器。通过这种机制,不同功能的路由器可以在一个 OSPF 路由域中混合使用。

OSPFv3 Options字段格式
                      1                     2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+
| | | | | | | | | | | | | | | | | |DC| R| N|MC| E|V6|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+--+--+--+--+--+
  • DC

    demand circuits bit

    当且仅当路由器可以正确处理 LSA 的 LS age 字段中出现的 DoNotAge 位的时候设置为1。

    当且仅当路由器想把相连的点到点电路当作按需电路时,它把Hello和DD包的DC位设置为1。

    在点到点按需电路上,两个端点设备都必须支持对Hello包的抑止,以便节省带宽资源。为了确保这一点,路由器在按需电路的接口发送的Hello包和Database Description包上把DC位设置为1。如果对方发送的DD包或返回的Hello包的DC位为0,说明对方不支持对Hello的抑止功能,所以路由器必须继续周期性地发送Hello包。 按需电路特性的支持只需要在两个端点之一配置即可。如果一个路由器实现了按需电路特性,但是没有配置,那么当它接收到设置了DC位的Hello包时,应该把这个点到点电路按照按需电路来对待,从而改变其相应进程。

    但是LSA中的DC位含义却有微妙的差别。设置LSA的DC位并不意味着路由器能够作为按需电路的一个端点,而是说明它能否正确处理设置了DoNotAge位的LSA。当且仅当路由器可以正确处理LSA的 LS age 字段中出现的DoNotAge 位的时候,它才把自己建立的LSA中的DC位设置为1。处于不同位置的Options字段会对协议运作产生不同的影响。某些选项的不匹配,会阻止邻接关系的形成,例如如果过Hello包的发送和接收,两个路由器发现E位不匹配,就不能形成邻居关系。某些选项的不匹配,会阻止特定类型的 LSA 的泛洪,例如如果通过DD包的交换,两个路由器发现彼此的MC位不匹配,那么组播路由使用的 Group-membership-LSA 就不能泛洪。某些选项如果不匹配,会使路由器不能被纳入某一种或多种路由的计算,例如如果路由器从LSA中发现某个路由器的MC位没有设置,那么在组播路由计算时它就不会考虑这个路由器。在发送Hello包、发送DD包和建立LSA时,路由器应该对Options字段中不认可的位进行清零。在接收Hello包、接收DD包和接收LSA时,路由器应该忽略OSPF Options字段中不认可的位,并且正常处理这个包或LSA。详见 [RFC1793]。

  • R

    ‘Router’ bit 设置为1,指出该公告者是否为活动路由器(active router)。如果该位清零,则说明该公告者并不能路由数据。所以经过该公告者的路由不能纳入路由计算。如果多宿主机希望分享 OSPF 路由信息,但又不希望转发数据时,可以使用之。详见 [RFC5340]。

  • N

    描述了路由器对Type-7 LSA的处理。当且仅当一个接口的所属区域为NSSA区域时设置为1。详见 [RFC3101]。

  • MC

    描述路由器是否运行了MOSPF。当且仅当路由器运行MOSPF时设置为1。详见 [RFC2328],现已经弃用。

  • E

    当且仅当所属区域为stub区域时设置为0。描述AS-external-LSA的泛洪方式。在Hello包中,当且仅当这个区域能够处理AS-external-LSA的时候,E位设置为1(例如在非stub区域中),否则为0。如果E位设置不正确,邻接关系就不能形成。在DD包中,当一个链路所属的区域是非stub区域时,E位设置为1,否则为0。而在LSA头中,E位表现了相应的LSA的特性——骨干区域的LSA、非stub区域的LSA和AS-external-LSA的E位都应该设置为1;而在stub区域的LSA中应该设置为0。LSA中的E位设置仅仅是为了发布信息,而不影响路由表计算。详见 [RFC2328]。

  • V6

    设置为1。表示这个路由器或链路是不是在路由IPv6。如果清零,这个路由器或链路不应该纳入IPv6路由计算。 所有未定义的位都应该清零。详见 RFC5340

其它选项可参见Open Shortest Path First v3 (OSPFv3) Parameters

LS Type

LSA的类型,标识了LSA的功能。该字段的高3位标识LSA的通用属性,剩下的比特位标识LSA的特定功能。LS Type字段的格式如下:

LS Type字段格式
                                1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|U |S2|S1| LSA Function Code |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  • U 比特位标识了对未知LSA的处理方法

    0:把此LSA当作具有链路本地泛洪范围来对待,从而只能泛洪到本地链路上。

    1:把此LSA当作类型已知的LSA来处理,也就是存储下来并泛洪出去。

  • S1和S2比特位标识了LSA的泛洪范围

OSPFv3 LSA 功能代码
S2 S1 功能
0 0 链路本地范围内,即只在始发链路上泛洪。
0 1 区域范围内,即泛洪到始发区域内的所有路由器。
1 0 AS范围内,即泛洪到本AS的所有路由器。
1 1 预留
  • LSA的功能代码定义如下

    • Type1: Router-LSA (LS Type = 0x2001)

    • Type2: Network-LSA (LS Type = 0x2002)

    • Type3: Inter-Area-Prefix-LSA (LS Type = 0x2003)

    • Type4: Inter-Area-Router-LSA (LS Type = 0x2004)

    • Type5: AS-external-LSA (LS Type = 0x4005)

    • Type8: Link-LSA (LS Type = 0x0008)

    • Type9: Intra-Area-Prefix-LSA (LS Type = 0x2009)

Prefix Options

PrefixOptions字段格式如下:

PrefixOptions字段格式
 0 1 2 3 4 5  6  7
+-+-+-+-+-+--+--+--+
| | | | |P|MC|LA|NU|
+-+-+-+-+-+--+--+--+

用来表达这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。例如希望在特定情况下忽略一个前缀的计算。 由LSA公告的每个前缀都拥有一个自己的PrefixOptions字段。

P位: 传播位。如果一个NSSA区域的前缀需要被ABR传播出去,就需要设置这一位。

MC位: 组播位。如果设置为1,则这个前缀应该纳入组播计算中,否则不纳入组播计算。

LA位: 本地地址位。如果设置为1,则这个前缀是路由器的一个接口地址。

NU位: 非单播位。如果设置为1,则这个前缀不会纳入IPv6单播路由计算中。

参考标准

OSPFv3 参考标准
标准 描述
RFC 2740 OSPF for IPv6
IANA协议注册表 Open Shortest Path First v3 (OSPFv3) Parameters