学习笔记——动态路由——OSPF工作原理(SPF算法)

3、SPF算法

SPF算法(最短路径优先算法,也称Dijkstra算法)由荷兰科学家狄克斯特拉于1959年提出的。

SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。

在OSPF路由协议中,最短路径树的树干长度,即OSPF路由器至每一个目的地路由器的距离,称为OSPF的Cost。SPF使用开销(cost)作为度量值。

(1)SPF算法基本步骤

1)构建SPF树

根据1类中的P2P,Transnet和2类LSA中的拓扑信息,构建SPF树干。

2)计算最优的路由

基于SPF树干和Router LSA、Network LSA中的路由信息,计算最优路由

(2)步骤详解

步骤1

OSPF路由器将分别以自身为根节点计算最短路径树。(上左图)

以RTA为例,计算过程如下:RTA将自己添加到最短路径树的树根位置,然后检查自己生成的Router-LSA,对于该LSA中所描述的每一个连接,如果不是一个Stub连接,就把该连接添加到候选列表中,分节点的候选列表为Link ID,对应的候选总开销为本LSA中描述的Metric值和父节点到达根节点开销之和。

根节点RTA的Router-LSA中存在TransNet中Link ID为10.1.12.2 Metric=1和P-2-P中Link ID为3.3.3.3 Metric=48的两个连接,被添加进候选列表中。

RTA将候选列表中候选总开销最小的节点10.1.12.2移到最短路径树上,并从候选列表中删除。

  

步骤2

DR被加入到SPF中,接下来检查Ls id为10.1.12.2的Network-LSA。如果LSA中所描述的分节点在最短路径树上已经存在,则忽略该分节点。(如上右图所示)在Attached Router部分:

节点1.1.1.1被忽略,因为1.1.1.1已经在最短路径树上。

将节点2.2.2.2,Metric=0,父节点到根节点的开销为1,所以候选总开销为1,加入候选列表。

候选节点列表中有两个候选节点,选择候选总开销最小的节点2.2.2.2加入最短路径树并从候选列表中删除。

步骤3

节点2.2.2.2新添加进最短路径树上,此时继续检查Ls id为2.2.2.2的Router-LSA:(下左图)

第一个TransNet连接中,Link ID为10.1.12.2,此节点已经在最短路径树上,忽略。

第二个TransNet连接中,Link ID为10.1.235.2,Metric=1,父节点到根节点的开销为1,候选总开销为2,加入候选列表。

第三个P-2-P连接中,Link ID为4.4.4.4,Metric=48,父节点到根节点的开销为1,候选总开销为49,加入候选列表。

候选节点列表中有三个候选节点,选择候选总开销最小的节点10.1.235.2加入最短路径树并从候选列表中删除。

  

步骤4

lDR被加入到SPF中,接下来检查Ls id为10.1.235.2的Network-LSA。(如上右图所示)在Attached Router部分:

节点2.2.2.2被忽略,因为2.2.2.2已经在最短路径树上。

将节点3.3.3.3,Metric=0,父节点到根节点的开销为2,候选总开销为2,加入候选列表。(如果在候选列表中出现两个节点ID一样但是到根节点的开销不一样的节点,则删除到根节点的开销大的节点。所以删除节点3.3.3.3 累计开销为48的候选项)。

将节点5.5.5.5,Metric=0,父节点到根节点的开销为2,候选总开销为2,加入候选列表。

候选节点列表中有三个候选节点,选择候选总开销最小的节点3.3.3.3和5.5.5.5加入最短路径树并从候选列表中删除。

步骤5

节点3.3.3.3和5.5.5.5新添加进最短路径树上,此时继续检查Ls id分别为3.3.3.3和5.5.5.5的Router-LSA。Ls id为3.3.3.3的LSA:(下左图)

Link ID为10.1.235.2的节点已经在最短路径树上,忽略。

pLink ID为1.1.1.1的节点已经在最短路径树上,忽略。

步骤6

Ls id为5.5.5.5的LSA:(上右图所示)

Link ID为10.1.235.2的节点已经在最短路径树上,忽略。

Link ID为4.4.4.4的P-2-P连接,Metric=48,父节点到根节点的开销为2,候选总开销为50。因为节点4.4.4.4已经在候选列表中出现,且候选总开销为49。49<50,所以子节点4.4.4.4的父节点选择2.2.2.2。

至此,再通过命令display ospf lsdb router 4.4.4.4发现,LSA中的连接所描述的相邻节点都已经添加到了SPF树中。

此时候选列表为空,完成SPF计算,其中10.1.12.2和10.1.235.2是虚节点(DR)。

步骤7:计算最优路径

第二阶段根据Router LSA中的Stub、Network LSA中的路由信息,完成最优路由的计算。

