OSPFv3报文格式
OSPFv3分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。OSPFv3这五种报文具有相同的报文头格式,长度为24B。
-
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
-
两台路由器在邻接关系初始化时,用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的序列号作为确认。
-
两台路由器互相交换过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的新旧。
-
LSU报文用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
-
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:处理按需链路,详见,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:处理按需链路。详见。 |
| 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的特定功能。详见 |
| 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字段含义
| 字段 | 长度 | 含义 |
|---|---|---|
| Link State ID | 32bits | 生成LSA的Router ID。 |
| W | 1bit | 如果置1,标识该路由器是个组播“通吃者”(wild-card receiver)。当运行MOSPF时,无论目的地址是什么,这些路由器接收所有的组播数据。 |
| V (Virtual Link) | 1bit | 如果产生此LSA的路由器是虚连接的端点,则置为1。 |
| E (External) | 1bit | 如果产生此LSA的路由器是ASBR,则置为1。 |
| B (Border) | 1bit | 如果产生此LSA的路由器是ABR,则置为1。 |
| Options | 24bits | Options字段使OSPF路由器能支持可选的能力,并且与其它路由器互相通告其能力。通过这种机制,具有不同能力的路由器可以在一个OSPF路由域中混合工作。参见 |
| Type | 8bits | 链路的: 1: 点到点连接到另一台路由器 2: 连接到穿越(Transit)网 3: 保留 4: 虚连接 |
| metric | 16bits | 流量出接口的开销值。 |
| Interface ID | 32bits | 接口ID。 |
| Neighbor Interface ID | 32bits | 邻居的接口ID。 |
| Neighbor Router ID | 32bits | 邻居的路由器ID。 |
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 | 参见解释。 |
| 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字段。详见 |
| 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字段。详见。 |
| 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。 |
Link-LSA
每个连接的链路产生一个Link-LSA。
作用:
-
向该链路上其他路由器通知本地的Link-Local地址,即到本地的下一跳地址;
-
收集本路由器在该链路上配置的所有的IPv6前缀,并通知该链路上其他路由器;
-
向Network-LSA提供选项信息。收集该链路上所有的Link-LSA,与操作得到的该链路上Network-LSA中选项信息。
Link-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 |
+---------------------------------------------+
| ... |
+---------------------------------------------+
OSPFv3 Link-LSA字段含义
| 字段 | 长度 | 含义 |
|---|---|---|
| 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字段。详见 |
| 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字段。详见 |
| 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。详见 []。
-
R
‘Router’ bit 设置为1,指出该公告者是否为活动路由器(active router)。如果该位清零,则说明该公告者并不能路由数据。所以经过该公告者的路由不能纳入路由计算。如果多宿主机希望分享 OSPF 路由信息,但又不希望转发数据时,可以使用之。详见 []。
-
N
描述了路由器对Type-7 LSA的处理。当且仅当一个接口的所属区域为NSSA区域时设置为1。详见 []。
-
MC
描述路由器是否运行了。当且仅当路由器运行MOSPF时设置为1。详见 [],现已经弃用。
-
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位设置仅仅是为了发布信息,而不影响路由表计算。详见 []。
-
V6
设置为1。表示这个路由器或链路是不是在路由IPv6。如果清零,这个路由器或链路不应该纳入IPv6路由计算。 所有未定义的位都应该清零。详见 。
其它选项可参见。
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 参考标准
| 标准 | 描述 |
|---|---|
| OSPF for IPv6 | |
| Open Shortest Path First v3 (OSPFv3) Parameters |
No comments to display
No comments to display