超级干货,OSPF协议无敌详解

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

下午好,我的网工朋友。

大家都知道,为了实现高效的数据传输和网络资源利用,路由协议的选择可以说是非常重要的。

开放最短路径优先协议(Open Shortest Path First,简称OSPF)作为一种内部网关协议(IGP),因其高度的灵活性、可扩展性和可靠性,在现代网络架构中占据了重要的位置。

OSPF通过使用链路状态算法(基于Dijkstra的SPF算法),能够快速地在大型网络环境中实现路由信息的交换和路由表的更新,从而确保数据包能够沿最优路径转发。

关于OSPF的各种内容在前面给大家盘了不少,今天就来总体的精讲一下OSPF协议,先码再看

今日文章阅读福利:《 OSPF经典学习笔记(62页) 

说到OSPF,给你分享一份超经典的学习笔记,私信我,发送暗号“学习笔记”,即可获得老网工珍藏的OSPF经典学习笔记一份。

01 OSPF概述

OSPF协议自1980年代末期发展至今,已经成为一种广泛采用的动态路由协议。

最初的设计目的是解决传统距离矢量路由协议(如RIP)在大规模网络环境下存在的问题,比如慢收敛速度、路由环路等。OSPF协议采用了链路状态路由算法,这使得它能够更快地响应网络变化并维持一致的路由信息。

目前,OSPF有两个主要版本:

  • OSPFv2:主要用于IPv4网络,定义在RFC 2328中。它是OSPF的第一个广泛部署版本,支持单播和多播流量。

  • OSPFv3:随着IPv6的出现而发展起来,定义在RFC 5340中。OSPFv3不仅支持IPv6地址族,还引入了一些改进,如更灵活的多播支持和更好的安全性。

a81ab48b0d7a640a4c6e82556b510ceb.jpeg

01 OSPF与其他路由协议的对比

相比于其他动态路由协议,OSPF具有以下特点:

  • 无环路由:由于采用了链路状态算法,OSPF能够有效地避免路由环路的问题。

  • 快速收敛:当网络发生改变时,OSPF能够迅速更新路由信息,保证网络服务的连续性。

  • 层次化设计:通过划分不同的区域(Area),OSPF能够减少路由表的大小,简化路由计算,并提高网络的可管理性。

  • 灵活的度量标准:OSPF允许管理员根据网络需求配置不同的度量标准,如带宽、延迟等,以实现更加智能的路由选择。

02 OSPF的基本概念

01 区域(Area)

OSPF通过将网络划分为多个逻辑上的区域(Area)来组织和管理网络。

区域是OSPF网络的一个重要组成部分,用于将网络分割成多个逻辑组,以简化路由管理和减少LSA的数量。

主要区域类型包括:

  • 骨干区域(Area 0):这是所有其他非骨干区域必须连接的中心区域。所有区域必须直接或间接地与骨干区域相连,以确保路由信息能够在整个OSPF域内传播。

  • 普通区域:这些区域直接连接到骨干区域,可以包含路由器、网络接口和子网。

  • 末节区域(Stub Area):这种区域不接收自治系统外部的路由更新,可以减少路由表的大小。通常用于网络边缘,以减少对核心网络的影响。

  • 完全末节区域(Totally Stubby Area):除了默认路由之外,不接受任何自治系统外部的路由更新。

  • NSSA(Not-So-Stubby Area):类似于末节区域,但是允许注入自治系统外部的路由信息,同时也可以阻止某些类型的LSA进入该区域。

02 链路状态数据库(LSDB)

每个运行OSPF协议的路由器都会维护一个本地的链路状态数据库(LSDB)。

LSDB包含了路由器所知道的所有网络链接的状态信息,包括邻接关系、网络状态和度量值等。LSDB是通过路由器之间交换链路状态通告(LSA)来填充的。所有路由器最终会拥有相同的LSDB,这保证了路由的一致性。

03 路由选择表(Routing Table)

基于LSDB中的信息,每台路由器会独立运行最短路径优先(SPF)算法来计算到达每个目的网络的最佳路径,并将这些信息存储在路由选择表中。

路由选择表决定了路由器如何转发数据包到目标网络。

03 OSPF网络类型

OSPF协议支持多种网络类型,不同的网络类型影响着OSPF邻居关系的形成以及链路状态信息的传播方式。

主要的OSPF网络类型包括:

01 广播多路访问(Broadcast Multi-Access)

在广播多路访问网络中,所有设备共享同一个广播域。这类网络中,OSPF通过选举产生一个指定路由器(DR)和一个备份指定路由器(BDR)。

DR负责收集来自区域内其他路由器的信息,并将这些信息扩散给其他路由器。BDR作为DR的备份,在DR失效时接管其职责。

