《图解TCP/IP》阅读笔记(第七章 7.5)—— OSPF 开放最短路径优先协议

news2024/11/25 10:27:15

7.5 OSPF

OSPF(Open Shortest Path First,开放最短路径优先)是一种链路状态性的路由协议,即使网络中有环路,也可以进行稳定的路由控制。

另外,OSPF支持子网掩码,使得在RIP中无法实现的可变长度子网构造的网络路由控制成为现实。

为了减少网络流量,OSPF引入了“区域”的概念,其将一个自治网络划分为若干个更小的范围,由此可以减少路由协议之间不必要的交换。

OSPF还可以针对IP首部中的区分服务(TOS)字段,生成多个路由控制表。但也有实现了OSPF的路由器无法支持TOS的情况。


OSPF是链路状态型路由协议,路由器之间交换链路状态用于生成网络拓扑信息,然后根据该拓扑信息生成路由控制表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pG2IlkdB-1672053344201)(2022年12月26日.assets/image-20221225223604255.png)]

RIP的路由选择,要求途中经过的路由器个数越少越好。与之相比,OSPF可以给每条链路赋予一个权重(cost),并始终选择一个权重最小的路径最为最终路由,始终选择一个总的带教最小的一条路径。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ij8EjNWt-1672053344202)(2022年12月26日.assets/image-20221225223946063.png)]


OSPF的基础知识

首先讲一些概念性的东西。

连接到同一个链路的路由器统称为相邻路由器(Neighboring Router)。在一个相对简单的网络结构中,例如每个路由器仅限一个路由器相互连接时(使用PPP相连),相邻路由器之间可以交换路由信息。但若是在一个比较复杂的网络中,例如在同一个链路中加入了以太网或FDDI等路由器时,就不需要在所有相邻的路由器之间都进行控制信息的交换,而是确定一个指定路由器(Designated Router),以它为中心交换路由信息即可。

RIP还有一个缺点是,其包类型只有一种,以便确认是否连接网络,一边传送网络信息,但是这种方式每次交换的路由控制信息会随着网络个数而增加,且在网络稳定时,也要定期交换,在一定程度上浪费了网络带宽。

OSPF中,根据作用不同,有五种类型的包,见下表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-83TM6r8T-1672053344202)(2022年12月26日.assets/image-20221225231224860.png)]

**问候(HELLO)**包,用于确认是否连接;

**数据库描述包(Database Description)**则用于每个路由器同步路由控制信息,相互发送路由摘要信息和版本信息;

**链路状态请求包(Link State Request)**则请求路由控制信息;

**链路状态更新包(Link State Update)**则接收路由状态信息;

**链路状态确认包(Link State ACK Packet)**通知大家本地已经接收到路由控制信息。


OSPF 工作原理概述

本小节用于介绍OSPF具体如何工作。

OSPF中,进行连接确认的协议叫做HELLO协议。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-utmtGI1r-1672053344202)(2022年12月26日.assets/image-20221225231931244.png)]

LAN中每10秒发送一个HELLO包,若没有该包到达,则进行连接是否断开的判断(注:该时间可以由管理员自定义,且必须保证同链路中数值相同):允许空等3次,直到第4次(40秒后)仍无任何反馈就认为连接已经断开。之后再进行连接断开或恢复连接操作时,由于链路状态发生了变化,路由器就会发送一个链路状态更新包(Link State Update Packet)通知其他路由器网络状态的变化。

链路状态更新包所要传达的消息大致分为两类:

  • 网络LSA(Network Link State Advertisement,网络链路状态通告),以网络为中心生成的信息,表示该网络与那些路由器相连。
  • 路由器LSA(Router Link State Advertisement,网络链路状态通告),以路由器为中心生成的信息,表示该路由器与哪些网络相连。

这两种信息主要采用OSPF发送,每个路由器都可以生成一个可以表示网络结构的链路状态数据库,并结合Dijkstra算法(最短路径优先算法)生成相应的路由控制表。

