Skip to main content

OSPF报文格式

OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328)。

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

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

  • OSPF DD OSPF DD(Database Description)报文描述了本地LSDB的摘要信息,用于两台路由器进行数据库同步。

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

  • OSPF LSU OSPF LSU(Link State Update)报文用来向对端路由器发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。

  • OSPF LSAck OSPF LSAck(Link State Acknowledgment)用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。

协议栈结构

OSPF DD报文用IP报文直接封装协议报文,协议号为89。

OSPF协议栈结构
+-------------------------------------+
|                OSPF                 |
+-------------------------------------+
|       IPv4 Header Protocol = 89     |
+-------------------------------------+
|            L2 Type = 0x0800         |
+-------------------------------------+
|                  L1                 |
+-------------------------------------+

OSPF报文头

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

OSPF报文头格式
  0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|   Version     |     Type      |         Packet length         |
+---------------+---------------+-------------------------------+
|                          Router ID                            |
+---------------------------------------------------------------+
|                           Area ID                             |
+-------------------------------+-------------------------------+
|           Checksum            |             AuType            |
+-------------------------------+-------------------------------+
|                       Authentication                          |
+---------------------------------------------------------------+
|                       Authentication                          |
+---------------------------------------------------------------+
字段 长度 含义
Version 1B 版本,OSPF的版本号。对于OSPFv2来说,其值为2。
Type 1B 类型,OSPF报文的类型,有下面几种类型:1:Hello报文;2:DD报文;3:LSR报文;4:LSU报文;5:LSAck报文。
Packet length 2B OSPF报文的总长度,包括报文头在内,单位为B。
Router ID 4B 发送该报文的路由器标识。
Area ID 4B 发送该报文的所属区域。
Checksum 2B 校验和,包含除了认证字段的整个报文的校验和。
AuType 2B 验证类型,值有如下几种表示:0:不验证。1:简单认证。2:MD5认证。
Authentication 8B 鉴定字段,其数值根据验证类型而定:当验证类型为0时未作定义。类型为1时此字段为密码信息。类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。

OSPF Hello

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

OSPF Hello报文格式
  0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+---------------
|   Version     |       1       |         Packet length         |
+---------------+---------------+-------------------------------+
|                          Router ID                            |
+---------------------------------------------------------------+
|                           Area ID                             |     OSPF
+-------------------------------+-------------------------------+
|           Checksum            |             AuType            |    Header
+-------------------------------+-------------------------------+
|                       Authentication                          |
+---------------------------------------------------------------+
|                       Authentication                          |
+---------------------------------------------------------------+---------------
|                        Network Mask                           |
+-------------------------------+---------------+---------------+
|         HelloInterval         |    Options    |    Rtr Pri    |
+-------------------------------+---------------+---------------+
|                     RouterDeadInterval                        |
+---------------------------------------------------------------+
|                      Designated Router                        |
+---------------------------------------------------------------+
|                   Backup Designated Router                    |
+---------------------------------------------------------------+
|                          Neighbor                             |
+---------------------------------------------------------------+
|                             ...                              |
字段 长度 含义
Network Mask 32bit 发送Hello报文的接口所在网络的掩码。
HelloInterval 16bit 发送Hello报文的时间间隔。
Options 8bit 可选项,详见Options
Rtr Pri 8bit DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。
RouterDeadInterval 32bit 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。
Designated Router 32bit DR的接口地址。
Backup Designated Router 32bit BDR的接口地址。
Neighbor 32bit 邻居,以Router ID标识。

OSPF DD

OSPF DD(Database Description)报文描述了本地LSDB的摘要信息,用于两台路由器进行数据库同步。

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

OSPF DD报文格式
   0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +---------------+---------------+-------------------------------+---------------
 |  Version = 2  |       2       |         Packet length         |
 +---------------+---------------+-------------------------------+
 |                          Router ID                            |
 +---------------------------------------------------------------+
 |                           Area ID                             |     OSPF
 +-------------------------------+-------------------------------+
 |           Checksum            |             AuType            |    Header
 +-------------------------------+-------------------------------+
 |                       Authentication                          |
 +---------------------------------------------------------------+
 |                       Authentication                          |
 +-------------------------------+---------------+-+-+-+-+-+-+-+-+---------------
 |         Interface MTU         |    Options    |0|0|0|0|0|I|M|MS
 +-------------------------------+---------------+-+-+-+-+-+-+-+-+
 |                     DD sequence number                        |
 +---------------------------------------------------------------+
 |                                                               |
 +-                                                             -+
 |                        An LSA Header                          |
 +-                                                             -+
 |                                                               |
 +---------------------------------------------------------------+
 |                             ...                              |