02 非广播多路访问(Non-Broadcast Multi-Access)

非广播多路访问网络同样支持多个设备之间的通信,但它不具备广播能力。

在NBMA网络中,OSPF同样需要选举DR和BDR。不同于广播网络的是,NBMA网络中的设备需要手动配置邻接关系,而不是自动形成。

03 点对点(Point-to-Point,如PPP链路)

点对点网络是指两个设备之间直接通信的网络,没有其他设备介入。在这种网络类型中,不需要选举DR或BDR,因为只有两个节点,它们之间可以直接形成邻接关系。

04 点到多点(Point-to-Multipoint)

点到多点网络是一种特殊类型的网络,其中有一个中心节点与多个末端节点通信。末端节点之间不直接通信。

在这种网络中,中心节点负责与末端节点建立邻接关系,并维护LSDB。点到多点网络可以配置为普通模式或完全模式(Full Point-to-Multipoint),后者意味着所有末端节点之间也会形成邻接关系。

05 网络类型对OSPF运作的影响

不同的网络类型影响着OSPF邻居发现机制和链路状态信息的传播效率。

例如,在广播网络中,通过DR和BDR的选举减少了全网范围内的LSA泛洪;而在点对点网络中,由于不存在DR/BDR选举过程,所以邻接关系的建立更为简单和快速。

04 DR&BDR选举

在OSPF协议中,为了提高网络效率并减少链路状态信息的传播次数,广播多路访问和非广播多路访问网络中需要选举产生指定路由器(DR)和备份指定路由器(BDR)。

db99f7be44470d5ce1d02bb361b10979.jpeg

01 DR的角色

指定路由器(DR)的主要职责包括:

  • 收集来自同一网络段内其他路由器的链路状态信息。

  • 将收集到的信息封装成链路状态通告(LSA)并泛洪给其他路由器。

  • 减少网络中的LSA泛洪次数,从而减轻网络负载。

02 BDR的角色

备份指定路由器(BDR)作为DR的备份,它与DR保持相同的链路状态信息。一旦DR失效,BDR可以立即接管DR的职责,从而保证网络的高可用性。

03 选举过程

DR和BDR的选举是通过发送Hello报文来进行的,这个过程遵循以下步骤:

  1. 初始阶段:所有路由器启动时,默认认为自己是DR和BDR,并开始发送Hello报文。

  2. Router ID比较:路由器通过Hello报文中携带的信息来确定彼此的存在,并基于Router ID(一个唯一的标识符,通常是路由器上最高的IP地址)来决定哪个路由器将成为DR和BDR。

  3. 最高Router ID:具有最高Router ID的路由器将成为DR,而次高的则成为BDR。

  4. 优先级设置:管理员可以通过配置路由器的优先级来影响选举结果。先级为0的路由器不会成为DR或BDR

  5. 选举稳定:一旦选举完成,DR和BDR就不再改变,除非网络状况发生变化(如DR或BDR失效)。

04 DR/BDR的重要性

DR和BDR机制提高了网络的稳定性与效率,主要体现在:

  • 减少了LSA的传播次数,因为DR充当了信息汇总和分发的角色。

  • 增加了系统的可靠性,通过BDR作为DR的备份,可以在DR故障时无缝切换。

  • 降低了网络维护成本,因为减少了不必要的LSA交换。

05 OSPF协议报文类型

OSPF协议通过五种类型的报文来实现邻居发现、链路状态信息的交换和确认等功能。

01 Hello报文

Hello报文主要用于发现邻居并维护邻居关系。它包含了发送者的一些基本信息,如Router ID、优先级等。

触发条件:定期发送(间隔时间由Hello间隔参数决定)。

内容:

  • Router ID

  • Hello/Dead间隔

  • Options字段(指示支持的功能)

  • 邻居列表(已知邻居的Router ID列表)

作用:帮助路由器发现邻居并维持邻居关系,是DR/BDR选举的基础。

02 数据库描述(Database Description, DD)报文

DD报文用于描述发送者的链路状态数据库(LSDB)的内容,以协商双方的LSDB同步。

触发条件:在两台路由器建立邻接关系的过程中发送。

内容:

  • 最近发送的LSA序列号

  • LSDB中LSA的摘要信息

作用:帮助路由器识别对方拥有的链路状态信息,并决定哪些LSA需要同步。

03 链路状态请求(Link State Request, LSR)报文

当路由器缺少某些LSA时,它会发送LSR报文请求缺失的LSA。

触发条件:在发现LSDB不同步时发送。

内容:

  • 缺失的LSA的LSID列表