与距离向量算法相比,链路状态算法生成的路由控制表更加清晰不容易混淆,且可以有效地降低无限循环问题的发生。但是当网络规模逐渐增大时,最短路径优先算法的处理时间就会变长,对CPU和内存的消耗也就越大。


本篇刚开始时,我们曾说过,OSPF中有区域的概念。

此举的目的,正是为了解决网络规模逐渐增大时,减少计算负担。

区域指连接在一起的网络和主机划分为小组,使一个自治系统内可以拥有多个区域,其中必须有一个主干区域(Backbone Area,ID为0,逻辑上只能有一个,物理上可以划分为多个),且所有其他区域都必须与主干区域相连接(若实际与此不符,需要使用OSPF的虚拟链路功能设置虚拟主干或区域)。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1CekMOs-1672053344203)(2022年12月26日.assets/image-20221226172359583.png)]

连接区域与主干区域的路由器称作区域边界路由器

区域内部的路由器则称作内部路由器

只与主干区域内连接的路由器叫做主干路由器

与外部连接的路由器就是AS边界路由器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2mOr4Hi-1672053344203)(2022年12月26日.assets/image-20221226172921163.png)]

每个区域内都有其网络拓扑的数据库,区域之外的路径信息只能从区域边界路由器那里知悉,且区域边界路由器也不会将区域内的链路状态信息全部原样发送给其他区域,只会发送自己到达这些路由器的距离信息。由此,内部路由器持有的网路拓扑数据库就会明显变小。

换句话说就是,内部路由器只需了解本区域内的链路状态信息,在此基础上计算出路由控制表,该机制有效的减少了路由控制信息,还能减轻处理负担。(很好理解,当一个帮派人足够多时,例如丐帮,就需要分舵和舵主,替帮主管理)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hz87RQrj-1672053344203)(2022年12月26日.assets/image-20221226173127667.png)]

此外,作为区域出口的区域边界路由器如果只有一个(一夫当关),就叫做末端区域,如上图中的区域2,其区域边界路由器(上图中为路由器E)将成为默认路径,传送路由信息。

最后,OSPF作为链路状态路由算法的一种框架,想要构造一个稳定的网络,区域设计与物理设计同样重要,如果区域设计不合理,就有可能无法充分发挥OSPF的优势。


本篇小结

本篇介绍了基于链路状态算法的OSPF(开放最短路径优先)协议。

其通过路由器之间交换链路状态信息,用以在路由器中生成网络拓扑信息。

OSPF以链路代价(也称为权重)为计算标准,选取时会挑选总代价最小的一条路径。与总是选择路由器个数最小的RIP不同。

OSPF中,连接到同一个链路的路由器称为相邻路由器;如果在一个较为复杂的网络中,可以确定一个指定路由器,所有相邻路由都和它进行控制信息的交换。

RIP中,信息只有距离和方向,而在OSPF中,根据作用不同可以分为以下五种包:

  • 问候:用以确定相邻路由器和指定路由器
  • 数据库描述:链路状态数据库的摘要信息
  • 链路状态请求:请求从数据库中获取链路状态信息
  • 链路状态更新:更新链路状态数据库的链路状态信息
  • 链路状态确认应答:链路状态信息更新的确认应答

问候包用以定期发送给周围的路由器,允许空等三次,若第4次仍无任何反馈就可以认为连接已断开。而在进行连接断开或恢复连接时,会发送链路状态更新包通知其他路由器网络状态发生了变化。

链路状态更新包要传达的消息大致分为两类:网络链路状态通告和路由链路状态通告。

经过状态信息的不停更新,路由器便可以生成一个代表当前网络结构的链路状态数据库,根据此数据库,结合Dijkstra算法(最短路径优先算法)生成相应的路由控制表。

为了缓解网络过于复杂导致每次链路状态更新过久、数据库过大的问题,OSPF中可以将一个自治区域划分为多个区域,其中必须有一个主干区域,且其他区域都要与主干区域相连接。

