建立邻接关系在上述邻居状态机的变化中,有两处决定是否建立邻接关系:
当与邻居的双向通讯初次建立时。
当网段中的DR和BDR发生变化时。
OSPF在不同网络类型中,OSPF邻接关系建立的过程不同,分为广播网络,NBMA网络,点到点/点到多点网络。
在广播网络中建立OSPF邻接关系
广播链路邻接关系建立过程如图5-15所示。
在广播网络中,DR、BDR和网段内的每一台设备都形成邻接关系,但DR other之间只形成邻居关系。
图5-15 在广播网络中建立OSPF邻接关系
如图5-15所示,在广播网络中建立OSPF邻接关系的过程如下:
建立邻居关系
DeviceA的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,DeviceA不确定DR是哪台路由器(DR=0.0.0.0),也不确定邻居是哪台设备(Neighbors Seen=0)。
DeviceB收到DeviceA发送的Hello报文后,发送一个Hello报文回应给DeviceA,并且在报文中的Neighbors Seen字段中填入DeviceA的Router ID(Neighbors Seen=1.1.1.1),表示已收到DeviceA的Hello报文,并且宣告DR路由器是DeviceB(DR=2.2.2.2),然后DeviceB的邻居状态机置为Init。
DeviceA收到DeviceB回应的Hello报文后,将邻居状态机置为2-way状态,下一步双方开始发送各自的链路状态数据库。
在广播网络中,两个接口状态是DR Other的设备之间将停留在此步骤。
主/从关系协商、DD报文交换
DeviceA首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=x。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
为了提高发送的效率,DeviceA和DeviceB首先了解对端数据库中哪些LSA是需要更新的,如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,DeviceA和DeviceB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以唯一标识一条LSA)。为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。
DeviceB在收到DeviceA的DD报文后,将DeviceB的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于DeviceB的Router ID较大,所以在报文中DeviceB认为自己是Master,并且重新规定了序列号Seq=y。
DeviceA收到报文后,同意了DeviceB为Master,并将DeviceA的邻居状态机改为Exchange。DeviceA使用DeviceB的序列号Seq=y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中DeviceA将MS=0,说明自己是Slave。
DeviceB收到报文后,将DeviceB的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时DeviceB将报文的序列号改为Seq=y+1。
上述过程持续进行,DeviceA通过重复DeviceB的序列号来确认已收到DeviceB的报文。DeviceB通过将序列号Seq加1来确认已收到DeviceA的报文。当DeviceB发送最后一个DD报文时,在报文中写上M=0。
LSDB同步(LSA请求、LSA传输、LSA应答)
DeviceA收到最后一个DD报文后,发现DeviceB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时DeviceB也收到了DeviceA的最后一个DD报文,但DeviceA的LSA,DeviceB都已经有了,不需要再请求,所以直接将DeviceA的邻居状态机改为Full状态。
DeviceA发送LSR报文向DeviceB请求更新LSA。DeviceB用LSU报文来回应DeviceA的请求。DeviceA收到后,发送LSAck报文确认。
上述过程持续到DeviceA中的LSA与DeviceB的LSA完全同步为止,此时DeviceA将DeviceB的邻居状态机改为Full状态。当设备交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。
在NBMA网络中建立OSPF邻接关系
NBMA网络和广播网络的邻接关系建立过程只在交换DD报文前不一致,如图5-16中的深蓝色标记。
在NBMA网络中,所有设备只与DR和BDR之间形成邻接关系。
图5-16 在NBMA网络中建立OSPF邻接关系
如图5-16所示,在NBMA网络中建立OSPF邻接关系的过程如下:
在点到点/点到多点网络中建立OSPF邻接关系
在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR,DD报文是组播发送的。