浅谈OSPF的DR&BDR
多路访问网络(包括BMA、NBMA)存在的问题
不管是广播还是非广播,只要是多路访问网络都存在一个问题,拿以太网举例,每个激活了OSPF的接口都是属于同一个广播域,同一网段,接口向外发送组播OSPF的HELLO消息,试图去发现链路上的其他OSPF路由器,结构就是两两之间建立OSPF邻居关系导致网络中有n(n-1)/2个邻居关系数量,对于路由器来说不得不维护邻居关系,消耗更多的额外资源,其实没有这样的必要。
在广播多路访问网络(Multi Access)中,所有路由器的接口都是相同网段,这些接口都将两两建立OSPF邻居关系,这就意味着,网络中共有:n(n-1)/2,这么多个OSPF邻居关系,维护如此多的邻居关系不仅仅额外消耗设备资源,更是增加了网络中LSA的泛洪数量。
解决邻居关系数量多的问题
定义DR和BDR的角色
DR指定路由器,BDR备用指定路由器,作为DR的备份。DRother既不是DR也不是BDR。MA网络中,所有的DRother路由器均只与DR和BDR建立邻接关系,DRother间不建立全毗邻邻接关系。如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解。那么DRother只能跟DR和BDR建立全毗邻的邻居关系,DRother之间不允许交头接耳,有事情只能向DR和BDR汇报,这样就大大减少了OSPF连接的数量,减少LSA泛洪数量。
如何PK DR和BDR,在发送HELLO包有定义了选举DR和BDR的参数。
DR优先级这是一个接口级别的值,默认所有接口为1,值可以修改,值越大越优。先比优先级,最大的成为DR,第二个大的成为BDR,如果优先级相等,则比较Router-ID,也是越大越优。所有的DRother只能跟DR和BDR建立全毗邻关系,DRother之间不能够建立全毗邻的邻居关系,他们的关系停留在2-Way状态(初相识)。
DR的状态是非抢占的,因为DR角色非常重要,比如后期加入一个路由器他的优先级为100,比网络中的所有路由器优先级都大,但是无法成为DR,因为网络中已经有DR了,所以无法抢占。
DR和BDR是一个接口级别的概念,这个路由器的接口是DR或BDR。
定义DR和BDR后的工作过程

如果选举出DR和BDR后。比如R3作为DRother,发现网络拓扑变更时,他要将这个消息通告出去LSU(包含LSA链路状态通告反映拓扑变更)发向保留的组播目的地224.0.0.6,只有DR和BDR侦听这个地址,DR意识到这个变化后会将LSU泛洪给全网路由器都能收到拓扑变更情况,向外泛洪的目的地址是224.0.0.5,所有运行OSPF的接口都会侦听这个地址。也就是DR和BDR侦听224.0.0.6,所有OSPF路由器的接口侦听224.0.0.5。路由器收到包含变化后的LSA的LSU后,更新自己的LSDB,过一段时间(SPF延迟),对更新的链路状态数据库执行SPF算法,必要时更新路由表。