字段 长度 含义
Interface MTU 16bit 在不分片的情况下,此接口最大可发出的IP报文长度。
Options 8bit 可选项,详见Options
I 1bit 当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。
M (More) 1bit 当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。
MS (Master/Slave) 1bit 当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
DD sequence number 32bit DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
An LSA Header 每个20B 该DD报文中所包含的LSA的头部信息。每个LSA头部信息格式请参见图4-107

OSPF LSR

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

OSPF LSR报文格式
   0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +---------------+---------------+-------------------------------+---------------
 |   Version     |       3       |         Packet length         |
 +---------------+---------------+-------------------------------+
 |                          Router ID                            |
 +---------------------------------------------------------------+
 |                           Area ID                             |    OSPF
 +-------------------------------+-------------------------------+
 |           Checksum            |             AuType            |   Header
 +-------------------------------+-------------------------------+
 |                       Authentication                          |
 +---------------------------------------------------------------+
 |                       Authentication                          |
 +---------------------------------------------------------------+---------------
 |                          LS type                              |
 +---------------------------------------------------------------+
 |                       Link State ID                           |
 +---------------------------------------------------------------+
 |                     Advertising Router                        |
 +---------------------------------------------------------------+
 |                             ...                              |
字段 长度 含义
LS type 32bit LSA的类型号。
Link State ID 32bit 根据LSA中的LS Type和LSA description在路由域中描述一个LSA。
Advertising Router 32bit 产生此LSA的路由器的Router ID。

OSPF LSU

LSU报文在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。

LSU报文格式

OSPF LSU格式
  0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---------------
|   Version     |       4       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |    OSPF
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |   Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---------------
|                        Number of LSAs                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-                                                            +-+
|                             LSAs                              |
+-                                                            +-+
|                             ...                              |
字段 长度 含义
Number of LSAs 32bit LSA的数量。
LSAs - 常用的LSA共有5种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。所有LSA都有同样的LSA头部

LSA头部格式

LSA头部格式
  0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            LS age             |    Options    |    LS type    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Link State ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Advertising Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     LS sequence number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         LS checksum           |             length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段 长度 含义
LS age 16bit LSA产生后所经过的时间,以秒为单位。无论LSA是在链路上传送,还是保存在LSDB中,其值都会在不停的增长。
Options 8bit 可选项: E:允许泛洪AS-External-LSA; MC:转发IP组播报文; N/P:处理Type-7 LSA; DC:处理按需链路。
LS type 8bit 此字段标识了 LSA 的格式和功能。常用的 LSA 类型有五种,详见OSPF LSA
Link State ID 32bit 与LSA中的LS Type和LSA description一起在路由域中描述一个LSA。
Advertising Router 32bit 产生此LSA的路由器的Router ID。
LS sequence number 32bit LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。
LS checksum 16bit 除了LS age外其它各域的校验和。
length 16bit LSA的总长度,包括LSA Header,以字节为单位。
OSPF LSA
LS Type Value 说明
Router-LSA 1 每个路由器都会产生,描述了路由器的链路状态和花费,在所属的区域内传播。
Network-LSA 2 由广播网或NBMA网络中的DR产生,Network-LSA中记录了这一网络上所有路由器的Router ID,描述本网段的链路状态,在所属的区域内传播。
Network-summary-LSA 3 描述区域内所有网段的路由,并通告给其他相关区域。Type3和Type4的LSA有相同的格式,它们都是由ABR产生。
ASBR-summary-LSA 4 描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。Type3和Type4的LSA有相同的格式,它们都是由ABR产生。
AS-External-LSA 5 由ASBR产生,描述到AS外部的路由,这是五种LSA中,唯一一种通告到所有区域(除了Stub区域和NSSA区域)的LSA。Type5的LSA可以用来通告缺省路由,此时Link State ID和Network Mask都设置为0.0.0.0。
NSSA-LSA 7 由NSSA的ASBR产生,仅在本NSSA内传播。

Router-LSA格式

Router-LSA格式
   0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-------------------------------+---------------+---------------+-------------
 |            LS age             |     Options   |       1       |
 +-------------------------------+---------------+---------------+
 |                        Link State ID                          |
 +---------------------------------------------------------------+    LSA
 |                     Advertising Router                        |  
 +---------------------------------------------------------------+   Header
 |                     LS sequence number                        |
 +-------------------------------+-------------------------------+
 |         LS checksum           |             length            |
 +-------------------------------+-------------------------------+-------------
 |    0    |V|E|B|        0      |            # links            |
 +---------------------------------------------------------------+
 |                          Link ID                              |
 +---------------------------------------------------------------+
 |                         Link Data                             |
 +---------------+---------------+-------------------------------+
 |     Type      |     # TOS     |            metric             |
 +---------------+---------------+-------------------------------+
 |                             ...                              |
 +---------------+---------------+-------------------------------+
 |      TOS      |        0      |          TOS  metric          |
 +---------------+---------------+-------------------------------+
 |                          Link ID                              |
 +---------------------------------------------------------------+
 |                         Link Data                             |
 +---------------------------------------------------------------+
 |                             ...                              |

