OSPF在广播类型的网络拓扑中DR和BDR的选举
指定路由器(DR):
一个网段上的其他路由器都和指定路由器(DR)构成邻接关系,而不是它们互相之间构成邻接关系。
备份指定路由器(BDR):
当DR出现问题,由BDR接手DR的工作,同时会在选举出一个BDR。
其他路由器我们叫做DR Other。
BDR首先会和DR形成邻接关系;
其它的路由器(DR Other)也要和BDR形成邻接关系。
这样做是有原因的,当DR出故障以后,BDR会成为新的DR。如果DR other不和BDR形成邻接关系,网络的流量就会中断时间很长,因为建立邻居关系是要花一定时间的,在这段时间内,网络的流量是不通的!
DR other和BDR形成邻接关系,当BDR切换为DR时,只需要发送LSA,向DR other告知新的DR即可,LSDB的内容基本上不变!所以能够节省时间,让BDR真正的起到备份的作用!
DR和BDR的选举规则:
具有最高OSPF优先级的路由器会被选为DR,优先级默认为1。
如果OSPF优先级相同,则具有最高Router ID的路由器会被选为DR。
Route-id选举规则:
-
手工配置最优先
-
当设备有loopback口时,路由器选取它所有loopback接口上数值最高的IP地址
-
如果没有loopback接口,就在所有物理端口中选取一个数值最高的IP地址
需求:(描述实验的要求)
-
R1 R2 R3属于OSPF 的骨干区域,R1 R2 R3位于10.1.1.0/24 网段.
-
R2 R3 R4 位于OSPF 的40.1.1.0/24 网段.
-
希望R2 作为 10.1.1.0 网段的DR, R3作为BDR;R3 作为40.1.1.0 网段的DR,R2 作为BDR.
拓扑:

