百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

学习回顾——OSPF路由协议(0x0D)-OSPF Router ID和DR、BDR选举原理

liebian365 2024-10-22 15:33 35 浏览 0 评论

Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数。每个运行OSPF的路由器都有一个Router ID,其格式和IPv4地址的格式是一样的。在实际网络部署中,考虑到协议的稳定,推荐使用路由器上Loopback接口的IP地址作为路由器的Router ID,因为Loopback接口一旦创建即永久有效(不能关闭,但可以删除)

1) Router ID选举规则

Router ID的选取有两种方式

l 通过命令行手动配置:

l 设备自动选举:如果没有手动配置Router ID,设备会从当前活跃接口所配置的IP地址中自动选举一个作为Router ID。其选择的顺序是:优先从Loopback接口地址中选择最大的IP地址作为RouteID。如果没有配置Loopback接口,则在解耦地址中选取最大的IP地址作为Router ID.

Router ID一旦配置即不会改变,即使对应的接口不存在或者关闭了也不会再改变。只有在重新配置系统的Router ID或OSPF的Router ID,并且重新启动OSPF进程后,才会重新进行Router ID的选举。


总体Router ID的选举和刷新规则如下

① 如果在系统视图下通过Router ID router-id命令进行了配置,按照配置结果设置。

② 如果没有在系统视图下通过router id router-id命令进行配置,并且已经存在配置有IP地址的Loopback接口,则选择Loopback接口地址中最大的作为Router ID。

③ 如果没有在系统视图下通过router id router-id命令进行配置,并且不存在配置有IP地址的Loopback接口,则董其他接口的IP地址中选择最大的一个作为Router ID(不考虑接口的UP/Down状态)。

④ 当且仅当被选举为Route ID的接口IP地址被删除或者修改时,才触发重新选择Route ID的过程。接口状态的改变不会导致Router ID的重新选择。

⑤ 原理选择了一个非Loopback接口的地址作为了Router ID,现在又配置了一个Loopback接口地址,不会导致Route ID的重新选择。

⑥ 现在配置了一个更大的接口IP地址,也不会导致Router ID的重新选择。

⑦ 系统系统启动过程中,在协议希望获取Router ID时,路由模块可能还没有还没有取得所有的接口地址信息,因此很可能选择一个比较小的接口地址作为Router ID来返回给协议,这不应该视为问题。

⑧ Router ID不可以是0.0.0.0或者255.255.255.255。

2) 选举DR和BDR的原因

在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。如图所示,网络中有n台路由器,则需建立n×(n-1)/两个邻接关系,如图中作图。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。



为了解决这一问题,OSPF定义了DR。通过选举产生DR后,所有其他的设备都逄信息发送给DR,由DR将网络链路状态LSA广播出去。

为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除了DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。

3) DR和BDR选举的原则

在广播网络和NBMA网络中,为了稳定地进行DR和BDR选举,OSPF规定了一系列的选举规则,包括选举制、终身制和和继承制。

(1) 选举制

选举制是指DR和BDR不是认为指定的,而是由本网络中所有路由器共同选举出来的。路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格,本网段内DR优先级大于0的路由器都可作为“候选人”。选举中使用的“选票”就是Hello报文,每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器。

当处于同一网段的两台路由器同时宣布自己是DR时,优先级最高者为DR,次高者为BDR。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。如图所示,根据选举规则可得出要使10.1.1.0/24网段AR1位DR,AR3位BDR。



(2) 终身制(非抢占制)

终身制也叫非抢占制。每一个新加入的路由器并不急于参加选举,而是先考察一下本网段中是否存在DR,观察时长为Waiting计时器。在Waiting计时器时间内,发送的Hello报文不会带有DR和BDR信息,即不能被选举为DR或BDR。但是如果在Waiting计时器时间内所收到的Hello报文中都没有DR、BDR信息,则在Waiting计时器超时后发送指定本地路由器作为DR的Hello报文发送给本网段其他路由器。