Network-LSA格式

Network-LSA格式
  0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+---------------+---------------+-------------
| LS age | Options | 2 |
+-------------------------------+---------------+---------------+
| Link State ID |
+---------------------------------------------------------------+ LSA
| Advertising Router |
+---------------------------------------------------------------+ Header
| LS sequence number |
+-------------------------------+-------------------------------+
| LS checksum | length |
+-------------------------------+-------------------------------+-------------
| Network Mask |
+---------------------------------------------------------------+
| Attached Router |
+---------------------------------------------------------------+
| ... |

Summary-LSA格式

Summary-LSA格式
   0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+---------------+---------------+-------------
| LS age | Options | 3 or 4 |
+-------------------------------+---------------+---------------+
| Link State ID |
+---------------------------------------------------------------+ LSA
| Advertising Router |
+---------------------------------------------------------------+ Header
| LS sequence number |
+-------------------------------+-------------------------------+
| LS checksum | length |
+-------------------------------+-------------------------------+-------------
| Network Mask |
+---------------+-----------------------------------------------+
| 0 | metric |
+---------------+-----------------------------------------------+
| TOS | TOS metric |
+---------------+-----------------------------------------------+
| ... |

AS-External-LSA格式

AS-External-LSA格式
  0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+---------------+---------------+-------------
| LS age | Options | 5 |
+-------------------------------+---------------+---------------+
| Link State ID |
+---------------------------------------------------------------+ LSA
| Advertising Router |
+---------------------------------------------------------------+ Header
| LS sequence number |
+-------------------------------+-------------------------------+
| LS checksum | length |
+-------------------------------+-------------------------------+-------------
| Network Mask |
+-+-------------+-----------------------------------------------+
|E| 0 | metric |
+-+-------------+-----------------------------------------------+
| Forwarding address |
+---------------------------------------------------------------+
| External Route Tag |
+-+-------------+-----------------------------------------------+
|E| TOS | TOS metric |
+-+-------------+-----------------------------------------------+
| Forwarding address |
+---------------------------------------------------------------+
| External Route Tag |
+---------------------------------------------------------------+
| ... |

OSPF LSAck

OSPF LSAck报文根据不同的链路以单播或组播的形式发送。

OSPF LSAck报文格式
  0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+---------------
| Version | 5 | Packet length |
+---------------+---------------+-------------------------------+
| Router ID |
+---------------------------------------------------------------+
| Area ID | OSPF
+-------------------------------+-------------------------------+
| Checksum | AuType | Header
+-------------------------------+-------------------------------+
| Authentication |
+---------------------------------------------------------------+
| Authentication |
+---------------------------------------------------------------+---------------
| |
+- -+
| |
+- An LSA Header -+
| |
+- -+
| |
+- -+
| |
+---------------------------------------------------------------+
| ... |
字段 长度 含义
An LSA Header Variable 通过LSA的头部信息确认收到该LSA。详见LSA头部信息格式

Options

OSPF Options字段
+--------------------------------------+
| DN | O | DC | EA | N/P | MC | E | MT |
+--------------------------------------+
  • DN(down):用来避免在 MPLS VPN 中出现环路。当3类、5类和7类LSA中设置了DN位之后,接收路由器就不能够在它的OSPF路由计算中使用该LSA。

  • O:该字段指出始发路由器支持 Opaque LSA(类型9、类型10和类型11)。

  • DC:当始发路由器支持按需链路上的 OSPF 的能力时,该位将被设置。

  • EA:当始发路由器具有接收和转发外部属性LSA的能力时,该位被置位。

  • N位:只在 Hello 数据包中。N=1表明路由器支持7类LSA。N=0 表明该路由器将不接收和发送 NSSA LSA。

  • P位:只用在NSSA LSA。该位将告诉一个非纯末节区域中的 ABR 路由器将7类 LSA 转换为5类 LSA。

  • MC位:支持MOSPF。

  • E位:当始发路由器具有接收OSPF域外部 LSA 的能力时,该位置位。在所有5类 LSA 和始发于骨干区域以及非末节区域的 LSA 中,该位置为1。而始发与末节区域的LSA中,该位置为0。如果 Hello 报文中该位表明一个接口具有接收和发送5类 LSA 的能力。

  • MT位:表示始发路由器支持多拓扑 OSPF。

参考标准

标准 描述
RFC 2328 OSPF Version 2
IANA协议注册表 Open Shortest Path First v2 (OSPFv2) Parameters