DR BDR 选举测试

1. DR BDR 选举测试
环境: R1 与R2 已经建立了稳定的ospf 网络 R1 为DR R2 为BDR(广播型网络,大家讨论下这
时R3 加进来,R3 怎样完成DR 和BDR 的选举呢?
R1: 192.168.10.1
R2: 192.168.10.2
R3: 192.168.10.3
我想一般认为R3 不会再进行选举了直接为 DR 为R1 BDR 为R2
但是根据测试,R3 还是会进行一个DR 和BDR 的选举过程。大家可以参考下卷一中文书(P288)
首先看第一步:
R3 会首先创建一个列表,这个列表包括:R1,R2,R3.,因为这三台都有选举资格,它的邻居和它自己。
第二步:
根据这个列表创建一个子集: 我想这时候这个子集应该为 R2,为什么呢?因为只有R2 没有宣称自己是
DR。
根据第三步选举了 BDR 就是R2.(符合测试结果)
然后到第五步:
要选举 DR 了,这个时候就会遇到一个问题:因为R3 和R1 都具有选举资格,而且R3 具有更高的router-id
但是为什么没选举R3 呢? 我认为的原因是这样的:(也是根据Jeff 的描述:具有选举资格的路由器在
Hello 数据包的DR 字段包含它们自己的接口地址)这句话很重要,大家理解一下。这句话决定了R3 不能
选举为新的DR,因为它的DR 字段的地址是0.0.0.0 不是自己的接口地址,不知道这里大家能不能明白。
所以最后仍然选举 R1 为DR。
gole_huang 网友的回复:
楼主的态度值得本人学习。
但有个问题。DR、BDR 选举应该是在ExStart 状态下的,进入了ExStart 状态的路由器,应该已经接收
到了全网所有neighbor 的hello。Hello 包中分别有一个DR、BDR 的字段记录了当前DR、BDR 的情况。
若没有开始选举,所有路由器这两个字段均为0.0.0.0;当选完DR、BDR 后,该两个字段分别记录网络
上的DR、BDR 的routerID。根据楼主的例子,R3 在与R1、R2 进入2-way 前已经知道了该广播网络
(或者nbma)上DR(R1)和BDR(R2)的情况了。我的问题是,R3 还会创建列表吗?书上面说是不
会的,今天楼主提到这个问题,本人没有思考过。我不懂如何查看这些列表。请教楼主是如何做测试的呢?
__________________
“但有个问题。DR、BDR 选举应该是在ExStart 状态下的,进入了ExStart 状态的路由器,应该已经接
收到了全网所有neighbor 的hello。Hello 包中分别有一个DR、BDR 的字段记录了当前DR、BDR 的情
况。若没有开始选举,所有路由器这两个字段均为0.0.0.0;当选完DR、BDR 后,该两个字段分别记录
网络上的DR、BDR 的routerID。”
对于你这个问题我开始也是很困惑的,但是如果 R1 和R2 发过来的helloDR BDR 字段也是0.0.0.0 的
话,这就和一个理论相矛盾:新加入的路由器不管其优先级多高都不会改变原有ospf 网络已经存在的DR
BDR (仍不能改变BDR 还有待实验证明,不改变DR 这是大家都认可的,除非这个DR 有问题了,才会
重新选举DR)根据这个怀疑我就做了以上的实验环境。
通过debug 察看DR BDR 的选举过程,通过抓包察看hello 包的数据。
这是在 R3 上做的debug 获取的信息:
Router(config)#router ospf 1
Router(config-router)#network 192.168.10.0 0.0.0.255 area 0
Router(config-router)#
00:28:34: OSPF: Interface FastEthernet0/0 going Up
00:28:34: OSPF: Send hello to 224.0.0.5 area 0 on FastEthernet0/0 from 192.168.10.3
00:28:35: OSPF: Build router LSA for area 0, router ID 192.168.10.3, seq 0x80000001
00:28:39: OSPF: Rcv hello from 192.168.100.2 area 0 from FastEthernet0/0 192.168.10.2
00:28:39: OSPF: 2 Way Communication to 192.168.100.2 on FastEthernet0/0, state 2WAY
00:28:39: OSPF: End of hello processing
00:28:44: OSPF: Rcv hello from 172.16.1.1 area 0 from FastEthernet0/0 192.168.10.1
00:28:44: OSPF: 2 Way Communication to 172.16.1.1 on FastEthernet0/0, state 2WAY
00:28:44: OSPF: Backup seen Event before WAIT timer on FastEthernet0/0
00:28:44: OSPF: DR/BDR election on FastEthernet0/0
00:28:44: OSPF: Elect BDR 172.16.1.1
00:28:44: OSPF: Elect DR 192.168.100.2
00:28:44: DR: 192.168.100.2 (Id) BDR: 172.16.1.1 (Id)
注:
172.16.1.1 为R2 的router-id
192.168.100.2 为R1 的router-id
(二)抓包结果如下:
前两个 hello 包,是在R3 上加入network 命令之前由R1 和R2 发给R3 的。展开第一个如下:
可以看到 DR 和BDR 字段的ip 不是0.0.0.0 。
从第三个hello 包开始就是加入network 命令后产生的。第三个包和第一个在DR 和BDR 字
段一致不是0.0.0.0。
第四个 hello 包就是network 以后R3 发出的第一个hello 包,如下:
可以看到 DR 和BDR 的字段为0.0.0.0 ,这是R3 发出来的第一个包。
通过抓包,R3 发出来的第二个hello 包DR 和BDR 字段就和R1 和R2 发的hello 包一致了。
整个实验过程,就没收到 R1 和R2 发出的DR 和BDR 字段为0.0.0.0 的hello 包。
回复 5 楼的网友:我觉得楼主太过钻牛角尖。
4 楼说的对,当进入一个已经选举好的系统,这个广播域里面就一直有多播通告,而且通告的内容已经包
含了DR 和BDR,新进入的路由器接收到这个多播数据,根本就不进入选举进程,直接进入路由通告交
换进程。
想一下,既然规定后进入网的路由器不允许抢夺DR 或BDR,那么作为一个效率的设计,是收到DR 和
BDR 的信息后,立刻就开始路由信息的交换进程,还是依然我行我素,进入选举进程,最终搞了半天还
是选举DR 失败,然后再进入路由信息的交换进程。
我想那些设计OSPF 协议和路由器内核的人不会那么不效率吧。
其实我也有你的疑惑
但是我不知道你有没有深入思考卷一(中文版P294 的那个ospf 状态机)如果这个状态机完全是依照思科
ospf 源代码作的,那么你可以看一下进入DRother 状态下的触发条件是IE9,这是进入DRother 状态的
唯一条件。也就是进入DRother 状态必须经过DR/BDR 选举的过程。
当然我这个假设的前提完全是参照状态机想象的,也没办法弄到思科ospf 的算法,只能研究到这个程度了。
你说到选举 DR BDR 影响效率,其实选举的过程是极其短暂的,毫秒级的单位这个其实并不影响ospf 的
效率。因为思科发送hello 报的默认时间是10 秒,当R3 接收到一个hello 后就开始选举DR BDR 在它
发送第二个hello 包的时候早已经计算出来了,怎么会影响效率呢,因为让R3 和R1,R2 建立邻居关系,
也至少发送两个hello 包,也就是20 秒的时间,计算DR BDR 的过程在这20 秒之内就完成了,从这一
点我觉得不影响效率。

你可能感兴趣的:(测试)