
DR:指定一个路由器。
BDR:是指一个备份的指定路由器。
DR和BDR是由同一网段中所有的路由器根据路由器优先级、RouterID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选取资格。
在一个OSPF网络中,选举一个路由器作为指定路由器DR。所有其他路由器只和它一个交换整个网络的一些路由更新信息,再由它对邻居路由器发送更新报文。这样节省网络流量。再指定一个备份指定路由器BDR,当DR出现故障时,BDR起着备份的作用,确保网络的可靠性。
扩展资料:
OSPF适合在大范围的网络:OSPF协议当中对于路由的跳数,它是没有限制的,所以OSPF协议能用在许多场合,同时也支持更加广泛的网络规模。只要是在组播的网络中,OSPF协议能够支持数十台路由器一起运作。
路由器自身的负载分担能力是很低的。OSPF路由协议会根据几个主要的因素,生成优先级不同的接口。然而在同一个区域内,路由协议只会通过优先级最高的那个接口。
只要是接口优先级低于最高优先级,那么路由就不会通过。在这个基础上,不同等级的路由,无法相互承担负载,只能独自运行。
参考资料:
百度百科-OSPF路由协议
最近翻了一下网上关于DR以及BDR选举的文章,发现很多文章的描述都存在问题,而且很多东西都没有描述清楚,所以,我自己打算写一篇文章,将事情彻底讲清楚.
最权威的参考资料还是RFC文档,网上大部分文章都不靠谱,甚至TCP/IP路由卷一,都没有讲清楚.有兴趣的同学可以翻一下RFC2328,我这里干脆引用一下得了.
以下算法基本是上面内容的翻译.
一台ospf接口起来的时候,它默认的dr以及bdr都是0.0.0.0,这意味着,这个时候,此接口认为还网络中不存在DR以及BDR.
接下来开始DR的选举算法,假定我们有一台路由器X,它正在运行DR选举算法,它首先会开始检查同一网段上,和X建立了双向连接关系的邻居(邻居状态大于等于two-way),当然,X自己也在这些邻居之中,去掉那些优先级为0的邻居(优先级为0,表示其并不想参与选举),去掉那些Router ID为0的邻居,将其余的邻居加入候选列表.
(1) 先将当前路由器认为的DR以及BDR的值记录下来,这个将由于后面的比较
(2) 首先选举新的BDR,首先选择BDR的候选者,那些宣称自己为DR的邻居不能作为BDR,如果有1个或者多个候选候选邻居宣称自己为BDR(没有宣称自己为DR),那么它们之中,优先级最高的邻居作为BDR,如果优先级一致,Router ID大的将成为BDR.如果没有邻居宣称自己为BDR, 那就挑选一个拥有最高优先级的作为BDR,优先级一致的话,router-id大的成为BDR(同样的,要排除那些宣称自己为DR的邻居)
(3) 接下来选举DR,流程如下,如果有一个或多个候选邻居宣称自己为DR(也就是说,Hello包中,它们将自己的Router ID填入了DR字段),拥有最高优先级的邻居成为DR,如果优先级一致,则比较Router ID,Router ID大的邻居成为DR,如果没有邻居宣称自己为DR,那么前面选举的BDR成为DR
(4) 使用(1)中保存的值,如果X成为了新的DR/BDR(之前不是),或者现在已经不是DR/BDR(原来是),重复算法(2),(3)步,然后执行第(5)步.为什么要这么做呢?很简单,经历(2),(3)之后,X现在可能即是DR也是BDR,重新执行之后,我们可以保证,X只有一个角色
(5) ... (接下来就不是选举算法部分了,省略)
假定一个局域网,已经存在了一个DR以及一个BDR,现在另外一台优先级更高的路由器R3加入:
需要说明一下,真实环境收包发包时序可能并非如此,这里仅仅只是为了演示而已.
等待一段时间,R2和R3没有收到R1的Hello报文,就会将R1从邻居列表中移除.然后重新开始选举.假定这个时候R3将R1移除,但是还没有收到R2的Hello报文.
R2同样也会执行选举:
接着R2和R3会互相洪泛Hello报文,R3收到R2的Hello报文后,会再次进行选举:
1.新增two-way及以上的邻居
2.two-way及以上的邻居减少
3.two-way及以上的邻居宣称自己为DR/BDR (原来不是)
4.two-way及以上的邻居不再宣称自己为DR/BDR (原来是)
5.two-way及以上的邻居的优先级发生变化.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)