OSPF的报文格式
OSPF
报文直接封装为
IP
报文协议报文,协议号为
89
。一个比较完整的
OSPF
报文(以
LSU
报文为例)结构如
图8
所示。
图8 OSPF
报文结构
1. OSPF报文头
OSPF
有五种报文类型,它们有相同的报文头。如
图9
所示。
主要字段的解释如下:
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
所示。
主要字段解释如下:
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
所示。
主要字段的解释如下:
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
所示。
主要字段解释如下:
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
所示。
主要字段解释如下:
Number of LSAs
:该报文包含的
LSA
的数量。
LSAs
:该报文包含的所有
LSA
。
6. LSAck报文(Link State Acknowledgment Packet)
LSAck
报文用来对接收到的
LSU
报文进行确认,内容是需要确认的
LSA
的
Header
。一个
LSAck
报文可对多个
LSA
进行确认。报文格式如
图14
所示。
主要字段解释如下:
LSA Headers
:该报文包含的
LSA
头部。
7. LSA头格式
所有的
LSA
都有相同的报文头,其格式如
图15
所示。
主要字段的解释如下:
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
,以字节为单位。