多路访问网络中的挑战
 
ospf DR/BDR选举_第1张图片
在多路访问网络中,相同的共享介质上连接有两台以上设备。在图的上半部分,R1 所连接的以太网 LAN 展开并显示了网络 172.16.1.16/28 所连接的多台设备。以太网 LAN 就是一种广播多路访问网络。因为该网络中的所有设备会看到所有广播帧,所以它属于广播网络。因为该网络可能包括许多主机、打印机、路由器和其它设备,所以属于多路访问网络。
相比之下,点对点网络中只有两台设备,它们分处网络两端。R1 和 R3 之间的 WAN 链路就属于点对点链路。图中下半部分即为 R1 和 R3 之间的点对点链路。
OSPF 定义了五种网络类型:
.点对点
.广播多路访问
.非广播多路访问 (NBMA)
.点对多点
.虚拟链路

NBMA 和点对多点网络包括帧中继、ATM 和 X.25 网络。
 
LSA 泛洪
 
我们之前已经了解到,链路状态路由器会在 OSPF 初始化以及拓扑更改时泛洪其链路状态数据包。
ospf DR/BDR选举_第2张图片
在多路访问网络中,此泛洪过程中的流量可能变得很大。在上图中R2 发出一个 LSA。此事件触发其它每台路由器发出 LSA。收到每个 LSA 后需要发出的确认未在动画中显示。如果多路访问网络中的每台路由器都需要向其它所有路由器泛洪 LSA 并为收到的所有 LSA 发出确认,网络通信将变得非常混乱。
打个比方,想象您在一个有很多人的房间内。如果每个人都必须向其它所有人逐个作介绍,会发生什么情况呢?不仅每个人必须向其它所有人逐个介绍自己的姓名,而且一旦某个人获悉了另一个人的姓名,还必须将该信息逐个告诉其它所有人。如您所见,此过程将十分混乱!
 
解决方案:指定路由器
用于在多路访问网络中管理相邻关系数量和 LSA 泛洪的解决方案是指定路由器 (DR)。继续讨论上一个例子,此解决方案可比喻为在房间里选举出一个人,由该人员向所有人逐个询问姓名,然后将这些姓名一次性通告给所有人。
在多路访问网络中,OSPF 会选举出一个指定路由器 (DR) 负责收集和分发 LSA。还会选举出一个备用指定路由器 (BDR),以防指定路由器发生故障。其它所有路由器变为 DROther(这就表示该路由器既不是 DR 也不是 BDR)。
多路访问网络中的路由器会选举出一个 DR 和一个 BDR。DROther 仅与网络中的 DR 和 BDR 建立完全的相邻关系。这意味着 DROther 无需向网络中的所有路由器泛洪 LSA,只需使用组播地址 224.0.0.6(ALLDRouters — 所有 DR 路由器)将其 LSA 发送给 DR 和 BDR 即可。在上图中R1 将 LSA 发给 DR,BDR 也收到该通信。DR 负责将来自 R1 的 LSA 转发给其它所有路由器。DR 使用组播地址 224.0.0.5(AllSPFRouters — 所有 OSPF 路由器)。最终结果是,多路访问网络中仅有一台路由器负责泛洪所有 LSA。
 
 
DR/BDR选举过程
 
拓扑变化
ospf DR/BDR选举_第3张图片
DR/BDR 选举不会发生在点对点网络中。因此,在标准的三路由器拓扑中,R1、R2 和 R3 不需要选举 DR 和 BDR,原因在于这些路由器之间的链路不是多路访问网络。
ospf DR/BDR选举_第4张图片
为继续讨论 DR 和 BDR,我们将使用图中所示的多路访问拓扑。路由器使用了不同的名称。在此新拓扑中,三台路由器共享一个公共以太网多路访问网络 192.168.1.0/24。每台路由器在快速以太网接口上配置有一个 IP 地址,并配置有一个环回地址以充当路由器 ID。
 
DR/BDR 选举
DR 和 BDR 是如何选出的呢?选举过程遵循以下条件:
1. DR:具有最高 OSPF 接口优先级的路由器
2. BDR:具有第二高 OSPF 接口优先级的路由器
3. 如果 OSPF 接口优先级相等,则取路由器 ID 最高者。
 
