3.2 OSPF报头及各种报文格式
3.2.1 OSPF协议报头格式
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
OSPF这五种报文具有相同的报文头格式,长度为24字节。
图1 OSPF报文头格式
字段 |
长度 |
含义 |
Version |
1字节 |
版本,OSPF的版本号。对于OSPFv2来说,其值为2。 |
Type |
1字节 |
类型,OSPF报文的类型,有下面几种类型:
|
Packet length |
2字节 |
OSPF报文的总长度,包括报文头在内,单位为字节。 |
Router ID |
4字节 |
发送该报文的路由器标识。 |
Area ID |
4字节 |
发送该报文的所属区域。 |
Checksum |
2字节 |
校验和,包含除了认证字段的整个报文的校验和。 |
AuType |
2字节 |
验证类型,值有如下几种表示, 0:不验证;1:简单认证;2:MD5认证。 |
Authentication |
8字节 |
鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。 MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。 |
3.2.2 OSPF hello报文及格式
建立和维护相邻邻居路由器之间的邻接关系。
内容:定时器设置、DR、BDR及路由器已知的邻居路由器。
P2P和广播类型网络中,hello包以组播(224.0.0.5)形式HelloInterval周期(默认10S)一次;P2MP和NBMA网络中,以PollInterval为周期(默认60S),单播方式向状态为Down的邻居发送一个Hello报文(其他类型的网络时不会把Hello报文发送给状态为Down的路由器)。如果在设定的DeadInterval时间(通常至少是4*Hello时间)内没有收到对端发送的Hello报文,本地路由器会认为对端路由器无效。
图1 OSPF Hello报文格式
字段 |
长度 |
含义 |
Network Mask |
32比特 |
发送Hello报文的接口所在网络的掩码。 |
HelloInterval |
16比特 |
发送Hello报文的时间间隔。 |
Options |
8比特 |
可选项:
|
Rtr Pri |
8比特 |
DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。 |
RouterDeadInterval |
32比特 |
失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 |
Designated Router |
32比特 |
DR的接口地址。 |
Backup Designated Router |
32比特 |
BDR的接口地址。 |
Neighbor |
32比特 |
邻居,以Router ID标识。 |
图2 OSPF Hello
3.2.3 OSPF DD报文及格式
描述本地路由器的链路状态数据库(LSDB),即本地LSDB中包含哪些LSA。在两个路由器初始化连接时要交换DD报文,以便数据库同步。
报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。
图1 DD报文格式
字段 |
长度 |
含义 |
Interface MTU |
16比特 |
在不分片的情况下,此接口最大可发出的IP报文长度。 |
Options |
8比特 |
可选项:
|
I |
1比特 |
当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。 |
M (More) |
1比特 |
当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。 |
M/S (Master/Slave) |
1比特 |
当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。 |
DD sequence number |
32比特 |
DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。 |
LSA Headers |
可变 |
该DD报文中所包含的LSA的头部信息。 |
报文示例
图2 OSPF DD报文
3.2.4 OSPF LSA报文及格式
LSR报文用于请求相邻路由器链路状态数据库中的一部分数据。交换完DD报文后,指导对端路由器有哪些LSA是本地LSDB没有的,移机哪些LSA是已经失效的,需要一个LSR报文,向对方请求所需的LSA。
LSR报文内容包括所需的LSA摘要:其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
字段 |
长度 |
含义 |
LS type |
32比特 |
LSA的类型号。 |
Link State ID |
32比特 |
根据LSA中的LS Type和LSA description在路由域中描述一个LSA。 |
Advertising Router |
32比特 |
产生此LSA的路由器的Router ID。 |
报文示例
图1 OSPF LSR
3.2.5 OSPF LSU报文及格式
LSU报文是LSR请求报文的应答报文,用来向对端路由器发送所需的真正LSA内容或者泛洪自己更新的LSA,可以是多条LSA完整内容的集合。LSU报文内容部分包括此次一共发送的LSA熟料和每条LSA的完整内容。
内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
字段 |
长度 |
含义 |
Number of LSAs |
32比特 |
LSA的数量。 |
常用的LSA共有5种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。
所有的LSA都有相同的报文头:
字段 |
长度 |
含义 |
LS age |
16比特 |
LSA产生后所经过的时间,以秒为单位。无论LSA是在链路上传送,还是保存在LSDB中,其值都会在不停的增长。 |
Options |
8比特 |
可选项:
|
LS type |
8比特 |
LSA的类型:
|
Link State ID |
32比特 |
与LSA中的LS Type和LSA description一起在路由域中描述一个LSA。 |
Advertising Router |
32比特 |
产生此LSA的路由器的Router ID。 |
LS sequence number |
32比特 |
LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。 |
LS checksum |
16比特 |
除了LS age外其它各域的校验和。 |
length |
16比特 |
LSA的总长度,包括LSA Header,以字节为单位。 |
Router-LSA
Router-LSA(Type1):每个路由器都会产生,描述了路由器的链路状态和花费,在所属的区域内传播。
图1 Router-LSA格式
字段 |
长度 |
含义 |
Link State ID |
32比特 |
生成LSA的Router ID。 |
V (Virtual Link) |
1比特 |
如果产生此LSA的路由器是虚连接的端点,则置为1。 |
E (External) |
1比特 |
如果产生此LSA的路由器是ASBR,则置为1。 |
B (Border) |
1比特 |
如果产生此LSA的路由器是ABR,则置为1。 |
# links |
16比特 |
LSA中所描述的链路信息的数量,包括路由器上处于某区域中的所有链路和接口。 |
Link ID |
32比特 |
路由器所接入的目标,其值取决于连接的类型:
|
Link Data |
32比特 |
连接数据,其值取决于连接的类型:
|
Type |
8比特 |
路由器连接的基本描述:
|
# TOS |
8比特 |
连接不同的TOS数量。 |
metric |
16比特 |
链路的开销值。 |
TOS |
8比特 |
服务类型。 |
TOS metric |
16比特 |
和指定TOS值相关联的度量。 |
Network-LSA
Network-LSA(Type2):由广播网或NBMA网络中的DR产生,Network-LSA中记录了这一网络上所有路由器的Router ID,描述本网段的链路状态,在所属的区域内传播。
图2 Network-LSA格式
字段 |
长度 |
含义 |
Link State ID |
32比特 |
DR的接口IP地址。 |
Network Mask |
32比特 |
该广播网或NBMA网络地址的掩码。 |
Attached Router |
32比特 |
连接在同一个网络上的所有路由器的Router ID,也包括DR的Router ID。 |
Summary-LSA格式
Network-summary-LSA(Type3):描述区域内所有网段的路由,并通告给其他相关区域。
ASBR-summary-LSA(Type4):描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
Type3和Type4的LSA有相同的格式,它们都是由ABR产生。
图3 Summary-LSA格式
字段 |
长度 |
含义 |
Link State ID |
32比特 |
通告的网络地址。如果是ASBR Summary LSA,此字段表示ASBR的Router ID。 |
Network Mask |
32比特 |
该广播网或NBMA网络地址的掩码。如果是ASBR Summary LSA,此字段无意义,设置为0.0.0.0。 |
metric |
24比特 |
到目的地址的路由开销。 |
TOS |
8比特 |
服务类型。 |
TOS metric |
24比特 |
和指定TOS值相关联的度量。 |
通告缺省路由时,Link State ID和Network Mask都设置为0.0.0.0。
AS-External-LSA
AS-External-LSA(Type5):由ASBR产生,描述到AS外部的路由,这是五种LSA中,唯一一种通告到所有区域(除了Stub区域和NSSA区域)的LSA。
图4 AS-External-LSA格式
字段 |
长度 |
含义 |
Link State ID |
32比特 |
通告的网络地址。 |
Network Mask |
32比特 |
通告的目的地址的掩码。 |
E |
1比特 |
外部度量值类型:
|
metric |
24比特 |
到目的地址的路由开销。 |
Forwarding Address |
32比特 |
到所通告的目的地址的报文将被转发到这个地址。 |
External Route Tag |
32比特 |
添加到外部路由上的标记。OSPF本身并不使用这个字段,它可以用来对外部路由进行管理。 |
TOS |
8比特 |
服务类型。 |
TOS metric |
24比特 |
TOS附加距离信息。 |
Type5的LSA可以用来通告缺省路由,此时Link State ID和Network Mask都设置为0.0.0.0。
报文示例
图5 Network-LSA
图6 Router-LSA
图7 Summary-LSA
3.2.5 OSPF LSAck报文及格式
LSAck报文是路由器在收到对端发来的LSU报文后发送出的确认报文,内容是需要确认的LSA头部(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。
图1 OSPF LSAck报文格式
字段 |
长度 |
含义 |
LSAs Headers |
可变 |
通过LSA的头部信息确认收到该LSA。 |
LSA报头格式
报文示例
图2 OSPF LSAck