【网络协议】开放式最短路径优先协议OSPF详解(四)
前言
在本章的第一部分和第二部分中,我们探讨了OSPF的基本配置,并进一步学习了更多OSPF的概念,例如静态路由的重分发及其度量值。在第三部分中,我们讨论了多区域OSPF。在第四部分中,我们将关注OSPF与多访问网络,最后会通过一个更复杂的OSPF实验来结束。
【网络协议】开放式最短路径优先协议OSPF详解(一)
【网络协议】开放式最短路径优先协议OSPF详解(二)
【网络协议】开放式最短路径优先协议OSPF详解(三)
多访问网络
多访问网络是由两个以上的设备共享相同介质的网络。在下图所示的例子中,三台路由器和三台PC通过拓扑中心的两台交换机互连。这意味着路由器上连接到交换机的接口以及PC的接口都在同一个子网中。

另一方面,在点对点网络(Point-to-point networks)中,一个子网中只有两个设备。下图所示的两台路由器通过广域网链接(WAN link)互连,这就是点对点网络的一个例子。

在OSPF中,我们可以划分出以下五种网络类型:
- 点对点网络(Point-to-point)
- 点到多点网络(Point-to-multipoint)
- 广播多访问网络(Broadcast Multiaccess)
- 虚拟链路(Virtual links)
- 非广播多访问网络(Nonbroadcast Multiaccess, NBMA)
OSPF广播多访问网络中的问题
在广播多访问网络中,OSPF环境面临以下两个主要问题:
- 多重邻接关系(Multiple Adjacencies)
- LSA泛洪(Flooding of LSAs)
多重邻接关系
如前所述,在OSPF中,相邻的路由器通常会彼此建立邻接关系。在广播多访问网络中,这会成为一个主要问题。
举个例子:
在点对点网络中,邻居通常是直接相连的路由器。但在广播多访问网络中,例如下图所示,四台路由器通过同一子网直接相连。
这意味着,在此场景中,路由器将彼此泛洪LSA并相互建立邻接关系。
可以使用以下公式计算邻接关系数量:
n*(n-1)/2,其中n表示路由器的数量。
示例:
在下图中,有 4 台路由器。根据公式:
n*(n-1)/2 = 4*(4-1)/2 = 6 ,结果为6,蓝色箭头表示这些邻接关系。

在这个场景中,邻接关系的数量相对较少。但如果网络规模扩大,比如有100台路由器,可以想象会出现什么情况。这种情况会成为一个严重的问题,并对路由器的资源造成巨大负担。
LSA的泛洪(Flooding of LSAs)
如我们之前所学,OSPF使用触发更新(Triggered Updates),并将这些更新泛洪到所有相关路由器。
以上述场景为例,如果R1丢失了与其LAN接口的路由信息,该信息将被广播到R2、R3和R4。这些路由器又会将该信息泛洪到网络中的每一台路由器,除了信息的来源路由器(R1),以避免引发路由循环(Routing Loop)。
下图展示了这一过程。

绿色箭头表示R1上失效的网络。可以看到,这一信息被多次传播到R2、R3和R4。这种重复传播可能导致路由循环(Routing Loop)。
解决OSPF广播多访问问题的方案
在OSPF中,通过选举指定路由器(Designated Router, DR)和备份指定路由器(Backup Designated Router, BDR)来解决这些问题。

在第一次实例中,我们看到当R1上的一个网络故障时,所有路由器都会接收到关于丢失路由的更新。然而,通过选举指定路由器(DR),如上所示,R1只会通知DR路由器——R2,告知R2关于丢失的路由。然后,DR会更新多访问网络中的其他路由器。
注意: 在我们上面的场景中,我们没有包括备份指定路由器(BDR),然而BDR也会收到丢失路由的通知,但它不会更新其他路由器,除非DR出现故障,在这种情况下,BDR会被提升为DR角色。
在OSPF中,DR和BDR的选举是一个非常重要的因素,它解决了我们看到的问题。当DR和BDR被选举出来后,网络中的所有其他路由器将成为DROther,这意味着它们既不是DR也不是BDR。DROther路由器永远不会更新网络中的其他路由器。
DR和BDR的选举
DR和BDR是如何选举出来的?以下是适用的标准:
- 首先,选举具有最高OSPF优先级的路由器为DR。
- 其次,选举具有第二高OSPF优先级的路由器为BDR。
- 如果优先级相同,则根据最高路由器ID选举DR。
在上一节中,我们讨论了路由器ID的选取标准:
- 使用
router-id命令配置的路由器ID - 最高的回环接口
- OSPF域中最高的活动接口
根据上述信息,我们可以确定以下拓扑中的DR和BDR。

根据上述拓扑,R2和R3是DR的候选路由器,因为它们在网络中具有最高的路由器优先级。然而,由于R2的路由器ID更高,因此它将成为DR,R3将成为BDR,仅在R2失败时才会使用R3。
提升BDR为DR
DR通常不会改变,除非发生以下情况之一:
- DR故障。
- 连接到多访问网络的DR接口故障。
- DR上的OSPF进程故障。
如果发生其中之一,BDR路由器会自动被提升为DR角色。然后,路由器会进行选举来确定新的BDR。如果之前失败的DR重新上线,它不会恢复为DR角色,而是会变为DROther角色。
路由器优先级
在大多数情况下,我们希望通过优先级选择DR路由器。在这种情况下,仅依赖路由器ID可能不足够。OSPF中的路由器优先级用于确定哪个路由器成为以太网段中的DR和BDR,如前所述。
更改路由器的OSPF优先级是确保选择正确路由器作为DR的关键。
要配置路由器的优先级,我们在参与OSPF的路由器接口上使用命令“ip ospf priority <0-255>”。
注意: 优先级为0意味着该路由器永远不会成为DR。
现在我们已经了解了OSPF和多访问网络中的概念,接下来我们将进行一个实验,看看这些概念是如何工作的。
OSPF拓扑
下图显示了我们将要配置的拓扑。正如我们所看到的,我们有6个路由器,它们都连接到1个交换机,并且都位于192.168.1.0/24网络中的一个以太网段。
该拓扑中的每个路由器使用的IP地址与其路由器编号相对应。

在这个场景中,我们需要在所有路由器上配置OSPF,并且我们应该确定哪些路由器将被选举为DR和BDR。
R1、R3、R4和R6都具有回环接口,IP地址如图所示。
注意: 配置连接到交换机的快速以太网接口后,保持它们处于关闭状态(shutdown)。
以下表格显示了正在使用的路由器ID和OSPF优先级。

在我们的场景中,路由器的基本配置已经完成;我们的任务是配置OSPF并确定谁将被选举为DR和BDR。
配置OSPF
在这个场景中,我们需要做的第一件事是配置所有路由器上的OSPF。这意味着要使用network命令。
在我们的例子中,我们使用的OSPF进程ID为1,并且使用区域0。
以下表格显示了6台路由器上OSPF配置的命令。

如上所示,所有网络命令已配置,但由于连接路由器和交换机的接口处于关闭模式,因此不会广告任何路由。
配置OSPF优先级
下一步是配置OSPF优先级,这需要在连接到多访问设备的特定接口上进行配置,使用以下命令:

在我们的场景中,所有路由器都有连接到交换机的相同接口,即FastEthernet 0/0。
因此,在这些接口上,我们将配置OSPF优先级,如上所示:
下面显示的是R1和R4的配置。

在所有路由器上配置完OSPF优先级后,使用“no shutdown”命令启用连接到交换机的接口,这将使OSPF能够学习到网络中的路由。
下面显示的是在R1上执行“show ip route”命令的输出。

如上图,R1已经从邻居路由器学习到所有的路由。
为了确认哪个路由器充当DR角色,我们在每个路由器上使用“show ip ospf neighbor”命令。下面显示的是在R4上执行该命令的输出。