作用:请求缺失的链路状态信息,以实现LSDB的同步。

04 链路状态更新(Link State Update, LSU)报文

LSU报文包含了完整的LSA信息,用于响应LSR报文或主动更新链路状态信息。

触发条件:在收到LSR报文时或当链路状态发生变化时发送。

内容:

  • 一个或多个完整的LSA

作用:发送完整LSA以更新接收方的LSDB。

05 链路状态确认(Link State Acknowledgment, LSAck)报文

LSAck报文用于确认接收到的LSU报文,确保链路状态信息的可靠传输。

触发条件:接收到LSU报文后发送。

内容:

  • 已经接收的LSA的LSID列表

作用:确认LSU报文的接收情况,确保链路状态信息的准确同步。

06 OSPF协议状态机

OSPF协议使用了一种状态机模型来管理邻居关系的不同阶段。

状态机模型描述了路由器如何通过一系列的状态转换来建立和维护与邻居路由器的关系。以下是OSPF邻居状态机的各个状态及其转换过程:

01 Down状态

这是邻居关系的初始状,表示当前路由器尚未检测到邻居的存在。

转换条件:当路由器接收到第一个Hello报文时,状态将转变为Init状态。

02 Init状态

在此状态下,路由器已经接收到邻居的Hello报文,并记录下了邻居的存在。但是,邻居尚未在其Hello报文中列出当前路由器作为邻居。

转换条件:当邻居路由器的Hello报文中包含当前路由器的Router ID时,状态将转变为Two-Way状态。

03 Two-Way状态

此状态表明双向通信已经建立,即两台路由器都在各自的Hello报文中列出了对方作为邻居。此时,双方可以进一步协商是否建立邻接关系。

转换条件:如果双方都同意建立邻接关系,则状态将转变为ExStart状态。

04 ExStart状态

在此状态下,路由器开始协商DD报文的格式,以确定双方将如何交换链路状态数据库(LSDB)的内容。这一步骤是为了确定谁先发送DD报文。

转换条件:当协商完成后,状态将转变为Exchange状态。

05 Exchange状态

在这一阶段,路由器开始交换DD报文,以共享各自LSDB的内容摘要。这一过程是为了确定哪一方的LSDB更完整或更新。

转换条件:当DD报文交换完成后,状态将转变为Loading状态。

06 Loading状态

此状态下,路由器根据之前的DD报文交换结果,发送LSR报文请求缺失的LSA,并通过LSU报文发送完整的LSA信息。

转换条件:当所有缺失的LSA都已交换完毕,并且双方的LSDB达到同步后,状态将转变为Full状态。

07 Full状态

这是邻居关系的最终状态,表示两台路由器已经建立了完全的邻接关系,双方的LSDB已经同步,并准备好了共同维护网络的路由信息。

08 状态机的作用

OSPF状态机通过有序的状态转换确保了邻居关系的建立和维护,从而实现了高效和可靠的链路状态信息交换。

每个状态都有明确的含义和转换条件,帮助路由器在复杂的网络环境中保持良好的邻居关系,并确保路由信息的一致性。

原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149784.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

面经 | ES6

ES6 ES6set vs weakSetmap vs weakMapPromise创建三个状态 ES6 set vs weakSet 都是集合,只不过weakSet里面只能存引用类型的变量。weakSet相对set的好处就是,可以避免内存泄漏。因为weakSet中的成员,如果在外部消失了,会自动消…

问题:vscode 打印中文时终端输出乱码

文章目录 问题分析解决 问题 在 vscode 编辑器中的终端运行出来的中文是乱码 分析 乱码原因:因windows中文版系统cmd编码默认为GBK,而vscode默认新建文件的编码为UTF-8所以会出现中文乱码情况 解决 终端下输入 chcp 查看当前的cmd编码设置。如图&…

【LeetCode】动态规划—打家劫舍(附完整Python/C++代码)

动态规划—#198. 打家劫舍 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 在这个问题中,你是一个专业的小偷,计划偷窃沿街的房…

9.2 Linux_标准I/O_相关函数

打开与关闭 文件打开就是判断这个文件资源可不可以被占用,如果可以,就能够打开成功,否则打开失败 文件关闭就是释放文件资源 1、打开文件 1.1 函数声明 FILE *fopen(const char *pathname, const char *mode); 返回值:出错返…

排序算法Java实现

文章目录 排序算法概述比较排序算法非比较排序算法稳定 vs 不稳定Java 中的排序 外部排序1) 冒泡排序2) 选择排序3) 堆排序4) 插入排序5) 希尔排序6) 归并排序递归实现时间复杂度非递归实现 7) 归并插入8) 快速排序随机基准点处理重复值 9) 计数排序10) 桶排序11) 基数排序 排序…