如果在本地路由器的Waiting计时器时间内,收到了其他路由器的Hello报文中带有DR和BDR信息,则表明目前网段中已经存在DR、BDR,这样即使本地路由器的的DR优先级比现有的DR还高,也不会在声称自己是DR,而承认现有的DR。因为网段中的每台路由器都只和DR、BDR建立邻接关系(DROther之间仅需建立了邻居关系),如果DR频繁更换,则会引起本网段内的所有路由器重新与DR、BDR建立进阶关系。这样会导致短时间内网段中有大量的OSPF报文在传输,减低网络的可用带宽。




如图所示,假设AR1是后面才加入网络的,在此之前AR2和AR3之间已选举好DR和BDR。这样AR1在收到AR2、AR3的Hello报文后,肯定会发现AR3位DR,AR2位BDR,于是虽然AR1的优先级(120)要高于当前DR(AR3)的优先级,也不会参与DR、BDR选举,而是直接承认原理的DR和BDR。

终身制有利于增加网络的稳定性、提高网络的可用带宽。实际上,在一个广播网络或NBMA网络上,最先启动的两台具有DR选举资格的路由器将成为DR和BDR。

(3) 继承制

继承制是指如果原来DR发生故障了,那么下一个当选为DR的一定是BDR,其他的路由器只能去竞选BDR的位置。这个原则可以保证DR的稳定,避免频繁地进行选举。由于DR和BDR的数据库是完全同步的,这样DR故障后,BDR立即成为DR,履行DR职责,而且邻接关系已经建立,所以从角色切换到承载业务的时间会很短。同时在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需的时间比较长,但已经不会影响路由的计算。

如图所示,原理的DR是AR1,现在假设发生了故障,则原来的BDR AR3会直接成为新的DR,而原来为DROther的AR2成为新的BDR(如果本网段中还有其他路由器,AR2会再与其他路由器进行BDR选举)


4) DR和BDR选举过程

DR和BDR的选举仅在广播链路或NBMA链路上进行,具体选举过程如下

① 运行OSPF的接口UP后会向邻居路由器发送Hello报文,同时进入Waiting状态。在Waiting状态下会有一个Waiting计时器,该计时器的长度与Dead计时器是一个样的(缺省值为40s,用户不可自行调整)

② 在Waiting计时器超时前发送的Hello报文是不带DR和BDR字段的,即本地路由器不能参与网段的DR和BDR选举,仅可接受网段中其他路由器间选举的已有的DR和BDR。但在Waiting计时器超时后,如果还没有收到来自网段中其他路由器发送的带有DR和BDR的Hello报文,则发送声称自己是DR的Hello报文,参与网段中的DR和BDR选举

DR和BDR的选举规则是:优先选择优先级最高的作为DR,次高的作为BDR。DR优先级为0的路由器只能成为DR Other;如果优先级相同,则选择Router ID较大的的路由器成为DR,次大的成为BDR,其余路由器成为DR Other。

③ 在Waiting计时器超时前如果收到的Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,而不会触发选举,无论本地路由器的Router ID或者DR优先级有多大。直接离开Waiting状体,开始邻居同步。

④ 当原来DR因为故障Down掉之后,原理的BDR会直接集成DR角色,同网段中剩余的优先级大于0的路由器会竞争成为新的BDR。


【经验之谈】根据前面分析可得出,只有连接在同一网段中的Router ID,或者配置不同DR优先级的路由器接口同时Up,在同一时刻进行DR选举(即在同一时间它们的Waiting计时器超时)才会在整个网段路由器中真正应用DR选举规则选举DR、BDR。否则总有至少一台路由器不能真正参与DR、BDR选举,最先启动的将成为DR,因为这台路由器的Waiting计时器超时前不会收到任何同网段中其他阿路由器发来的Hello报文中携带有DR、BDR字段信息。

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: