OSPFv3报文格式
OSPFv3用IPv6报文直接封装协议报文,协议号为89。OSPFv3分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
报文头格式
OSPFv3这五种报文具有相同的报文头格式,长度为16字节。如图7-20所示。
字段名 |
长度 |
含义 |
---|---|---|
Version |
8比特 |
OSPF的版本号。对于OSPFv3,其值为3。 |
Type |
8比特 |
OSPFv3报文的类型:
|
Packet length |
16比特 |
OSPFv3报文的总长度,包括报文头在内,单位为字节。 |
Router ID |
32比特 |
发送该报文的路由器标识。 |
Area ID |
32比特 |
发送该报文的路由器的所属区域。 |
Checksum |
16比特 |
包含除了认证字段的整个报文的校验和。 |
Instance ID |
8比特 |
OSPFv3多实例ID。 |
0 |
8比特 |
预留值。 |
Hello报文
最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPFv3的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及已知的邻居。Hello报文格式如图7-21所示。
字段名 |
长度 |
含义 |
---|---|---|
Interface ID |
32比特 |
发送Hello报文的接口ID。 |
Rtr Priority |
8比特 |
DR优先级。默认为1。 说明:
如果设置为0,则路由器不能参与DR或BDR的选举。 |
Options |
24比特 |
可选项:
|
HelloInterval |
16比特 |
发送Hello报文的时间间隔。 |
RouterDeadInterval |
16比特 |
失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 |
Designated Router ID |
32比特 |
DR的接口地址。 |
Backup Designated Router ID |
32比特 |
BDR的接口地址。 |
Neighbor ID |
32比特 |
邻居,以Router ID标识。 |
Hello报文在不同网络中的发送地址类型、发送时间间隔类型和时间间隔缺省值不同,参见表7-13。
网络类型 |
发送地址类型 |
发送时间间隔类型 |
时间间隔缺省值 |
---|---|---|---|
广播 |
组播地址 |
HelloInterval |
缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 |
NBMA |
单播地址 |
|
缺省情况下,接口发送Hello报文的时间间隔的值为30秒。 缺省情况下,接口发送Pollinterval间隔为120秒。 |
P2P |
组播地址 |
HelloInterval |
缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 |
P2MP |
组播地址 |
HelloInterval |
缺省情况下,接口发送Hello报文的时间间隔的值为30秒。 |
在同一网段上的路由器,其HelloInterval、PollInterval和RouterDeadInterval必须分别一致,否则不能形成邻居关系。在NBMA网络上还有一种PollInterval。
DD报文
两台路由器在邻接关系初始化时,用DD报文描述本端路由器的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。
DD报文格式如图7-22所示。
字段名 |
长度 |
含义 |
---|---|---|
Options |
24比特 |
可选项:
|
Interface MTU |
16比特 |
在不分片的情况下,此接口最大可发出的IP报文长度。 |
I |
1比特 |
当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。 |
M(More) |
1比特 |
当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0,否则置为1,表示后面还有其他的DD报文。 |
M/S(Master/Slave) |
1比特 |
当两台OSPFv3设备交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。 |
DD sequence number |
32比特 |
DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。 |
LSA Headers |
- |
该DD报文中所包含的LSA的头部信息。 |
LSR报文
两台路由器互相交换过DD报文之后,需要发送LSR报文向对方请求更新LSA,内容包括所需要的LSA的摘要信息。LSR报文格式如图7-23所示。
字段名 |
长度 |
含义 |
---|---|---|
LS type |
16比特 |
LSA的类型号。 |
Link State ID |
32比特 |
与LS Type一起描述路由域中唯一一个LSA。 |
Advertising Router |
32比特 |
产生此LSA的路由器的Router ID。 |
LS type、Link State ID和Advertising Router可以唯一标识出一个LSA。当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
LSU报文
LSU报文用来向对端路由器发送其所需要的LSA或者泛洪本端更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文在支持组播和广播的网络中是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。LSU报文格式如图7-24所示。
字段名 |
长度 |
含义 |
---|---|---|
Number of LSAs |
32比特 |
LSA的数量。 |
LSAck报文
LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck报文根据不同的链路以单播或组播的形式发送,LSAck报文格式如图7-25所示。
字段名 |
长度 |
含义 |
---|---|---|
LSAs Headers |
由需要确认的LSA的Header长度决定。 |
通过LSA的头部信息确认收到该LSA。 |