在这种划分下,路由器也有了别名:

  • 连接区域与主干区域的路由器称为区域边界路由器
  • 区域内部的路由器叫做内部路由器
  • 只与主干区域连接的路由器叫做主干路由器
  • 与外部相连接的路由器是AS边界路由器

区域内的路由持有基于本区域的网络拓扑的链路状态数据库。区域之外的信息,有区域边界路由器处获取各网络的距离。

末端区域指只有一个区域边界路由器。

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

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

相关文章

在简历上写了“精通自动化测试,阿里面试官跟我死磕后就给我发了高薪 offer

事情是这样的 前段时间面试了阿里,大家也都清楚,如果你在简历上面写着你精通 XX 技术,那面试官就会跟你死磕到底。 我就是在自己的简历上写了精通自动化测试,然后就开启了和阿里面试官的死磕之路,结果就是拿到了一份…

【Lilishop商城】No4-2.业务逻辑的代码开发,涉及到:会员B端第三方登录的开发-平台注册会员接口开发

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑,其中重点包括接口类、业务类,具体的结合源代…

AMQP协议:消费者、生产者与RibbitMQ节点之间的交互流程,RibbitMQ的核心组成部分

原文链接 一、什么是AMQP协议? AMQP全称:Advanced Message Queuing Protocol(高级消息队列协议)。是应用层协议的一个开发标准,为面向消息的中间件设计。 基于此协议的客户端与消息中间件可以传递消息,不受客户端/中间件的不同产品…

小程序之首页搭建——Flex布局

目录 Flex布局简介 什么是flex布局? flex属性 学习地址: 视图层 View WXML 数据绑定 列表渲染 条件渲染 模板 WXSS 尺寸单位 样式导入 内联样式 选择器 全局样式与局部样式 WXS 示例 注意事项 页面渲染 数据处理 会议OA项目-首页 …

Python实现照片、视频一键压缩及备份源代码

代码 完整代码下载地址:Python实现照片、视频一键压缩及备份源代码 第一次运行前先编辑脚本,修改其中的主库位置、随库位置,保存。 此后要更新随库时,只要双击运行脚本即可。 运行结果示例: 主库位置:D…

用了这么多年的 SpringBoot 你知道什么是 SpringBoot 的 Web 类型推断吗?

用了这么多年的 SpringBoot 那么你知道什么是 SpringBoot 的 web 类型推断吗? 估计很多小伙伴都不知道,毕竟平时开发做项目的时候做的都是普通的 web 项目并不需要什么特别的了解,不过抱着学习的心态,阿粉今天带大家看一下什么是 …

jQuery库冲突

文章目录jQuery库冲突原因jQuery.noConflict()如还想使用$可以这么做jQuery库冲突 原因 在某些情况下,可能有必要在同一个页面中使用多个JavaScript库。但是很多库都使用了“$”这个符号(因为它简短方便),这时就需要用一种方式来…

Oracle中Null和无值的区别

以Leetcode第176题“第二高的薪水”为例。 首先说一下这道题最容易理解、最容易实现的解法&#xff0c;就是比最大值小的值里最大的值。 SELECT MAX(salary) AS SecondHighestSalary FROM Employee WHERE salary < (SELECT MAX(salary) FROM Employee)通过这道题目&#…

泛型------数据结构

泛型 问题:下面是一个简单的顺序表&#xff0c;我们在这里面实现的一个顺序表&#xff0c;是存放的数据类型只有int类型&#xff0c;这就会很不通用&#xff0c;如果我们想什么样的类型的数据都想要放进去,就要把这个数组的类型设置成Object类型 能不能啥样的类型都可以存放呢&…

ArcGIS中ArcMap栅格重采样操作与算法选择

本文介绍在ArcMap软件中&#xff0c;实现栅格图像重采样的具体操作&#xff0c;以及不同重采样方法的选择依据。 在文章Python中ArcPy实现栅格图像文件批量掩膜与批量重采样&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/124282764&#xff09;中&…