分析难点以及完成的思路
按照要求配置,首先正常配置OSPF的基础命令,保证在修改DR和 BDR之前全网互通,配置完成之后再去测试连通性,全部测试完毕之后,修改我们的DR和BDR,查看我们修改之后的DR和BDR设备是否成功达到我们的要求
配置命令
R1 配置:
R1(config)#line console 0
R1(config-line)#exec-timeout 0 0
R1(config-line)#logging synchronous
R1(config-line)#exit
R1(config)#no ip do lo
R1(config)#interface loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.255
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface f0/0
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R2配置:
R2(config)#line console 0
R2(config-line)#exec-timeout 0 0
R2(config-line)#logging synchronous
R2(config-line)#exit
R2(config)#no ip do lo
R2(config)#ho R2
R2(config)#interface loopback 0
R2(config-if)#ip address 2.2.2.2 255.255.255.255
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface f0/0
R2(config-if)#ip address 10.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface f0/1
R2(config-if)#ip address 40.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R3配置:
R3(config)#line console 0
R3(config-line)#exec-timeout 0 0
R3(config-line)#logging synchronous
R3(config-line)#exit
R3(config)#no ip do lo
R3(config)#ho R3
R3(config)#interface loopback 0
R3(config-if)#ip address 3.3.3.3 255.255.255.255
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface f0/0
R3(config-if)#ip address 10.1.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface f0/1
R3(config-if)#ip address 40.1.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R4配置:
R4(config)#line console 0
R4(config-line)#exec-timeout 0 0
R4(config-line)#logging synchronous
R4(config-line)#exit
R4(config)#no ip do lo
R4(config)#ho R4
R4(config)#interface loopback 0
R4(config-if)#ip address 4.4.4.4 255.255.255.255
R4(config-if)#no shutdown
R4(config-if)#exit
R4(config)#interface f0/1
R4(config-if)#ip address 40.1.1.4 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#exit
启用OSPF,默认情况下,OSPF进行DR选举时的优先级 默认为1,比较规则是 优先级越大越优先,优先级相同, router-id越大越优先。因此干预选举可以通过设置router-id和修改接口的优先级进行。在10.1.1.0 网段上,由于R1 R2 R3的优先级为默认的1 ,因此 优先级大的 R3(3.3.3.3),就成为DR,R2(2.2.2.2)成为BDR.但是要考虑,如果R1 R2率先接入网络,当DR BDR选举完成之后再接入R3的话,R3错过选举之后,就不能抢占DR BDR了。
R2 R3 R4也一样,因此正常情况下R4为DR,R3为BDR
R1配置:
R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1 //手工指定router-id
R1(config-router)#network 1.1.1.1 0.0.0.0 area 0 --------采取反子网掩码的方式进行通告,类似于通告了一个1.1.1.1 255.255.255.255 的路由信息,采用反子网掩码,是为了区别配置IP地址是的子网掩码
R1(config-router)#network 10.1.1.0 0.0.0.255 area 0
R1(config-router)#exit
R1(config)#end
R2配置:
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 2.2.2.2 0.0.0.0 area 0
R2(config-router)#network 10.1.1.0 0.0.0.255 area 0
R2(config-router)#network 40.1.1.0 0.0.0.255 area 0
R2(config-router)#end
R3配置:
R3(config)#router ospf 1
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 3.3.3.3 0.0.0.0 area 0
R3(config-router)#network 10.1.1.0 0.0.0.255 area 0
R3(config-router)#network 40.1.1.0 0.0.0.255 area 0
R3(config-router)#exit
R4 配置:
R4(config)#router ospf 1
R4(config-router)#router-id 4.4.4.4
R4(config-router)#network 4.4.4.4 0.0.0.0 area 0
R4(config-router)#network 40.1.1.0 0.0.0.255 area 0
R4(config-router)#end
这时,为了满足要求,让R2成为10.1.1.0 网段的DR,可以修改R2的router-id,改为22.22.22.22
,只要比R3的3.3.3.3 大就可以;为了是R3成为40.1.1.0 网段的DR,可以修改R3的f0/1
的接口优先级。
R2配置:
R2(config)#router ospf 1
R2(config-router)#ro
R2(config-router)#router-id 22.22.22.22
Reload or use "clear ip ospf process" command, for this to take effect //系统提示,要想新的router-id生效,要重启OSPF进程
R2(config-router)#end
R3 配置:
R3(config)#interface f0/1
R3(config-if)#ip ospf priority 5
R3(config-if)#end
这个时候,将R1 R2 R3 R4的OSPF进程重启,然后再观察。
R1配置:
R1#clear ip ospf process
Reset ALL OSPF processes? [no]: y //重启OSPF进程,这个要在四个路由器上同时敲下去
这时可以看到10.1.1.0网段,R2的router-id最大成为DR,R3的router-id次之,成为BDR;
40.1.1.0 网段,R3的优先级最大成为DR,R2的router-id最大,成为BDR.
按照正常配置完成之后,全网互通,在修改DR和BDR之后需要清一下OSPF的进程,让他们重新选举DR和BDR,如果不重启进程会发现DR和 BDR没有变化
当DR优先级为0时,通过这个配置,也可以控制DR、BDR的选取!如果想让某台路由器永远都是一个LAN上的DR,则可以将其它的路由器的DR优先级都配置为0。
DR、BDR是终身制,不能被抢占的,这一知识点也是比较奇怪的,我们上面说了DR/BDR是选取出来的,理论上在一个LAN上,应该是优先级最大的路由器被选取为DR的。
但在很多场景中,小伙伴看到的并不是优先级最大的路由器作为DR!因为DR/BDR的选取是不能被抢占的!
只要某台路由器在一个LAN上,已经被选取为DR,则它会一直是DR!只有等它重启或者关机了,才会重新选取,也就是说DR/BDR是终身制的!
这样做主要是为了网络的稳定,在真实网络中,稳定是压倒一切的!即使某种技术最新,某个设备性能最强,但是如果影响到稳定,就不会被优先选择!
所以想要让某个路由器永远作为DR,则只能其它路由器的优先级修改为0!
相关文章:
OSPF在广播类型的网络拓扑中DR和BDR的选举
指定路由器(DR): 一个网段上的其他路由器都和指定路由器(DR)构成邻接关系,而不是它们互相之间构成邻接关系。 备份指定路由器(BDR): 当DR出现问题,由BDR接…...
系统学习Linux-Mariadb高可用MHA
概念 MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上…...
慢SQL的原因
如何排查慢SQL问题 识别慢SQL:使用数据库性能监控工具,如慢SQL日志,识别耗时较长的查询。执行计划分析:使用数据库提供的分析工具,例如EXPLAIN来查看查询的执行计划,判断是否存在全表扫描,索引…...
php正则替换文章的图片
要使用正则表达式替换文章中的图片链接,可以按照以下步骤进行操作: 1. 获取文章内容:首先,你需要获取包含图片链接的文章内容。你可以从文件中读取文章,或者从数据库中检索文章内容。 2. 使用正则表达式匹配图片链接…...
57 | TAPTAP客户端分析
TAPTAP客户端分析 一、用户群分析 首先,TapTap用户群可分为三大类: 游戏爱好者游戏发烧者游戏开发者(次要用户,有开发者后台,可以显示数据,不重点分析)注:爱好者与发烧者区别在于,前者是用空余时间来玩游戏,时间不如后者充足,且后者更执着于游戏,游戏种类更多。 …...
开源了一套基于springboot+vue+uniapp的商城,包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发
RuoYi-Mall-JAVA商城-电商系统简介 开源了一套基于若依框架,SringBoot2MybatisPlusSpringSecurityjwtredisVueUniapp的前后端分离的商城系统, 包含分类、sku、商户管理、分销、会员、适合企业或个人二次开发。 前端采用Vue、Element UI(ant…...
Android进阶之多级列表
遇到一个需求需要显示多级列表,因为界面是在平板上的,所以层级是从左向右往下排的,类似于 我当时的写法是在xml布局里一个个RecyclerView往下排的 当然前提是已经规定好最大的层级我才敢如此去写界面,如果已经明确规定只有两级或…...
Stochastic: Distribution-Expectation-Inequalities
见:https://www.math.hkust.edu.hk/~makchen/MATH5411/Chap1Sec2.pdf...
Java算法_ 二叉树的最大深度(LeetCode_Hot100)
题目描述:给定一个二叉树 ,返回其最大深度。root 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/…...
行业追踪,2023-08-18
自动复盘 2023-08-18 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
js将项目中的图片上传到服务器
项目上有时候会有奇怪的需求,比如前端有一些示例,想点击按钮就能上传图片,而这个图片是在前端的项目中的,如果不上传吧,又获取不到一些业务数据的id,但后端又不想为这块功能做特殊的处理,这时想通过前端直接上传到后端,需要file对象才可以。 这个时候我们需要将img转换…...
【C语言】指针的进阶
目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名和数组名区别 3.数组指针的使用 四、数组参数与指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针…...
【Windows系统编程】03.远线程注入ShellCode
shellcode:本质上也是一段普通的代码,只不过特殊的编程手法,可以在任意环境下,不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…...
第1天----验证一个字符串是否是另一个字符串的子串
本文我们将学习如何去验证一个字符串是否是另一个字符串的子串。 一、小试牛刀: 题目描述 输入两个字符串,验证其中一个串是否为另一个串的子串。 输入格式 两行,每行一个字符串。 输出格式 若第一个串 s 1 是第二个串 s 2 的子串,…...
项目实战第四十三讲:使用模版模式优雅实现财务编辑费用
项目实战第四十三讲:财务编辑费用 本文是项目实战第43讲:使用模版模式优雅实现财务编辑费用。支持查看司机填写费用信息,并且附件管理支持展示司机上传费用照片。 文章目录 项目实战第四十三讲:财务编辑费用1、项目背景2、主要技术3、项目职责4、项目实现4.1、表结构4.2、流…...
[JavaWeb]【六】web后端开发-请求响应
前言:请求响应 目录 一 引子 二 请求 2.1 Postman 2.1.1 安装 2.1.2 创建工作空间 2.1.3 添加接口 2.2 简单参数 2.2.1 原始方式(不推荐) 2.2.2 SpringBoot方式-GET(参数名与形参变量名相同) 2.2.3 SpringBoot方式-POST(参数名与形参…...
uniapp websocket机制 心跳 重连
在开发程序过程中通信功能还是比较常用到的,本文主要介绍的是uniapp中websocket的使用 websocket建立连接后,断开、心跳机制重新链接的一个过程。 关于uni.connectSocket可仔细阅读uniapp官网中的uni.connetSocket以及连接socket创建的实例SocketTask …...
labelme安装以及标注自己的目标检测数据集
目录 一、labelme安装指令 二、使用教程 三、 快捷键 一、labelme安装指令 winR之后在弹出的对话框中输入cmd按回车进入终端 conda activate 虚拟环境名称 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/ 二、使用教程 安装成功之后在终端输入label…...
归并排序JS
当然,下面是使用JavaScript编写的归并排序的示例代码。归并排序是一种分治算法,其基本思想是将数组分成两半进行排序,然后将排序后的结果合并在一起。 function mergeSort(arr) {if (arr.length < 1) {return arr;}const middle Math.fl…...
matlab 计算点云平均密度
目录 一、算法原理二、代码实现三、结果展示四、C++版计算结果本文由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 采样设备不同、设备距离场景远近不同,会使点云密度产生差异。现有的对点云密度的估算方法有基…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...