Redmi Note 7 Pro(violet)免授权9008文件分享及刷机教程

获取文件 关注微信公众号 heStudio Community回复 violet_9008 获取下载链接。 刷机教程 下载搞机助手(可以从上方文件中获取)并安装。手机按音量减键和电源键进入 Fastboot 模式, 打开搞机助手,点击进入 9008 模式 等待手机…

功能强大的项目管理平台通常融合多种方法论,系统化解决项目管理难点

难、质量管理难等难点,使用科学的方法论配合专业的项目管理工具,能够更快更好管理项目,提高项目成功率。 那么项目管理的不同阶段分别会用到哪些关键方法论呢? 例如:启动阶段,会用到SMART目标原则制定合理且…

C# winforms 使用菜单和右键菜单

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

20240924替换电脑微信消息提示音

一.准备工作 1.先关闭电脑微信,退出进程 2.打开资源管理器,找到微信的安装位置,进入微信软件的资源目录,找到"WeChatResource.dll"文件 3.将"WeChatResource.dll"文件复制2份,其中一份复制到桌面(用作等下修改),另一份任意保存起来(用作保存原始文件,防止出…

如何使用MacPorts安装tesseract来进行简单的OCR识别

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、下载MacPorts三、如何使用macPorts安装Tesseract四、 配置并使用Tesseract五、最…

excel 时间戳与日期转换

使用 函数: TEXT((C1/100028800)/8640025569,"yyyy/mm/dd HH:MM:ss.000") 因为咱们的时间戳是从 1970-1-1 08:00:00 开始计算的,所以需要对咱们的列处理: 28800 是代表 1970年1月1号的8点, 8个小时是28800秒&#xff…

python爬虫:从12306网站获取火车站信息

代码逻辑 初始化 (init 方法): 设置请求头信息。设置车站版本号。 同步车站信息 (synchronization 方法): 发送GET请求获取车站信息。返回服务器响应的文本。 提取信息 (extract 方法): 从服务器响应中提取车站信息字符串。去掉字符串末尾的…

OpenCV图像分割(1)图像分割函数grabCut()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 运行 GrabCut 算法。 该函数实现了 GrabCut 图像分割算法 OpenCV 中的 grabCut() 函数是一种用于图像分割的技术,它可以帮助用户从图…

stable diffusion这个插件牛,高清【图片换脸】,高清【视频换脸】 一键完成!

前言 最近发现一个很不错的sdwebui的插件,不仅能完成图片换脸,还能进行视频换脸,而且效果比之前的 faceid和reactor要好很多,更像更高清,哈哈,废话不多说,直接上干货~插件是 easyPhoto&#xff…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月24日,星期二

每天一分钟,知晓天下事! 2024年9月24日 星期二 农历八月廿二 1、 外卖新规征求意见:规范外卖满减、起送费等机制,剑指餐饮浪费。 2、 发改委:预计全年将实现200万辆低排放标准乘用车退出。 3、 商务部:中…

高通平台Android源码下载

1)、打开:Android releases | CodeLinaro Wiki,选择相应的硬件版本Android系统 2)、repo 源码 repo init --depth1 -u https://git.codelinaro.org/clo/la/platform/manifest.git -b release -m LA.UM.8.6.2.c31-03300-89xx.0.xm…

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众

在当今快速发展的数字经济时代,智算中心作为人工智能和大数据技术的核心支撑设施,正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定,卓振思众动环监控应运而生,成为智算中心管理的重要组成部分…

论文复现| Free-Form Image Inpainting with Gated Convolution

论文地址具有上下文注意的生成图像修复 论文代码:GitHub 01配置环境 根据原文代码中read me中要求,进行环境配置以及包的安装。 Run 安装python3。 安装tensorflow(在1.3.0,1.4.0,1.5.0,1.6.0,1.7.0版本上进行了测试)。 安装tensorflow工具包neuralgym(运行pi…

【零基础入门AI:83%的文本推荐系统都在用的算法 TF-IDF】

什么是推荐系统? 在如今这个信息爆炸的时代,推荐系统是根据用户的信息或者行为,向用户推荐用户可能会感兴趣的内容。其中基于文本的推荐系统,比如搜索引擎,头条、微信这类资讯类应用的搜索功能,就是在一个…

图表示学习中的Transformer:Graphormer的突破

人工智能咨询培训老师叶梓 转载标明出处 在自然语言处理和计算机视觉等领域,Transformer架构已经成为主导选择。然而,在图级别的预测任务中,它的表现并不如主流的图神经网络(GNN)变体。这一现象引发了一个思考&#x…