从根节点开始,依次添加LSA中的路由信息(添加顺序按照每个节点加入SPF树的顺序):

p1.1.1.1(RTA)的Router LSA中,共1个Stub连接,网络号/掩码10.1.13.0/24,Metric=48;

p10.1.12.2(DR)的Network LSA中,网络号/掩码10.1.12.0/24,Metric=1+0=1;

p2.2.2.2(RTB)的Router LSA中,共1个Stub连接,网络号/掩码10.1.24.0/24,Metric=1+0+48=49;

p10.1.235.2(DR)的Network LSA中,网络号/掩码10.1.235.0/24,Metric=1+0+1=2;

p3.3.3.3(RTC)的Router LSA中,共1个Stub连接,网络号/掩码10.1.13.0/24,已在RTA上,忽略;

p5.5.5.5(RTE)的Router LSA中,共1个Stub连接,网络号/掩码10.1.45.0/24,Metric=1+0+0+1+48=50;

p4.4.4.4(RTD)的Router LSA中,共2个Stub连接,网络号/掩码10.1.24.0/24,已在RTB上,忽略;网络号/掩码10.1.45.0/24,已在RTE上,忽略。

查看OSPF路由表

<RTA>display ospf routing

  OSPF Process 1 with Router ID 1.1.1.1

  Routing Tables

 Routing for Network

 Destination      Cost      Type         NextHop         AdvRoute      Area

 10.1.12.0/24       1      Transit      10.1.12.1        1.1.1.1       0.0.0.0

 10.1.13.0/24      48      Stub         10.1.13.1        1.1.1.1       0.0.0.0

 10.1.24.0/24      49      Stub         10.1.12.2        2.2.2.2       0.0.0.0

 10.1.45.0/24      50      Stub         10.1.12.2        5.5.5.5       0.0.0.0

 10.1.235.0/24      2      Transit      10.1.12.2        2.2.2.2       0.0.0.0

 Total Nets: 5

 Intra Area: 5 Inter Area: 0 ASE: 0 NSSA: 0


整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun    暗号:CSDN】

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

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

相关文章

Go语言--函数类型、匿名函数和闭包

在Go语言中&#xff0c;函数也是一种数据类型&#xff0c;我们可以通过 type 来定义它&#xff0c;它的类型就是所有拥有相同的参数&#xff0c;相同的返回值的一种类型。 语法 通过type给函数类型起名&#xff0c;然后通过名字进行函数的调用 好处&#xff1a;多态 通过统…

python遍历目录下所有文件

python遍历目录下所有文件 方法1&#xff1a;使用os.walk()函数递归遍历目录下所有文件。方法2&#xff1a;使用os.scandir()函数遍历目录下所有文件。方法3&#xff1a;使用os.listdir()函数遍历目录下所有文件。方法4&#xff1a;使用glob模块遍历目录下所有文件。方法5&…

【大模型】大模型参数量与底层算力资源之间的关系

大模型参数量与底层算力资源之间的关系 大模型参数量与底层算力资源之间的关系引言一、大模型参数量的影响1.1 模型表达能力提升1.2 过拟合风险 二、底层算力资源的挑战2.1 计算资源需求2.2 存储与带宽瓶颈 三、估算模型所需算力资源3.1 基于参数量的估算3.2 考虑硬件效率3.3 实…

查询进程, 并且列出所在路径和端口号

ps -ef | grep port9| grep -v grep | awk {print $2} | while read pid; do # 获取启动目录 start_dir$(pwdx $pid 2>/dev/null | awk {for (i2; i<NF; i) printf "%s ", $i; print ""}) # 获取端口信息&#xff08;使用 ss 命令&#xff0…

【ssh】permission denied, please try again.

ssh执行scp操作时显示 permission denied, please try again. 1.确保被复制文件权限已开 chmod 777 file 2.如果仍未解决直接sudo sudo scp xxx xxx

信息安全驱动汽车行业快速向数字化转型

开发一款安全性良好的软件是困难的&#xff0c;它需要专业知识的积累以及对常见编程缺陷和规则的了解&#xff0c;例如检查输入范围、管理内存分配和回收、寻址字符串格式、避免悬空指针等等。通常情况下&#xff0c;编写安全代码与开发人员编写“流畅”代码的自然愿望形成了对…

【数据库】第7讲 关系数据模型(章节测验)

一. 单选题 1【单选题】下面对于关系的叙述中&#xff0c;不正确的是&#xff08;C&#xff09; A、关系中的每个属性是不可分解的B、在关系中元组的顺序是无关紧要的C、任意的一个二维表都是一个关系D、每一个关系只有一种记录类型 2【单选题】关系模型的完整性约束不包括&…