从输出中可以看到,R4已经与网络中的所有路由器建立了完整的邻居关系。此外,由于邻居1.1.1.1被标记为BDR,所有其他路由器被标记为DROTHER,因此路由器R4是该网络的DR。
在R3上执行“show ip ospf neighbor”命令的输出应该显示谁是DR路由器。

注意:邻居4.4.4.4的状态为“FULL/DR”,邻居1.1.1.1的状态为“FULL/BDR”,其他路由器的状态为“2WAY/DROTHER”。
在像我们这样的多访问网络中,路由器只有在与DR和BDR建立完全邻居关系(FULL邻居关系)时,才能进行完整的通信。DROTHER路由器只会与其他路由器建立2WAY关系。
DR重新选举
现在,我们将尝试看看如果DR和BDR路由器下线并且无法正常工作,会发生什么情况。
1、DR宕机
如前所述,如果DR宕机,BDR会自动成为新的DR。我们可以通过关闭R4的FastEthernet0/0接口来测试这一点,因为R4是当前的DR。

正如我们从R6上运行的“show ip ospf neighbor”命令的输出中看到的(上图),邻居1.1.1.1成为新的DR,而它之前是网络中的BDR。
BDR的选举在邻居3.3.3.3和邻居5.5.5.5之间进行,这两个路由器的OSPF优先级相同。邻居5.5.5.5被选为新的BDR,因为它的路由器ID更高。
2、如果DR重新上线,会发生什么?
当我们通过在FastEthernet0/0接口上输入“no shutdown”命令启用R4的接口时,它会恢复作为DR的责任吗?R6上运行的“show ip ospf neighbor”命令的输出如下。

