Network系列:OSPF建立邻接关系详细过程(四)
OSPF建立邻接关系详细过程
1. OSPF工作过程概览
2. 建立邻居关系
R1和R2路由器相互发送Hello报文,第一个Hello报文包含的邻居列表为空。
R2收到R1发送的Hello报文后,如果各项参数匹配,再次发送Hello报文时,将R1加入自己的邻居列表。
在以太网链路上,通常以组播形式发送Hello报文:
- 224.0.0.5的组播地址为OSPF设备的预留IP组播地址。
- 224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。
对于不支持组播的链路,OSPF支持采用单播的方式发送Hello报文。
Hello报文
•Hello
报文的主要作用:
邻居发现:自动发现邻居路由器。
邻居建立:完成Hello报文中的参数协商,建立邻居关系。
邻居保持:通过周期性发送和接收,检测邻居运行状态。
3.建立邻接关系
- R1和R2的Router ID分别为10.0.1.1和10.0.2.2并且二者已建立了邻居关系。当R1的邻居状态变为ExStart后,R1会发送第一个DD报文。此报文中,M设置为1,表示后续还有DD报文要发送,MS设置为1,表示R1宣告自己为Master。DD序列号被随机设置为X,I设置为1,表示这是第一个DD报文。
- 同样当R2的邻居状态变为ExStart后,R2也会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I=1,M=1,MS=1,含义同上)。由于R2的Router ID较大,所以R2将成为真正的Master。收到此报文后,R1会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
- 当R1的邻居状态变为Exchange后,R1会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为R2在步骤2中使用的序列号Y,I=0,表示这不是第一个DD报文,M=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS=0,表示R1宣告自己为Slave。收到此报文后,R2将邻居状态从ExStart变为Exchange。
- 当R2的邻居状态变为Exchange后,R2会发送一个新的DD报文,此报文包含了LSDB的摘要信息。DD序列号设置为Y+1, MS=1,表示R2宣告自己为Master。
- 虽然R1不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,R1需要对Master发送的每一个DD报文进行确认。所以,R1向R2发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。R2收到此报文后,会将邻居状态变为Full(假设R2的LSDB是最新最全的,不需要向R1请求更新)。
- R1开始向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
- R2向R1发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。R1在完成LSU报文的接收之后,且没有其他待请求的LSA后,会将邻居状态从Loading变为Full。
- R1向R2发送LSAck报文,作为对LSU报文的确认。
4. DR与BDR
DR与BDR的选举规则(ExStart状态开始选举)
DR/BDR的选举是非抢占式的,是基于接口的。
接口的DR优先级越大越优先,接口的DR优先级相等时,Router ID越大越优先。
广播链路或者NBMA链路上DR和BDR的选举过程如下:
- 接口UP后,发送Hello报文,同时进入到Waiting状态。在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的。默认值为40秒,用户不可自行调整。
- 在WaitingTimer触发前,发送的Hello报文是没有DR和BDR字段的。在Waiting阶段,如果收到Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,而不会触发选举。直接离开Waiting状态,开始邻居同步。
- 假设网络中已经存在一个DR和一个BDR,这时新加入网络中的路由器,不论它的Router ID或者DR优先级有多大,都会承认现网中已有的DR和BDR。
- 当DR因为故障Down掉之后,BDR会继承DR的位置,剩下的优先级大于0的路由器会竞争成为新的BDR。
- 只有当不同Router ID,或者配置不同DR优先级的路由器同时起来,在同一时刻进行DR选举才会应用DR选举规则产生DR。
作者:YinJay
Email:szgetshell@163.com