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网络上各路由器之间邻接关系的数量。
如图7所示,用实线代表以太网物理连接,虚线代表建立的邻接关系。可以看到,采用DR/BDR机制后,5台路由器之间只需要建立7个邻接关系就可以了。
DR和BDR示意图
2. DR/BDR选举过程
DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选取资格。
进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。
需要注意的是:
只有在广播或NBMA类型接口才会选举DR,在点到点或点到多点类型的接口上不需要选举DR。
DR是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR Other。
路由器的优先级可以影响一个选取过程,但是当DR/BDR已经选取完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经选取的DR/BDR成为新的DR/BDR。
DR并不一定就是路由器优先级最高的路由器接口;同理,BDR也并不一定就是路由器优先级次高的路由器接口。
DR/BDR详细选举过程
1. After two-way communication has been established with .e or more neighbors, examine the Priority, DR, and BDR fields 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.
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).
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.
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.
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.
6. If no router has declared itself the DR, the newly elected BDR will become the DR.
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 选举过程如下:
1. 在与一个或多个邻居之间的双向通信建立起来之后, (路由器)对每个邻居(发 送来)的 Hello 包中的优先级、DR 和 BDR 域进行检查。列出所有能够参加选举的路 由器 (也就是说, 路由器的优先级高于 0 并且此路由器的邻居状态至少为“双向”); 所有路由器都宣称自己为 DR(将它们自己的接口地址置于 Hello 包的 DR 域中); 而且所有路由器都宣称自己为 BDR(将它们自己的接口地址置于 Hello 包的 BDR 域 中)。进行计算的路由器也要将自身包括在此列表内,除非它被禁止参加选举。
2. 从(以上)备选路由器列表中,创造一个子集,此子集包含所有未宣称为 DR 的路由器(宣称自己为 DR 的路由器无法被选举为 BDR).
3. 如果此子集中的一或多个邻居将它(们)自身的接口地址置于 BDR 域中,这些 邻居中拥有最高优先级的路由器将被宣告为 BDR。如果出现平局(路由器优先级相等),拥有最高 Router ID 的邻居将被选举出来。
4. 如果此子集中没有任何路由器被宣告为 BDR,拥有最高优先级的邻居将被宣告 为 BDR。如果出现平局,拥有最高 Router ID 的邻居将被选举出来。
5. 如果一或多个备选路由器将它(们)自身的接口地址置于 DR 域中,拥有最高优 先级的邻居将被宣告为 DR。如果出现平局,拥有最高 Router ID 的邻居将被选举出 来。
6. 如果没有任何路由器宣告自己为 DR,则新选举出来的 BDR 将成为 DR。
7. 如果进行计算的路由器是新选举出来的 DR 或者 BDR,或者如果它不再是 DR 或 者 BDR,重复步骤 2 到 6。简而言之,当一个 OSPF 路由器启动并开始搜索邻居时,它先搜寻活动的 DR 和 BDR。 如果 DR 和 BDR 存在,路由器就接受它们。如果没有 BDR,就进行一次选举将拥有最高优先级的路由器选举为 BDR。如果多于一台路由器拥有相同的优先级,那么拥有 最高路由器 ID 的路由器将胜出。如果没有活动的 DR,BDR 将被提升为 DR 然后再进 行一次 BDR 的选举。
以上译自《Routing TCP/IP Volume I》 Jeff Doyle Cisco Press 1998 / PTP 2003