ospf hello时间和dead_OSPF分享-DR/BDR详解

  • DR: Designate router,指定路由器
  • BDR:Backup Disignate router,备用指定路由器
  • DROthers:其余非DR/BDR路由器
  • DR/BDR选举规则:先比较接口优先级,越大越优先。优先级相同,比较RID,越大越优先

在上一篇“OSPF邻居建立过程”的文章中,我们提到过“邻居的邻接关在到Two-way状态后,将触发DR/BDR的选举,才会进入到Exstart的DB报文交互阶段“,这边文章,我们将针对DR/BDR选举来做一次深如的分析。

在分析DR/BDR选举机制之前,我们要先了解下OSPF链路中的网络类型,以及它DR/BDR选举机制的关联。

1.网络类型

  • 点到点(point-to-point):比如T1/DS3/SONET链路,所有点到点链路上的有效邻居,最终都能形成有效的邻接关系,无需DR和BDR。因为整个链路上就自己2个,谁发OSPF信息都一样。
  • 广播网络(broadcast):比如ethernet/令牌环/FDDI网络,由于广播网络中是存在多地址的,而且是广播型的,所有发送的数据包,所有的终端都能收到,每个邻居都发信息,会造成混乱和不必要。所以在有了DR和BDR机制。广播网络中,DR和BDR将OSPFLSU/LSACK报文目标地址:224.0.0.5(ALLSPFRouter)组播,目标m ac地址:0100-5e00-0005。其余的路由器将LSU和LSA-ACK数据包则放松到224.0.0.6(ALLDRRouter),目标 Mac地址是0100-5e00-0006。简而言之,广播网络中OSPF的LSA和LSACK的传输和监听:DR将监听224.0.0.6,其余路由器监听224.0.0.5
  • NBMA(非广播多路访问):比如帧中继,ATM等,但没有广播的能力。这种场景下下,一个路由发送的OSPF报文,这个网络中的其他相连路由器无法收到。这个时候需要在路由器上增加额外配置,比如用指定的atm链路来建立邻居,当atm存在多个router时。这时也需要指定DR和BDR。
Tips:在NBMA网络中,路由器默认给down状态的邻居发送时间间隔“Pollinterval“( 默认120s)发送一个hello报文,其余网络则是普通的"Hellointerval" (默认10s)发送一次hello报文
  • 点到多点(point-to-multipoint):类似于多个点到点网络的一个集合,逻辑上可以看成一种hub-spoke或者full-mesh的状态,互联的路由器都是点对点链路,所有单个点对点连续上都能直接形成邻接关系,无需DR和BDR

综上,网络类型有4中(其实还有virtual-link,文章中暂不讨论),主要是针对路由器存在多址互联时,该如何来控制OSPF邻居的建立,和后续的OSPF报文转发,形成一个最优化的邻接拓扑,以达到一个最优化的OSPF报文转发。 在各种互联网络类型中,除了点对点(点对多点-其实也就类似多个点对点形成),广播和NBMA网络类型都有DR/BDR的概念,现在俨然已经是Ethernet(以太网)的天下,所以DR/BDR的出向实在是太常见了。下面我们来说说为什么需要DR。

2.说说为什么要有DR?

当一个互连链路中,链接了N个router,如果彼此都形成邻接关系,将存在N(N-1)/2个邻接关系,其实就是full-mesh结构,大大加大了LSA流量发泛洪(LSA泛洪机制会在文章后面讨论),DR的存在,则让其余所有路由和DR交互即可,作为整个多互联链路中的LS集散地。同时,如果是full-mesh结构,一个LSA传递到一个router,肯定也会从其他的router能接收到这个LSA,导致LSA重复流量大大加大。

DR就是相当于Hub-Spoke模式的中的Hub,所有其他路由器只和DR(其实还有BDR)建立邻接关系,彼此没有邻接关系,但让然是邻居,只不过邻接状态不是Full。上面我们说过,hello报文的“active nb"有自己的rid时,就已形成邻居,但邻接关系会处于“Two-way"状态。这多址网络中,这个邻接状态将一直维持下去。

简而言之,DR/BDR机制将更好的控制完全邻接关系建立和后续LSA泛洪流量的处理。

3.为什么要有BDR(上面提到过BDR)

如果这单个DR挂了,那是不是所有router又得重新来来一遍邻居的计算,选出新的DR,这个计算的过程带来的网络失效将是不能容忍的。所以有了BDR。
BDR和DR一样,所有路由器都会和DR和DBR分别建立邻接关系,而且DR和BDR也会形成邻接关系,当DR失效时,也是无影响的。
如下(”截图于TCP/IP路由-卷一“):下面3张图分别表示:

  • 在没有DR时,在多址网络中的邻接关系
  • 只有DR时,在多址网络中的邻接关系
  • 有DR和BDR时,在多址网络中的邻接关系