正如我们从上述输出中看到的,R1仍然会保持作为DR,而R4即使具有更高的优先级,仍将保持作为BDR。这是一个保护功能,以防路由器再次失败。
注意:当DR失败时,它只能在新的DR和新的BDR失败的情况下恢复其作为DR的角色,即使它具有最高优先级。
注意:在多访问网络中,优先级为0的路由器将永远不会成为DR或BDR。
相关文章:
【网络协议】开放式最短路径优先协议OSPF详解(四)
前言 在本章的第一部分和第二部分中,我们探讨了OSPF的基本配置,并进一步学习了更多OSPF的概念,例如静态路由的重分发及其度量值。在第三部分中,我们讨论了多区域OSPF。在第四部分中,我们将关注OSPF与多访问网络&#…...
C++STL中algorithm的介绍与使用
C STL中的<algorithm>库提供了一组模板函数,用于操作序列(如数组、向量等)。以下是一些常用的<algorithm>函数的详细介绍、使用方式和示例,以及在竞赛过程中的一些细节。 1. 非修改性算法 std::find 概念ÿ…...
Oracle exp和imp命令导出导入dmp文件
目录 一. 安装 instantclient-tools 工具包二. exp 命令导出数据三. imp 命令导入数据四. expdp 和 impdp 命令 一. 安装 instantclient-tools 工具包 ⏹官方网站 https://www.oracle.com/cn/database/technologies/instant-client/linux-x86-64-downloads.html ⏹因为我们在…...
GitLab集成Runner详细版--及注意事项汇总【最佳实践】
一、背景 看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…...
ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代
2024年11月30日,ARM正式发布了其最新的Armv9.5架构,这是Arm技术发展的又一重要里程碑。从表中信息来看,Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升,更是…...
网络安全:路由技术
概述 路由技术到底研究什么内容 研究路由器寻找最佳路径的过程 路由器根据最佳路径转发数据包 知识点,重要OSRF,BGP1.静态路由原理 路由技术分类 静态路由和动态路由技术 静态路由:是第一代路由技术,由网络管理员手工静态写路由/路径告知路…...
Vue3 子组件向父组件传递消息(Events)
子组件向父组件传递消息(Events) 子组件可以通过 $emit 触发事件,父组件可以监听这些事件并作出响应。 子组件: <template><button click"sendMessage">Send Message to Parent</button> </tem…...
如何清理Docker的overlay2目录下的文件
清理 Docker 的 overlay2 目录下的文件需要谨慎操作,因为这些文件通常是容器的存储层,直接删除可能会导致容器无法正常运行或数据丢失。以下是清理 overlay2 目录的步骤和建议: 1. 确认文件是否可以被清理 在清理之前,确认 c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d4…...
《Vue3实战教程》19:Vue3组件 v-model
如果您有疑问,请观看视频教程《Vue3实战教程》 组件 v-model 基本用法 v-model 可以在组件上使用以实现双向绑定。 从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏: vue <!-- Child.vue --> <script setup> co…...
数字PWM直流调速系统设计(论文+源码)
2.1 系统方案设计 2.2.1开环控制方案 采用开环方案的系统架构如图2.1所示,这种方式不需要对直流电机的转速进行检测,在速度控制时单片机只需要直接发出PWM就可以实现直流电机速度的控制。这种方式整体设计难度较低,但是无法准确得知当前的…...
Spring Boot日志处理
文章目录 Spring Boot日志处理1. 日志存入数据库(AOP)2. 日志控制台打印与写入文件(logback) Spring Boot日志处理 1. 日志存入数据库(AOP) 引入aop依赖 <dependency><groupId>org.springfram…...
vue3+Echarts+ts实现甘特图
项目场景: vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…...
OpenCV相机标定与3D重建(41)从 3D 物点和它们对应的 2D 图像点估算初始相机内参矩阵函数initCameraMatrix2D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从3D-2D点对应关系中找到一个初始的相机内参矩阵。 cv::initCameraMatrix2D 是 OpenCV 库中的一个函数,用于从 3D 物点和它们对应的…...
ELK日志平台搭建 (最新版)
一、安装 JDK 1. 下载 JDK 21 RPM 包 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm2. 安装 JDK 21,使用 rpm 命令安装下载的 RPM 包: sudo rpm -ivh jdk-21_linux-x64_bin.rpm3. 配置环境变量 编辑 /etc/profile 文件以配置 JAVA_HO…...
智能化人才招聘系统是怎样的?
随着企业规模的扩大和业务范围的拓展,人才招聘成为了企业发展的关键环节。然而,市面上的人才招聘系统琳琅满目,质量参差不齐,许多企业发现,并非所有系统都能满足他们的需求,特别是智能化的需求。今天&#…...
电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教
0 缘起 一台联想电脑,使用Windows 10 专业版32位,电脑主机后置音频插孔一直没有声音,所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线,音频线头断在音频插孔里面了,前置音频插孔因此用不…...
记一次音频无输出的解决方案
啊啊啊,刷个抖音就发现个死电脑死都不出声,捣鼓了一天才解决 打开wav文件时,提示错误找不到音频播放设备 0xc00d36fa 起初以为是声卡坏了,就到官网下载、更新了声卡驱动。无用什么驱动精灵也检测了,但也测不出啥来。…...
初学stm32 --- FSMC驱动LCD屏
目录 FSMC简介 FSMC框图介绍 FSMC通信引脚介绍 FSMC_NWE 的作用 FSMC_NWE 的时序关系 FSMC_NOE 的含义 FSMC_NOE 的典型用途 FSMC_NOE 的时序关系 使用FSMC驱动LCD FSMC时序介绍 时序特性中的 OE ILI9341重点时序: FSMC地址映射 HADDR与FSMC_A关系 LCD的…...
Scala_【4】流程控制
第四章 分支控制if-else单分支双分支多分支返回值嵌套分支 For循环控制包含边界不包含边界循环守卫循环步长嵌套循环循环返回值 While循环Break友情链接 分支控制if-else 单分支 双分支 多分支 返回值 嵌套分支 For循环控制 Scala也为for循环这一常见的控制结构提供了非常多的…...
mysql带自动递增列的表删除数据后如何重置递增值
mysql带自动递增列的表删除数据后如何重置递增值 在 MySQL 中,如果你删除了表中的数据,自动递增列的值 不会自动重置。如果你希望在删除数据后重新设置自动递增列的值,可以使用以下几种方法: 1. 使用 ALTER TABLE 重置自动递增值…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