ospf DR/BDR选举_第5张图片
在本例中,默认的 OSPF 接口优先级为 1,因此,根据上述选举条件,采用 OSPF 路由器 ID 来选举 DR 和 BDR。如您所见,RouterC 成为 DR,RouterB 具有第二高的路由器 ID,因此成为 BDR。因为 RouterA 未被选举为 DR 或 BDR,所以成为 DROther。
DROther 仅与 DR 和 BDR 建立完全的相邻关系,但也会与该网络中的任何其它 DROthers 建立相邻关系。这意味着多路访问网络中的所有 DROther 路由器仍然会收到其它所有 DROther 路由器发来的 Hello 数据包。通过这种方式,它们可获悉网络中所有路由器的情况。 当两台 DROther 路由器形成相邻关系后,其相邻状态显示为 2WAY。
ospf DR/BDR选举_第6张图片
命令输出显示了该多路访问网络中各台路由器之间的相邻关系。请注意,RouterA 的输出显示 DR 是 RouterC,路由器 ID 为 192.168.31.33;BDR 是 RouterB,路由器 ID 是 192.168.31.22。
ospf DR/BDR选举_第7张图片
因为 RouterA 显示的两个邻居分别为 DR 和 BDR,所以 RouterA 是一个 DROther。这一点可通过在 RouterA 上运行 show ip ospf interface fastethernet 0/0 命令来验证,命令输出如图所示。此命令将显示此路由器的状态是 DR、BDR 还是 DROTHER,还将显示此多路访问网络中 DR 和 BDR 的路由器 ID。
 
为了确保所需的路由器在 DR 和 BDR 选举中获胜无需进一步配置,解决方案有两种:
.首先启动 DR,再启动 BDR,然后启动其它所有路由器;
.关闭所有路由器上的接口,然后在 DR 上执行 no shutdown 命令,再在 BDR 上执行该命令,随后在其它所有路由器上执行该命令。

您可能已经猜到,我们可以通过更改 OSPF 优先级来更好地控制 DR/BDR 选举。
 
拓扑依然用上面的那个
ospf接口优先级
 
由于 DR 成为 LSA 的集散中心,所以它必须具有足够的 CPU 和存储性能才能担此重责。与其依赖路由器 ID 来确定 DR 和 BDR 结果,不如使用 ip ospf priority 接口命令来控制选举。
Router(config-if)#ip ospf priority {0 - 255}
在前述讨论中,各台路由器的 OSPF 优先级相等,原因在于所有路由器接口的优先级值默认为 1,因此通过路由器 ID 来确定 DR 和 BDR。但 如果将该值从默认值 1 改为更高的值,则具有最高优先级的路由器将成为 DR,具有第二高优先级的路由器将成为 BDR。若该值为 0,则该路由器不具备成为 DR 或 BDR 的资格。
因为优先级是特定于具体接口的值,因此可用于更好地控制 OSPF 多路访问网络。它们还可以使一台路由器在一个网络中充当 DR,同时在另一个网络中充当 DROther。
ospf DR/BDR选举_第8张图片
可使用 show ip ospf interface 命令查看 OSPF 接口优先级。在图中,我们可看到 RouterA 上的优先级被设为默认值 1。
ospf DR/BDR选举_第9张图片
如图所示,RouterA 和 RouterB 的 OSPF 优先级被修改,因此具有最高优先级的 RouterA 成为 DR,RouterB 则成为 BDR。RouterC 上的 OSPF 接口优先级保持为默认值 1。
 
ospf DR/BDR选举_第10张图片
当在所有三台路由器的 FastEthernet 0/0 接口上按顺序执行 shutdown 和 no shutdown 命令后,即可看到 OSPF 接口优先级改变所带来的结果。RouterC 上的 show ip ospf neighbor 命令现在显示 RouterA(路由器 ID 为 192.168.31.11)是 DR,其 OSPF 接口优先级最高,为 200;RouterB(路由器 ID 为 192.168.31.22)仍是 BDR,其 OSPF 接口优先级第二高,为 100。请注意 RouterA 的 show ip ospf neighbor 命令输出中未显示 DR,因为 RouterA 就是此网络中的 DR。