eaa30ff2a471016dfaa385fe8f486fec.png

d503a58aff945f0190efd539c1682be1.png

92d4cc33a734888a5a8481d864429e44.png

4.谁来做DR/BDR(选举)?

既然一个多址网络中,存在DR和BDR,两个都可以想其余所有邻接路由器泛洪SLA,那也得谁在做DR/BDR吧,那就选举吧:

1)DB/BDR选举前的一个 wait timer 计时器

当一个接口有效时,将发送Hello报文,并将DR/BDR字段设置为“0.0.0.0”,同时将等待一个计时器(wait timer),这个计时器的值 == RouterDeadInterval( HelloInterval*4),默认10s*4=40s。也就是说,当一个接口被OSPF认定为UP后,需要默认等待40s,才会进行DR/BDR的选举,而不是Two-way状态后,立即出发DR/BDR选举。这个计时器,可以在接口的OSPF属性下看到,但貌似没有命令可以单独修改,只能通过修改dead-interval来间接调整这个 wait timer。

6e915941d326e40175f610f58d9bee2d.png

2)DR/BDR选举过程原理

①路由器和邻居路由器建立起“Two-way”的双向通信邻接关系(在OSPF邻居建立过程中见过),然后触发DR/BDR选举机制。将检查从该链路上收到的所有Two-way状态邻居的Hello报文的“优先级、DR、BDR”字段,列出一个具有DR/BDR选举资格的路由器列表(接口优先级,默认为1,如果设置为0,则代表不参加DR/BDR的选举)。

Tips:Hello报文中的DR/BDR字段,是用的链路接口IP,而不是RID

②收集完hello报文中DR/BDR字段后,将其中未宣告DR(也就是DR字段为空)Hello报文中的BDR字段收集成一个子集。如果在这个子集中,存在一个或者多个路由器,这个子集可以包含路由器本身,只要priority!=0。则按照优先级高,则成为BDR,若优先级相同,则Router-id大优先的原则,尝试BDR选举。

③如果上面的子集为空,也就是BDR也都为空,则从所有邻居(已经达到two-way状态)中挑选优先级最高的,之后再选router-id最大的路由器其对应的链路接口IP,作为BDR

④选举完了BDR,将开始选举DR。参照步骤:2),收集DR字段形成一个子集。如果这个子集不为空,则按照优先级高,则成为DR,若优先级相同,则Router-id大优先的原则,尝试DR选举。

⑤如果上面的子集为空,也就是所有hello报文的DR都为空的,则之前选举的BDR,篡位成为DR

⑥如果选举出来的DR或者BDR是自己,将重新按照上述步骤②~⑤步骤计算一遍;如果自己原本是DR/BDR,在现在不是了也会按照上述步骤②~⑤步骤计算一遍;

Tips:
当一个多址网络中,DR/BDR已经选举完成。一个新的路由器并且优先级更高,或者router-id更高,也不会影响现有的DB/
BDR角色,而是作为普通路由器加入这个多址网络中的DR/BDR模型。只有当我们reset DR和BDR的OSPF进程,才会导致
整个DR/BDR的选举过程重新进行时,这个路由器才会因为加入选举过程,成为新的DR。
如果当一个多址网络中,只有一个路由器可以参加选举DR/BDR,比如其余路由器的接口优先级都设置为了0(不参加DR/B
DR选举)。这个时候,将没有BDR的存在,所有DROthers都和单个DR建立邻接关系。当这个DR挂了,多址网络中没有了
DR,所有DROthers路由器的OSPF邻接状态将一直处于“Two-way”状态

5.实验环境说明DR/BDR选举过程

实验拓扑如下:

0685e5a1d9159fb2e7128b8076e375ae.png

所有在本例中,因为使用默认优先级(1),但R3的router-id更高,R2其次,自然成为了这个邻接关系中的DR/BDR,R1-1和R1-2,成为了DROthers。

1)路由器在开始协商OSPF邻居的初始阶段
当OSPF检测接口UP后,将该接口的OSPF状态设置成了“WAIT”,这个状态不会再邻接关系状态中体现(show),并开启了一个 wait timer计时器,默认 = DeadInterval = 40s。记住此刻的时间是:11:57:52.462

bea2a04ddb2af4bdf46f06669a24a41d.png

