OSPF基础知识详解(三)
OSPF基础知识详解(二) -https://www.wlgly.net/post-194.html
10、OSPF邻居关系
使能了OSPF功能的接口会周期性地发送Hello报文,与网络中其他收到Hello报文的路由器协商报文中的指定参数,包括区域号、验证模式、发送Hello报文的时间间隔、路由器失效时间等参数。
如果协商一致,则在返回的Hello报文的邻居列表中添加发送该Hello报文的设备的Router ID,双方建立双向通信,邻居关系建立。邻居关系建立后,如果在路由器失效时间内没有收到邻居发来的Hello报文,则中断邻居关系。
11、OSPF邻接关系
OSPF邻接关系位于邻居关系之上,两端需要进一步交换DD报文、交互LSA信息时才建立邻接关系。
并非所有邻居都会建立邻接关系,是否建立邻接关系主要取决网络类型和DR/BDR。
在P2P链路和P2MP链路上,每一台设备都需要交换LSA信息,因此只存在邻接关系。在广播链路和NBMA链路上,因为DR Other之间不需要交换LSA信息,所以建立的是邻居关系。而DR与BDR之间,DR、BDR与DR Other之间需要交互LSA信息,所以建立的是邻接关系。
图9 OSPF邻居关系和邻接关系
如图9所示,两台DR Other各有三个邻居,但是分别只有两个邻接。简单来说,邻居关系是指邻居状态达到了2-Way状态,而邻接关系则需要达到ExStart或以上状态。
12、OSPF邻接关系建立过程
不同类型的网络,OSPF邻接关系建立过程不同。在广播网络中,DR、BDR和网段内的每一台路由器都形成邻接关系,但DR other之间只形成邻居关系。邻接关系建立的过程如图10所示。
图10 广播网络中邻接关系的建立过程
1、建立邻居关系
RouterA连接到广播类型网络的接口上使能了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR设备(DR=1.1.1.1),但不确定邻居是哪台设备(Neighbors Seen=0)。
RouterB收到RouterA发送的Hello报文后,发送一个Hello报文回应给RouterA,并且在报文中的Neighbors Seen字段中填入RouterA的Router ID(Neighbors Seen=1.1.1.1),表示已收到RouterA的Hello报文,并且宣告DR设备是RouterB(DR=2.2.2.2),然后RouterB的邻居状态机置为Init。
RouterA收到RouterB回应的Hello报文后,将邻居状态机置为2-Way状态,下一步双方开始发送各自的链路状态数据库。在广播网络中,两个接口状态是DR Other的设备之间将停留在此步骤。
2、主从关系协商、DD报文交换
RouterA首先发送一个DD报文,宣称自己是Master(即将DD报文中的MS字段置为1),并规定序列号Seq=X。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
为了提高发送的效率,RouterA和RouterB首先了解对端数据库中哪些LSA是需要更新的。如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,RouterA和RouterB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以唯一标识一条LSA)。
为了保证报文在传输过程中的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加1,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。
RouterB在收到RouterA的DD报文后,将邻居状态机改为ExStart,并且回应一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=Y。
RouterA收到报文后,同意了RouterB为Master,并将邻居状态机改为Exchange。RouterA使用RouterB的序列号Seq=Y来发送新的DD报文,该报文开始正式传送LSA的摘要。在报文中RouterA将MS字段置为0,说明自己是Slave。
RouterB收到报文后,将邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0。
3、LSDB同步(LSA请求、LSA传输、LSA应答)
RouterA收到最后一个DD报文后,发现RouterB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterB也收到了RouterA的最后一个DD报文,但RouterA的LSA,RouterB都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full状态。
RouterA发送LSR报文向RouterB请求更新LSA。RouterB用LSU报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。
上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。
在NBMA网络中,所有路由器只与DR和BDR之间形成邻接关系。邻接关系建立的过程如图11所示。
图11 NBMA网络中邻接关系的建立过程
1、建立邻居关系
RouterB向RouterA的一个状态为Down的接口发送Hello报文后,RouterB的邻居状态机置为Attempt。此时,RouterB认为自己是DR设备(DR=2.2.2.2),但不确定邻居是哪台设备(Neighbors Seen=0)。
RouterA收到Hello报文后将邻居状态机置为Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR设备(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居设备的Router ID(Neighbors Seen=2.2.2.2)。在NBMA网络中,两个接口状态是DR Other的设备之间将停留在此步骤。
2、主从关系协商、DD报文交换过程与广播网络中邻接关系建立过程相同。
3、LSDB同步(LSA请求、LSA传输、LSA应答)过程与广播网络中邻接关系建立过程相同。
在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR,DD报文在点到点网络中是由组播发送的,在点到多点网络中是由单播发送的。
OSPF基础知识详解(四)https://www.wlgly.net/post-212.html
发表评论