optimization问题的解决

目录 临界点critical point 基本介绍临界点两种情况的区分 g和H的举例介绍根据H区分Saddle Point和local minima 批次Batch batch大小的比较 时间的开销训练集和测试集的效果 训练集效果测试集效果 动量Momentum 一般的Gradient Descent带有动量的Gradient Descent 2021 -…

异步通信技术AJAX | 原理剖析、发送Ajax请求四步

目录 一&#xff1a;快速搞定AJAX&#xff08;第一篇&#xff09; 1、传统请求及缺点 2、AJAX请求原理剖析 3、AJAX概述 4、XMLHttpRequest对象 5、AJAX GET请求 6、AJAX GET请求提交数据 7、AJAX GET请求的缓存问题 8、AJAX POST请求及模拟表单提交数据 9、经典案例…

C语言基础--数组

文章目录一维数组一、一维数组的创建和初始化&#xff08;1&#xff09;一维数组的创建&#xff08;2&#xff09;一维数组的初始化1&#xff09;整形数组初始化2&#xff09;字符数组初始化3&#xff09;sizeof与strlen4&#xff09;总结二、一维数组的使用三、一维数组在内存…

基于C++实现(控制台)职工信息管理系统【100010060】

职工信息管理系统 一、实验内容 ​ 设计一个职工信息管理案例&#xff0c;实现不同类别职工的工资数据。职工的种类包括&#xff1a;正式职工和临时工。定义一个基本的职工类&#xff0c;基本信息包括&#xff1a;编号、姓名、性别、年龄、家庭住址、基本职务工资。派生出正式…

Quarkus实现第一个Hello World

Quarkus介绍 Quarkus 是一个为 Java 虚拟机&#xff08;JVM&#xff09;和原生编译而设计的全堆栈 Kubernetes 原生 Java 框架&#xff0c;用于专门针对容器优化 Java&#xff0c;并使其成为无服务器、云和 Kubernetes 环境的高效平台。 Quarkus 可与常用 Java 标准、框架和库…

php正则匹配反斜杠问题

php正则匹配反斜杠问题&#xff1a; 之前做了一道题&#xff0c;发现php中正则匹配反斜杠好像有点问题。 我们先看下面代码&#xff1a; <?php$cmd "\\";echo $cmd.PHP_EOL;if(preg_match("/\\\\|\\/",$cmd)) {echo "yes";} else {echo …

springdata-jpa-hibernate-03

springdata-jpa-hibernate-03 多表关联操作 首先加上这个lombok依赖,可以使代码更加简洁 一对一 account类 customerRepository接口 测试 一对多 message类 测试 多对一 在上面一对多的基础上加上这句代码就行 MessageRepository接口 测试&#xff1a; 多对多…

Mybatis-Plus快速入门

入门案例 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在简化开发、提高效率开发方式基于MyBatis使用MyBatisPlus基于Spring使用MyBatisPlus基于SpringBoot使用MyBatisPlusSpringBoot整合MyBatis开发过程&#xff08;复习&#xff09;创建Spring…

DSP-Z变换

目录 Z变换的定义: Z变换的收敛域: 收敛域的定义: 收敛条件&#xff1a; Z变换收敛域的形状&#xff1a; 阿贝尔定理&#xff1a; 对于有限长序列的收敛域&#xff1a; Z变换的性质: 线性&#xff1a; 收敛域取交集&#xff1a; 时移&#xff1a; 指数相乘&#xf…

Java和Web前端哪个有发展前景?

Java和Web前端都是当今技术行业里的热门岗位&#xff0c;岗位招聘需求量大&#xff0c;人才竞争度高&#xff0c;同学们掌握这两个岗位里其中任何一个的相关主流技术&#xff0c;都可以找到一份不错的职位。下面请允许笔者做一个简要的分析阐述&#xff1a; 一、Web前端 Web前…