注:非常好的一个关于DR选举的解释,转过来了
感谢作者提供的资料
作者的博客地址,里面还有关于LSA的描述,不错 http://blog.myspace.cn/e/403532494.htm
------------------------我是分割线----------------------
OSPF中DR与BDR选举触发事件的研究
研究者:付泽群(月光)
指导老师:廖心建(已获得路由交换方向和服务提供商方向的双CCIE认证)
问题的提出:DR和BDR选举的触发事件是什么?一个路由器,在什么情况下会认定DR/BDR选举完成,而DR/BDR选举完成则意味着这个多路访问网络已经稳定,那么换而言之,在什么情况下,一个路由器会认定这个网络已经稳定?
前置知识:已经大致了解DR/BDR选举过程,并至少已经通读了
《TCP_IP路由技术(卷1)》中关于DR/BDR选举过程的描述。
解决问题:
首先我们来看下DR/BDR选举中,很少被人所知的过程,其实一个路由器是先选出BDR的!但此时的BDR不会被写入接口数据库,而是会立刻将此BDR提升到了DR的地位并写入数据库,然后会再看看是否有人声称他自己(这点在后面会提及)是BDR,如果没有人声称的话,他会再次进行BDR的选举,并写入接口数据库中向外发通告(总结自OSPF的RFC文档)
当一个路由器新接入一个多路访问网络的时候,他会先等待waittime计时器到期,到期后,将按DR/BDR选举原则进行选举,其时间默认是hello间隔的四倍,而其之所以要先等待waittime计时器到期是因为它刚刚接入此网络,不知道此网络的状况,因此他需要收集hello包进行分析,这就是waittime计时器的作用。而如果其收集到的hello包有证据表明此网络已经稳定,即DR/BDR选举已完成,那么他将不会等待waittime计时器到期而立刻触发选举。那么,触发选举的的事件有哪些呢?
触发事件一:当新接入的路由器接收到了一个来自BDR的hello包,且DR字段不为空后,他将不会等待waittime计时器到期而立刻选举。
提出疑问:为什么新接入的路由器”宁可相信” BDR,而不愿相信DR的数据包呢?也就是说如果是DR发送了一个hello包,且DR/BDR字段都不为空,为什么不会触发选举?
其实仔细想想waittime计时器的作用,我们会发现其实只要路由器能够确定此网络中的DR/BDR的选举已经完成,那么waittime计时器即可不必理会,那么关键就在于路由器凭什么认定此网络中的DR/BDR的选举已经完成。仔细回顾下刚才所讲的DR/BDR选举中,很少被人所知的过程,我们会发现,BDR是最后被写入数据库的,这也就意味着,一旦BDR在数据库中出现,也就绝对意味着选举的完成,而如果是DR的话,显然不能说明什么问题。
设计实验一:验证触发事件一
/
一:R1首先运行OSPF,交换机的全部端口都开启 portfast特性,过了30秒后(用秒表计时),在激活 R2的OSPF, 选举结果为:
R2是DR,R1是BDR,但此时因为R2上的waittime计时器还未到期,所以R2暂时不会对外声称自己是DR,也就是说,他暂时不会承认R1的选举结果
那么也许我们会问,为什么别人宣称自己是DR/BDR的时候,路由器不会马上接受,而是要坚持等待waittime计时器的到期。
其实仔细想想路由器的逻辑(路由协议也是由人设计出的,其实这也是在思考设计者为什么要这样设计),,要知道,因为路由器是新接入网络的,所以他会认为我刚接入此网络,别人就对我说,我是DR/BDR,这显然是不可信的
二:在R3上输入 debug ip ospf event ,并运行ospf ,这是我们会发现,R3上出现了这样一条 debug信息:
Backup seen Event before WAIT timer on Ethernet0
(这说明了路由器的确没有等waittime计时器到期就被触发选举。)
OSPF: DR/BDR election on Ethernet0
OSPF: Elect BDR 1.1.1.1
OSPF: Elect DR 1.1.1.1
此信息显示就是DR/BDR选举的第一步,也就是先选出BDR,在将其提升到DR的地位,但让人奇怪的是,这条信息接连出现了好几次,直到R3收到了来自于R2的数据包以后,R3才将DR字段换成了 R2,debug信息显示如下:
OSPF: Neighbor change Event on interface Ethernet0
(这说明邻居状态改变也是触发事件之一)
OSPF: DR/BDR election on Ethernet0
OSPF: Elect BDR 1.1.1.1
OSPF: Elect DR 2.2.2.2
DR: 2.2.2.2 (Id) BDR: 1.1.1.1 (Id)
请注意!R3之所以较晚收DR的hello包,和R2的waittime计时器到期较晚没有任何直接关系!只要接口被激活了OSPF,就会按照hello间隔来发送hello包!
要知道BDR的hello包中也同样包含了DR字段,那么为什么R3不愿相信BDR 的hello包中声称的DR呢?
仔细想下路由器的逻辑(路由协议也是由人设计出的,其实这也是在思考设计者为什么要这样设计),要知道,在收到了BDR的hello包中所宣称的 DR后,但是由于R3并未收到R2的hello包,所以他会认为也许 此网络中的DR并不存在,所以才拒绝承认。
为了验证猜想:设计如下实验:
设计实验二:
略,提示:可分为两种情况:
一:DR的hello包先收到,而后在收到BDR的hello包
(此时,当BDR的hello收到后,会立刻承认DR和BDR)
二:仅仅只收到了BDR的hello包,而未收到DR的hello包
(此时,R3会在自己的的wattime计时器到期后,选举自己为DR,这同时也说明了wattime计时器到期 也是选举的触发事件之一)
触发事件二:当收到了一个来自于DR的hello包,且此hello包中的BDR字段为空。
那么让我们来想想,在这种情况下,新接入的路由器为什么就相信了此网络中的选举已经结束呢?
分析路由器的逻辑,如果此网络中,仅仅只有一台路由器具有选举资格或者该网络中仅仅只有一台路由器,那么就会出现只有DR而无BDR的现象,换而言之,这种情况下,DR/BDR的选举已经完成,所以新接入的路由器认为此种情况合理,将会被立刻触发选举。
DR/BDR选举触发事件总结:
一:waittime计时器到期
二:收到了一个来自BDR的hello包,且DR字段不为空
三:收到了一个来自DR的hello包,且BDR字段为空
四:邻居状态的改变
(这里要注意,有几种情况会让路由器认为邻居状态发生改变,详见
《TCP_IP路由技术(卷1)》英文电子版 第 403 页 )
此问题研究的实际意义:假设有两个公司,分别处于两个不同的交换机下,并且交换机下的路由器都是运行的OSPF,假设现在两公司要合并,那么作为管理员的你,必须能预料到两个交换机相接后,可能对DR/BDR带来的影响,如果说 合并后DR/BDR与原先或者说与你预料的不一致,就要知道排错,已经出错的原因,如果这些不懂的话,恐怕很难搞定
注:因为此博客不支持贴图,所以实验的拓扑图这里没有,但我已经把其总结成了 word 文档,有志于在思科上超越大多数国内CCIE水平的朋友可以联系我,关于DR/BDR选举的触发事件,国内能弄得懂的绝对没几个!不相信,你们可以把这个问题拿去考你们身边的那些已经通过了CCIE的人!