DR选举和BDR选举

本文详细介绍了OSPF协议中DR(Designated Router)和BDR(Backup Designated Router)的选举过程。在MA网络上,DR与BDR的选举基于Hello报文,所有路由器必须与DR和BDR建立FULL邻接关系。选举算法首先在DR集合中选出DR,然后在BDR集合中选出BDR。如果网络中没有BDR,会从DRother集合中选出。在选举过程中,若Wait计时器超时且未学习到DR/BDR,则所有路由器会依次进行DR和BDR的选举,直到选举结束并开始邻接建立。

MA网络上要同时选举DR和BDR,MA网络上路由器都要与DR和 BDR形成FULL的邻接关系。其中,DR与BDR之间也是FULL的邻接关系,DRother 与 DRother之间则只存在邻居关系,状态为2-Way。
MA网络可以没有BDR,但不能没有DR。
DR的选举依靠Hello报文,在 two-way之后,交互Hello报文完成DR/BDR的选举。每台路由器根据收到的所有邻居的Hello报文,构建自己接口的数据结构,并按照算法,计算出DR和BDR。
选举DR/BDR算法
(1)路由器接口数据结构中维持三个集合,分别是:
DR集合:通过Hello学习到的所有DR路由器;

BDR集合:通过Hello学习到的所有BDR路由器;

DRother集合:没有被选举为DR/BDR的路由器(优先级不为0)。
 (2)算法工作时,在 DR集合中选择最好的路由器,使其成为DR。在 BDR集合中选择最好的路由器,使其成为BDR。
OSPF 路由器在DR/BDR未选举出来之前,Hello报文中关于DR和 BDR的字段为全0,即为0.0.0.0。选举完成后,DR和 BDR 的字段记录已知的DR和BDR的RouterID。
路由器接口根据听到的Hello报文,生成邻居表并在接口维持三个集合:
DR集合
BDR集合
DRother(非 DR非 BDR但是有资格成为DR和 BDR的路由器)集合

过程如下。
当OSPF接口开启后,在Hello报文中设置DR/BDR字域为全0,此时 DR/BDR未知。同时,Wait timer启动,时长为4倍的Hello间隔。
如果收到的Hello报文中 DR及 BDR字域为非空,则 Wait计时器停止,接受当前DR/BDR的选择。
如果在Wait计时器超时后,仍未学习到DR/BDR,则开始DR/BDR选举。如果 BDR集合为空,则从 DRother集合选举BDR;如果 DR集合为空,则从BDR集合选举DR。
据此,如果在没有DR/BDR的网络上,Wait计时器超时后,网络上的每台路由器都会先从DRother集合选择BDR,再把BDR提升为DR;再重新从 DRother集合选择 BDR。至此,选举结束,开始邻接建立。

例如拓扑图:

 开始时还未建立邻居,邻接关系,Hello报文中DR和BDR字段为0

 Hello报文开始相互交互,由于未收到含有DR和BDR非空字段的Hello报文,wait定时器超时开始进行BDR的选举,DRother集合中包含AR7,AR8,AR9,通过比较优先级和RID大小先将RID为9.9.9.9的路由器选举为BDR,再将9.9.9.9选举为DR,在进行选举BDR,将RID为8.8.8.8的路由选举为BDR

 此时hello报文中DR字段BDR字段不再为空

OSPF(Open Shortest Path First)在广播多路访问网络中,每个这样的网络都必须选出一个 DR(Designated Router)一个 BDR(Backup Designated Router)[^3]。其选举方式如下: - 所有 Router 都宣称自己是 DR BDR 发送 Hello 包,除非自己没有选举资格。在选举过程中,每个 Router 在接收到 Hello 包之后,检查其 DR BDR 字段,建立一个备选的 BDR 的集合。该集合包括所有未宣称未 DR 的 Router,因为参加 DR 竞选的 Router 不具备 BDR选举资格。在网络的最开始状态,所有的 Router 都同时宣称自己是 DR BDR,此时该候选的 BDR 集合为空,所以实际中总是先选择出来 DR,再选择出来 BDR[^2]。 - 在统计的集合中,选取出一个最优先的 Router 被选举BDR。 - 在所有宣称自己为 DR 的路由中选举一个最优先的 Router 为 DR。如果没有任何的 Router 宣称自己为 DR,那么 BDR 被推举为 DR[^2]。 Router-id 是路由器唯一标识,用来标识每个路由器的身份,其选举规则为:手工指定的优先级最高;回还口 IP 地址最大;物理接口 Ip 地址最大[^4]。 需要注意的是,若三台路由同时开启 OSPF,会按照正常原则进行 DRBDR 选举,但如果启动顺序不同,可能导致 DRBDR选举不按照优先级 router id 的大小,而是按照 OSPF 启动的顺序,可通过将三台路由同时 reset ospf process 来消除这一干扰[^1]。 ### 示例代码 以下是一个简单的 Python 示例,模拟了 Router-id 的选举逻辑: ```python # 定义路由器信息 routers = [ {"name": "Router1", "manual_id": None, "loopback_ip": "192.168.1.100", "physical_ip": "10.0.0.1"}, {"name": "Router2", "manual_id": "1.1.1.1", "loopback_ip": "192.168.1.200", "physical_ip": "10.0.0.2"}, {"name": "Router3", "manual_id": None, "loopback_ip": "192.168.1.300", "physical_ip": "10.0.0.3"} ] def select_router_id(router): if router["manual_id"]: return router["manual_id"] elif router["loopback_ip"]: return router["loopback_ip"] else: return router["physical_ip"] # 选择 Router-id for router in routers: router_id = select_router_id(router) print(f"{router['name']} 的 Router-id 是: {router_id}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值