6、发送完最后一个DD报文之后,RTA将邻居状态改变为Loading;邻居状态变为Loading之后,RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息。
RTB收到最后一个DD报文之后,改变状态为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。
7、RTB收到LSR报文之后,向RTA发送LSU报文,在LSU报文中,包含了那些被请求的链路状态的详细信息。RTA收到LSU报文之后,将邻居状态从Loading改变成Full。
8、RTA向RTB发送LSACK报文,用于对已接收LSA的确认。
此时,RTA和RTB之间的邻居状态变成Full,表示达到完全邻接状态。
OSPF协议5种报文头格式OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文,Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
OSPF报文头格式:
OSPF这五种报文具有相同的报文头格式,长度为24字节。
1、Type: 1字节 ,表示OSPF报文的类型,有下面几种类型:Hello报文;DD报文;LSR报文;LSU报文;LSAck报文。
2、Packet length :2字节,OSPF报文的总长度,包括报文头在内,单位为字节。
3、Router ID :4字节,发送该报文的路由器标识。
4、Area ID: 4字节 ,发送该报文的所属区域。
5、Checksum :2字节,校验和,包含除了认证字段的整个报文的校验和。
6、AuType :2字节 ,验证类型值有如下几种表示, 0表示不验证;1表示简单认证;3表示MD5认证。
7、Authentication :8字节 ,鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。
OSPF Hello报文格式
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
报文的字段解释上一章解已经介绍过:5种报文、8种邻居状态机详解OSPF工作原理
OSPF 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的序列号作为确认。
1、Interface MTU: 16比特 ,在不分片的情况下,此接口最大可发出的IP报文长度。
2、Options: 8比特 ,可选项
3、DD sequence number :32比特 DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
4、LSA Headers :可变 ,该DD报文中所包含的LSA的头部信息。
OSPF 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的新旧。