1.OSPFv3报文头格式
OSPFv3这五种报文具有相同的报文头格式
与OSPFv2一样, OSPFv3的五种报文都有同样的报文头,只是报文中的字段有些不同。
OSPFv3的LSU和LSAck报文与OSPFv2相比没有什么变化,但OSPFv3的报文头、 Hello、 DD以及LSR报文中的字段与OSPFv2略有不同,报文的改变包括以下几点:
(1)版本号从 2 升级到 3。
(2)报文头的不同:与 OSPFv2 报文头相比, OSPFv3 报文头长度只有 16 字节,去掉了认证字段但加了 Instance ID 字段。 Instance ID 字段用来支持在同一条链路上运行多个实例,且只在链路本地范围内有效,如果路由器接收到的 Hello 报文的 Instance ID 与当前接口配置的 Instance ID 不同,将无法建立邻居关系。
2.OSPFv3 Hello报文格式
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
Hello 报文的不同:与 OSPFv2 Hello 报文相比, OSPFv3 Hello 报文去掉了网络掩码字段,增加了 Interface ID 字, 用来标识发送该 Hello 报文的接口ID。
(1)Instance ID: 4字节。报文发送者的发送接口标识,仅用来区分同一路由器上的不同接口,不包含地址信息。
(2)Rtr Pri: 1字节。路由器优先级,优先级高者成为DR。
(3)Options: 3字节。 OSPFv3中将Options字段扩展为24位。
3.OSPFv3 DD报文格式
两台路由器在邻接关系初始化时,用DD报文(Database Description Packet)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。
4.OSPFv3 LSR报文格式
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
5.OSPFv3 LSU报文格式
用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
6.可选项