OSPF的报文格式

OSPF 报文直接封装为 IP 报文协议报文,协议号为 89 。一个比较完整的 OSPF 报文(以 LSU 报文为例)结构如 8 所示。
图8 OSPF 报文结构

1. OSPF报文头

OSPF 有五种报文类型,它们有相同的报文头。如 9 所示。
OSPF的报文格式_第1张图片图9 OSPF 报文头格式
主要字段的解释如下:
l              Version OSPF 的版本号。对于 OSPFv2 来说,其值为 2
l              Type OSPF 报文的类型。数值从 1 5 ,分别对应 Hello 报文、 DD 报文、 LSR 报文、 LSU 报文和 LSAck 报文。
l              Packet length OSPF 报文的总长度,包括报文头在内,单位为字节。
l              Router ID :始发该 LSA 的路由器的 ID
l              Area ID :始发 LSA 的路由器所在的区域 ID
l              Checksum :对整个报文的校验和。
l              AuType :验证类型。可分为不验证、简单(明文)口令验证和 MD5 验证,其值分别为 0 1 2
l              Authentication :其数值根据验证类型而定。当验证类型为 0 时未作定义,为 1 时此字段为密码信息,类型为 2 时此字段包括 Key ID MD5 验证数据长度和序列号的信息。
&   说明:
MD5 验证数据添加在 OSPF 报文后面,不包含在 Authenticaiton 字段中。
 

2. Hello报文(Hello Packet

最常用的一种报文,周期性的发送给邻居路由器用来维持邻居关系以及 DR/BDR 的选举,内容包括一些定时器的数值、 DR BDR 以及自己已知的邻居。 Hello 报文格式如 10 所示。
OSPF的报文格式_第2张图片图10 Hello 报文格式
主要字段解释如下:
l              Network Mask :发送 Hello 报文的接口所在网络的掩码,如果相邻两台路由器的网络掩码不同,则不能建立邻居关系。
l              HelloInterval :发送 Hello 报文的时间间隔。如果相邻两台路由器的 Hello 间隔时间不同,则不能建立邻居关系。
l              Rtr Pri :路由器优先级。如果设置为 0 ,则该路由器接口不能成为 DR/BDR
l              RouterDeadInterval :失效时间。如果在此时间内未收到邻居发来的 Hello 报文,则认为邻居失效。如果相邻两台路由器的失效时间不同,则不能建立邻居关系。
l              Designated Router :指定路由器的接口的 IP 地址。
l              Backup Designated Router :备份指定路由器的接口的 IP 地址。
l              Neighbor :邻居路由器的 Router ID

3. DD报文(Database Description Packet

两台路由器进行数据库同步时,用 DD 报文来描述自己的 LSDB ,内容包括 LSDB 中每一条 LSA Header LSA Header 可以唯一标识一条 LSA )。 LSA Header 只占一条 LSA 的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据 LSA Header 就可以判断出是否已有这条 LSA
DD 报文格式如 11 所示。
OSPF的报文格式_第3张图片图11 DD 报文格式
主要字段的解释如下:
l              Interface MTU :在不分片的情况下,此接口最大可发出的 IP 报文长度。
l              I Initial ):当发送连续多个 DD 报文时,如果这是第一个 DD 报文,则置为 1 ,否则置为 0
l              M More ):当连续发送多个 DD 报文时,如果这是最后一个 DD 报文,则置为 0 。否则置为 1 ,表示后面还有其他的 DD 报文。
l              MS Master/Slave ):当两台 OSPF 路由器交换 DD 报文时,首先需要确定双方的主( Master )从( Slave )关系, Router ID 大的一方会成为 Master 。当值为 1 时表示发送方为 Master
l              DD Sequence Number DD 报文序列号,由 Master 方规定起始序列号,每发送一个 DD 报文序列号加 1 Slave 方使用 Master 的序列号作为确认。主从双方利用序列号来保证 DD 报文传输的可靠性和完整性。

4. LSR报文(Link State Request Packet

两台路由器互相交换过 DD 报文之后,知道对端的路由器有哪些 LSA 是本地的 LSDB 所缺少的,这时需要发送 LSR 报文向对方请求所需的 LSA 。内容包括所需要的 LSA 的摘要。 LSR 报文格式如 12 所示。
OSPF的报文格式_第4张图片图12 LSR 报文格式
主要字段解释如下:
l              LS type LSA 的类型号。例如 Type1 表示 Router LSA
l              Link State ID :链路状态标识,根据 LSA 的类型而定。
l              Advertising Router :产生此 LSA 的路由器的 Router ID

5. LSU报文(Link State Update Packet

LSU 报文用来向对端路由器发送所需要的 LSA ,内容是多条 LSA (全部内容)的集合。 LSU 报文格式如 13 所示。
OSPF的报文格式_第5张图片图13 LSU 报文格式
主要字段解释如下:
Number of LSAs :该报文包含的 LSA 的数量。
LSAs :该报文包含的所有 LSA

6. LSAck报文(Link State Acknowledgment Packet

LSAck 报文用来对接收到的 LSU 报文进行确认,内容是需要确认的 LSA Header 。一个 LSAck 报文可对多个 LSA 进行确认。报文格式如 14 所示。
OSPF的报文格式_第6张图片图14 LSAck 报文格式
主要字段解释如下:
LSA Headers :该报文包含的 LSA 头部。

7. LSA头格式

所有的 LSA 都有相同的报文头,其格式如 15 所示。
OSPF的报文格式_第7张图片图15 LSA 的头格式
主要字段的解释如下:
l              LS age LSA 产生后所经过的时间,以秒为单位。 LSA 在本路由器的链路状态数据库( LSDB )中会随时间老化(每秒钟加 1 ),但在网络的传输过程中却不会。
l              LS type LSA 的类型。
l              Link State ID :具体数值根据 LSA 的类型而定。
l              Advertising Router :始发 LSA 的路由器的 ID
l              LS sequence number LSA 的序列号,其他路由器根据这个值可以判断哪个 LSA 是最新的。
l              LS checksum :除了 LS age 字段外,关于 LSA 的全部信息的校验和。
l              length LSA 的总长度,包括 LSA Header ,以字节为单位。