日本最新型高达式巨型机器人承担铁路维护任务

日本有制造现实生活中的高达式巨型机器人的历史&#xff0c;但它们往往是用于娱乐目的&#xff0c;而不是实际应用。不过&#xff0c;日本刚刚开始使用一个 40 英尺高的人形机器人来维护铁路线。 大约两年前&#xff0c;西日本铁路公司&#xff08;JR 西日本&#xff09;制造了…

【Unity】RPG2D龙城纷争(八)寻路系统

更新日期&#xff1a;2024年7月4日。 项目源码&#xff1a;第五章发布&#xff08;正式开始游戏逻辑的章节&#xff09; 索引 简介一、寻路系统二、寻路规则&#xff08;角色移动&#xff09;三、寻路规则&#xff08;角色攻击&#xff09;四、角色移动寻路1.自定义寻路规则2.寻…

[C++]——同步异步日志系统(2)

同步异步日志系统 一、 不定参函数1.1 不定参宏函数的使用1.2 C 语言中不定参函数的使用1.3 C不定参数使用 二、设计模式2.1 单列模式2.2 工厂模式2.3 建造者模式2.4 代理模式 在我们开发同步异步日志系统之前&#xff0c;需要了解一些相关的技术知识。 一、 不定参函数 在初学…

从键盘输入一个3位数字字符串,将其转换为数字,并逆序,不允许使用切片,不需要做判断

分析思路&#xff1a; 首先&#xff0c;从键盘输入一个字符串类型的三位数字&#xff0c;使用input()函数获取用户的输入。 使用int()函数将输入的字符串转换为整数类型。 将输入的整数进行逆序操作&#xff0c;其中具体的步骤包括通过除法和取余操作获取个位、十位和百位上的…

VCL界面组件DevExpress VCL v24.1 - 发布全新的矢量主题

DevExpress VCL是DevExpress公司旗下最老牌的用户界面套包&#xff0c;所包含的控件有&#xff1a;数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验&#xff0c;提供高影响力的业务解决方案&#xff0c;并利用您现有的VCL技能为未来构建下一代应用程…

DP学习——策略模式

学而时习之&#xff0c;温故而知新。 敌人出招&#xff08;使用场景&#xff09; 业务中需要多个算法可替换&#xff0c;而不能重构代码时&#xff0c;怎么办&#xff1f;这个时候就要出策略模式这一招了。 具体招式 策略模式的招式&#xff0c;就是把需要替换的算法抽象成…

Django REST Framework(四)DRF APIVIEW

REST framework 传入视图的request对象不再是Django默认的HttpRequest对象&#xff0c;而是REST framework提供的扩展了HttpRequest类的Request类的对象。 REST framework 提供了Parser解析器&#xff0c;在接收到请求后会自动根据Content-Type指明的请求数据类型&#xff08;…

Hadoop权威指南-读书笔记-03-Hadoop分布式文件系统

Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈&#x1f601;有兴趣的小伙伴可以去看看原著&#x1f60a; 第三章 Hadoop分布式文件系统 当数据集的大小超过一台独立的物理计算机的存储能力时&#xff0c;就有必要对它进行分…

【数据结构】(C语言):二叉搜索树(不使用递归)

二叉搜索树&#xff1a; 非线性的&#xff0c;树是层级结构。基本单位是节点&#xff0c;每个节点最多2个子节点。有序。每个节点&#xff0c;其左子节点都比它小&#xff0c;其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。 …

CAS(比较与交换)实现原理

CAS&#xff08;Compare and Swap&#xff0c;即比较并交换&#xff09;是一种用于多线程编程中无锁原子操作的机制&#xff0c;常用于实现并发数据结构和算法。CAS 操作通过硬件支持的原子操作实现&#xff0c;可以避免锁带来的开销&#xff0c;提高并发性能。以下是CAS实现原…

选择远程调用的底层实现技术

(1)、 理论基础 feign的远程调用底层实现技术默认采用的是JDK的 URLConnection&#xff0c;同时还支持 HttpClient与 OKHttp。 由于JDK的URLConnection不支持连接池&#xff0c;通信效率很低&#xff0c;所以生产中是不会使用该默认实现的。所以在SpringCloudOpenFeign中直接将…

【堆 优先队列】23. 合并 K 个升序链表

本文涉及知识点 堆 优先队列 LeetCode23. 合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#…

前端面试题5(http与https区别)

http与https区别 **HTTP&#xff08;Hypertext Transfer Protocol&#xff09;与HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;**是两种用于在互联网上传输数据的协议&#xff0c;它们有以下主要区别&#xff1a; 安全性&#xff1a; HTTP&#xff1a;HTT…