2)所有的路由器相互发送Hello报文,协商到Two-way状态,触发DR/BDR选举机制
如下图为DR(3.3.3.3)的选举过程:

ebc1aa8a1b35d5ec9e5e83019e390972.png

c83f7c8ce9b141d318a0c5404e8a4df8.png


①在和邻居的邻接关系处于Two-way状态后,并没有立即开始选举DR/BDR,而是等待“wait timer”计时器超时。如果可以在调试OSPF或者自己动手做个试验,OSPF邻接关系在达到Two-way,状态时,会明显卡顿一下,这个卡顿,就是在等待 wait timer超时

②在“11:58:32:471"时,DR/BDR选举开始了!和OSPF检测到接口UP并设置wait timer的时间:11:57:52.462,相差正好 40s。
③启动DR/BDR选举后,将按照上述的选举原理开始选举
因为所有从Two-way状态邻居收到的Hello报文(如下图),刚开始DR/BDR字段都是设置为“0.0.0.0”。

  • DR为空,生成一个BDR子集
  • BDR子集也为空,选择所有达到Two-way状态邻居RID最大路由器(包含自己)为BDR,那就是3.3.3.3
  • 生成DR子集,结果也是为空,那就将BDR设置为DR,就是3.3.3.3
  • 由于自己在计算过程中已经成为了DR,将继续按照该选举过程来一遍,进行BDR选举,最终选择了BDR为2.2.2.2

(所以DR路由器上其实是进行了2次选举,才确定DR/BDR)3)看看非DR路由器的选举
R2(DBR),根据上述规则,将DR和BDR都选举为:3.3.3.3,因为3.3.3.3不是自身路由器,所有DR和BDR可以是相同的路由器,且只需要一次选举就可以出结果,但其实相当于只有DR没有BDR

42a749009ef287d0d05e449deaca5742.png


R1-1和 R1-2,根据上述规则,将DR和BDR都选举为:3.3.3.3,因为3.3.3.3不是自身路由器,所有DR和BDR可以是相同的路由器, 且只需要一次选举就可以出结果,但其实相当于只有DR没有BDR

089e937eebf32d05b8f9a3d3e4133914.png

4)进入后续的邻接关系协商过程
当wait timer过后,“第一次"的DR/BDR选举已经完成,所有路由器都将DR(3.3.3.3)交互DBD报文继续协商了。
此时的邻接关系如下图,有且只有DR,没有BDR的存在:

c69051bf8649311c981512d9ca202afc.png

5)这个网络中的DBR跑哪去了!?
按照这个拓扑不是还会有DBR吗,而且R3也选举成了正确的DBR地址(2.2.2.2)呀。别急,接着往下看。
每经过一个Hello-interval,每个路由器都会发送一个Hello报文,这个时候,就携带了首次选举好的DR/BDR字段了。
我们以R1为例,他最后是如何将BDR也选举正确呢①如下图,是R1在首次DR/BDR选举完成前的最新一个Hello报文,此时的DR/BDR自然还是空。注意时间:11:58:26

de056b7861545498d0898460b58bc30a.png

②经过了一个Hello-interval后(11:58:36),R1再次组播发出一个Hello报文。因为已经选举了DR/BDR,所以携带了DR/BDR地址:123.123.123.3

b324f95bb8aa9efc59699eb6b6dbeebf.png

③其余路由器也会按照默认Hello-interval时间间隔,发送Hello报文,R1-1和R2报文类似,不在放图。
因为R1-2和R2的DR/BDR地址和R1-1一样,所以重新选举的结果还是一样,注意看时间的匹配

5e9da635b47eed9a98c01a5f808d536d.png

b40bcaf2ec1ebd73b338dc9cb76ad3c6.png

④ 当R1-1收到了R3发出的Hello报文并查看DR/BDR字段后,R1-1知道,BDR出现了,计算结果就和R3一样正确了

ff3c7ba108a7a7807bd28e4b14bc521e.png

47d5f7cb01362d13201ea18144e182ed.png

④同理R1-2和R2都能根据R3的Hello报文,完成正确的选举。 ⑤R1-1和R1-2发现了争取的BDR后,将得和DBR 从Two-way状态继续后续的邻接关系建立了。

e1db4239c83d270f36ddf10bd6c5a8ef.png

而R1-1和R1-2之间则不会有更新的邻接动作,因为他们是DROthers角色,一会一直位置在“Two-way"状态

7b61d7b2fc11f7d99bbe3cf888bbbb20.png

⑦此时的邻接关系,将达到正常结构

4daa3194aa28459f62f36890219c6da7.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值