DR/BDR
1.DR/BDR简介
在广播网和NBMA网络中,任意两台路由器之间都要交换路由信息.如果网络中有n台路由器,则需要建立n(n-1)/2
个邻接关系.这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源.为解决这一问题,OSPF协议定义了指定路由器DR(Designated
Router),所有路由器都只将信息发送给DR,由DR将网络链路状态发送出去.
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,再与新的DR同步.这需要较长的时间,在这段时间内,路由的计算是不正确的.为了能够缩短这个过程,OSPF提出了BDR(Backup
Designated Router,备份指定路由器)的概念.
BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网络内的所有路由器建立邻接关系并交换路由信息.当DR失效后,BDR会立即成为DR.由于不需要重新选举,并且邻接关系事先已建立,所以这个过程是非常短暂的.当然这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算.
DR和BDR之外的路由器(称为DR
Other)之间将不再建立邻接关系,也不再交换任何路由信息.这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量.
如下图所示,用实线代表以太网物理连接,虚线代表建立的邻接关系.可以看到,采用DR/BDR机制后,5台路由器之间只需要建立7个邻接关系就可以了.
2.DR/BDR选举过程
DR和BDR是由同一网段中所有的路由器根据路由器优先级,Router
ID通过Hello报文选举出来的,只有优先级大于0的路由器才具有选取资格.
进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器.当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出.如果优先级相等,则Router
ID大者胜出.如果一台路由器的优先级为0,则它不会被选举为DR或BDR.
需要注意的是:
1.只有在广播或NBMA类型接口才会选举DR,在点到点或点到多点类型的接口上不需要选举DR.
2.DR是某个网段中的概念,是针对路由器的接口而言的.某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR
Other.
3.路由器的优先级可以影响一个选取过程,但是当DR/BDR已经选取完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经选取的DR/BDR成为新的DR/BDR
4.DR并不一定就是路由器优先级最高的路由器接口;同理,BDR也并不一定就是路由器优先级次高的路由器接口
DR/BDR详细选举过程
关于DR/BDR的选举似乎一直没有定论,卷一中所写的选举过程实为引用的RFC2328,而其内容用"过程"来定义似乎是不太容易理解的,准确来说,应该是状态的触发,我们想想可知,OSPF协议选举DR/BDR过程的代码不会是这些步骤的顺序实现,所以我们在分析的时候要找到每一个步骤的触发点,下面我具体分析一下,事先声明这不是翻译.
1.After two-way communication has been
established with .e or more neighbors,examine the Priority,DR,and
BDR field of each neighbor's Hello.List all routers eligible for
election(that is,routers with priority greater than 0 and whose
neighbor state is at least two-way);all routers declaring
themselves to be the DR(their own interface address is in the DR
field of the Hello packet);and all routers declaring themselves to
be the BDR(their own interface address is in the BDR field of the
Hello packet).The calculating router will include itself.this list
unless it is ineligible.
在广播型链路上,所有OSPF路由器之间进入Two-Way状态后开始触发选举过程,这个状态下,每一台路由器的邻居ID字段都包含其他所有的路由器的ID,这是选举公平的保证.
下一个关键点是,选举初始化时,所有的路由器在一开始都宣称自己是DR和BDR,这里涉及到RFC中的两个英文单词declare和claim,很多人认为这上面有文章,其实这两个单词都有宣称的意思,只不过declare用于更为正式的场合,试想一台OSPF路由器会有这等人性的思考?所以用词我觉得作者可能都没有怎么考虑,因为在路由器上实现所谓的"宣称自己是DR/BDR"就是将自己的路由器ID写入Hello包中DR
ID字段中和BDR ID字段中.
2.From the list of eligible routers,create a
subset of all routers not claiming to be the DR(routers declaring
themselves to be the DR cannot be elected BDR).
第2步很有意思,似乎与第1步冲突,既然都声称自己是DR,那么不声称自己是DR的子集一定为空啊?其实这是思维定势,因为一个选举的代码是要始终有效的,而不是仅仅用于初始化的选举.
关键点就一句话:能进入这个子集的条件是,这台路由器的DR
ID字段里写的不是自己的ID,这第2步是为下一步选举BDR做准备的!
具体我们分析一下:在初始化状态下,即网络中没有DR,所有人都宣称自己是DR,也宣称自己是BDR,根据原则,这个子集为空,这时会直接跳到第5步,先去选举DR,在DR选举出以后,也就是网络中存在DR,现象是这样:除了DR在DR
ID字段的写的是自己的ID以外,别的路由器都不是写的自己,而是选举出的那个DR的ID,那么这时就符合进入子集的条件了,除DR外的所有路由器都会进入这个子集,进行下一步,即BDR选举.
3.If .e or more neighbors in this subset
include its own interface address in the BDR field.the neighbor
with the highest priority will be declared the BDR.In a tie,the
neighbor with the highest Router ID will be chosen.
第3步,在选举BDR的时候,大家都在BDR
ID字段写的自己的ID,选举结果明确后,只有BDR发的Hello包中写的自己ID,子集里其余的路由器都不是写的自己ID,而是选举出来的BDR的ID.
4.If no router in the subset claims to be the
BDR,the neighbor with the highest priority will become the BDR.In a
tie,the neighbor with the highest Router ID will be chosen.
第4步应该这样理解:如果这个子集没有路由器说自己是BDR,那就意味着BDR死掉了(本来就他一个说自己是BDR,死了就说不出来了),BDR会重新选举.
5.If .e or more of the eligible routers
include their own address in the DR field,the neighbor with the
highest priority will be declared the DR. In a tie,the neighbor
with the highest Router ID will be chosen.
第5步是DR的选举过程,没有所谓的子集概念,也不是第2步以后的步骤,而是不满足第2步的条件直接跳到这一步.选举DR的资格是:在DR
ID字段中写的是自己的ID
6.If no router has declared itself the DR,the
newly elected BDR will become the DR.
第6步中说到的如果没有人宣称自己是DR对应的情景是这样,别人都说A是DR,A也应该说自己是DR,可是他死了,死人是不会说话的,所以BDR成为DR,其实这一条就是说,如果DR当掉,BDR会成为新的DR.而如果这时BDR还没有选出来,还是会先进行BDR的选举,然后BDR成为DR,为什么,因为大家的DR字段里还是写的那个死了的DR,不符合选举DR的条件,第5步无法执行.
7.If the router performing the calculation is
the newly elected DR or BDR,or if it is no longer the DR or
BDR,repeat steps 2 through 6.
其实这一步就是说明了这个程序不仅仅是为初始化的选举用的,当稳定的角色分配出现问题时,依然能通过这些原则使角色重新定义.
总结:
DR/BDR选举就是"字段游戏",DR的选举资格:在Hello包中的DR
ID写的是自己的ID,BDR的选举资格:在Hello包中的BDR ID写的是自己的ID且在DR
ID字段写的不是自己的ID,具体选举还要看接口优先级和最高Router-id
转:http://wenku.baidu.com/view/3a15b9563c1ec5da50e27025.html