DR和BDR
MA网络中的问题
在OSPF章节中最后一块就是关于DR和BDR的选举和作用,我们在之前已经说过了,在OSPF中会有一个MA网络,可能是NBMA,或者是BMA,也就是广播多路访问网络,对于MA网络中会存在一些问题,我们来看看存在的问题。
- N ×(N - 1)/ 2 个邻接关系,管理复杂。
- 重复的LSA泛洪,造成资源浪费。
MA网络中一般来说是两个路由器,或者是两个三层交换机都可以。
假如这里有两个三层交换机, 在这里是做了一个直连,所以一台链路上就只有两台设备,相当于是一个点对点的连接。
但是有的时候可能中间会接入一个二层的交换机,然后下方还有路由器,这个时候4台设备都连接在一个二层的交换机上,它们处于同一个网络中,此时这四台三层设备都可以互相去建立邻居关系。
建立邻居关系的话有可能我们还可以去互相传播路由信息,此时就会有N ×(N - 1)/ 2 个邻接关系,它的管理会变得非常的复杂。
我们可以看到图中,就相当于这个逻辑拓扑了,我的RTA要和RTC、RTD、RTB建立邻居关系和邻接关系,这个时候就要去传播我们相应的Hello报文和相应的LSA的报文,这里就是传播LSU报文,当然还要去传播DD报文、LSR报文等。这个时候就会造成重复的泛洪,以及资源的浪费!
DR与BDR的作用
我们如何去节省这个资源呢?
- 减少邻接关系。
- 降低OSPF协议流量。
我们在这里可以选举出一个DR,这个DR就相当于一个组长。
我的其他路由器,相对于RTB、RTC和RTD来说,加入他们都是非DR,而RTA作为一个DR。
那么此时这三个路由器就跟我们的RTA去建立邻接关系,需要什么消息从RTA这里拿,我有什么路由消息也会统一去通报给RTA,由RTA作为一个收集者去收集网段中的路由信息然后再统一分发给各个路由器。
这样就能减少邻接关系,也能降低OSPF的协议流量。
这里有一个思考题就是关于DR的单点故障怎么解决?
因为我们发现DR是一个很重要的设备,所以我们不会只单单去选举出一个DR,我们还会有一个BDR。
这里就是作为一个DR的备份,如果DR Down了之后,BDR就会补上DR的工作来保证我们数据是可持续性传输的。
DR与BDR选举
DR和BDR是怎么选举的?
选举规则:DR/BDR的选举是基于接口的。
- 接口的DR优先级越大越优先。
- 接口的DR优先级相等时,Router ID越大越优先。
首先,它的选举规则是基于接口的,与其说它是基于接口的,不如说它是基于网段的
假如说我在RTB上再来一个RTE,此时我在这里要选举多少个DR?
我在这里是要选举两个的,每个网段都需要有一个DR。
对于10.1.1.0网段,也要选举出一个DR,另外对于RTE和RTB这个网段,我们肯定还有一个网段。
假如是一个以太网,或者是一个帧中继的网络,总之,只要是MA网络的话,我们就要去选举一个DR,如果是PPP网络,就不用去选举一个DR了。
因为PPP网络和P2MP网络都是不用去选举DR的。
按照我们这种情况,假如说现在都是以太网的话,我们是要去选举出两个DR的,所以就说明DR的选举是基于接口的。
接口的DR优先级越大越优先,当接口的优先级相等的时候,我们会去选举Router-id越大者越优先。
这个是前提规则,但是我们来看一下实际的情况,我们可以看到对于4台设备,RTA【DR】它的优先级是100,RTC【BDR】的优先级是95,RTB优先级是0,RTD的优先级是200,结果我们发现这个时候RTA作为DR,RTD作为一个DRother,这里是为什么呢?
我们先来看一下关于优先级是0的一个注解,如果优先级是0的话,在这里是不参与选举的,这个时候优先级为0不参与选举,那么一定就是一个Dother。
另外一点我们可以看到,Router Priority最大的不一定是DR/BDR,为什么会这样呢?
我们前面讲到Router id的时候有提到一个原则:
即稳定大于一切。对于DR的选举也是一样的,即稳定大于一切。
假设我们去配置的时候我们首先配置的是RTA,此时RTA在这个网络中RTB、RTC、RTD都没有配置OSPF:
现在在10网段中我的RTA只有一台路由器,此时RTA配置OSPF开始进行选举,RTA认为这个网段只有我自己,那么我就是老大,我就是DR,它会选举自己成为DR。
然后配置RTB,RTB不参与选举我们就会跳过,接着配置RTC和RTD,那么配置RTD的时候,优先级是200。
我此时的RTD能不能去抢占DR的位置呢?
在这里是不可以的,因为我们的RTA已经成为了DR,我们可以看到RTB和RTC去学习路由的时候,都是和RTA去学习的,我的邻接关系都已经建立好了。
如果说RTD开始去抢占我原有DR的位置,那么这个时候邻接关系又会改变,我从RTC和RTB的话需要去和RTD建立邻接关系,这个时候RTA就有可能是一个DRother的角色了。
这个时候我们的网络相应的路由就会改变,网络可能会出现震荡。
为了保证OSPF网络的稳定性的话。一旦RTA这个路由器成为了DR,我们其他的路由器这个时候去加入的时候,不论优先级是多少,我们都不会去抢占原有DR的地位。
这个就是稳定大于一切的原则。
假如我们现在就是要让RTD成为DR,我认为RTD的设备性能会更好一点,这里也是有办法的:
- 我们可以在这4台路由器上面同时去重启OSPF进程【reset ospf process】。
- 或者将路由器重启也可以。
这个时候我们让它们重新去选举,那么RTD就可以成为DR了。
注意:
我们建议需要哪一个路由器称为DR,那么就优先配置该路由器。
eg:我想让RTD优先成为DR,那么就最先配置RTD即可。
邻居与邻接关系
这个就是DR和BDR的选举,对于设备来说,现在我们刚选举出DR和BDR之后,我们可以看到:
网络类型 | 是否和邻居建立邻接关系 |
P2P | 是 |
Broadcast
NBMA | DR与BDR、DRother建立邻接关系 BDR与DR、DRother建立邻接关系 DRother之间只建立邻居关系 |
P2MP | 是 |
针对DR和BDR,我们先看到在Broadcast网络中:
- DR和BDR以及DRother之间是建立了一个邻接关系的。
- 同样的,BDR和其他的路由器也是建立了邻接关系的。
它们都是full状态,而DRother之间只是建立了一个邻居关系。
- 所以DRother之间只有2-way状态。
即我们去查看邻居状态的时候【display ospf peer】的时候,我们就会发现我的邻居关系为什么会卡在2-way,这里并不一定是我配置错误,因为DRother之间卡在了邻居状态是比较正常的,我们不用去理会。
对于点对点和点到多点,它们都是可以直接去建立邻接关系,去学习我们相应的路由的。不会去选举DR和BDR。
注意:
我们之前有提到过224.0.0.5和224.0.0.6这两个组播报文:
- 对于224.0.0.6只有DR和BDR才会去接收224.0.0.6的报文信息。
- 224.0.0.5是OSPF的所有路由器都能够去接收.5的报文信息。
- 224.0.0.6是只有DR和BDR才能够去接收的。我们的DRohter向外发送路由消息的时候,DROther的目的地址肯定是224.0.0.6。
这里只能被DR和BDR接收到。
- 如果DR向外发送报文,去和DRohter、BDR也好,去共享我们的目的信息的时候,我的目的地址是224.0.0.5。
我是发送给我的广播多路访问网络区域中的这个网段的所有路由器的,所以我的组播地址是224.0.0.5。
这个就是它的两个组播地址的作用,224.0.0.5是作为所有的OSPF的路由器,224.0.0.6是只有DR和BDR才能够去接收的。