DJ4-5 路由算法:LS 和 DV

news2024/11/27 21:05:56

目录

一、迪杰斯特拉算法

1. 术语定义

2. 算法描述

3. 举例说明

4. 构建从源节点到目的节点的路径

5. 构建最低费用路径树

6. 构建转发表

二、距离向量路由算法

1. 术语定义

2. 举例说明

3. 距离向量表

4. 更新距离向量表

5. 举例说明

三、距离向量路由算法 PLUS

1. 链路费用改变与链路故障

2. 毒性逆转

3. 毒性逆转的 BUG

四、LS 算法和 DV 算法比较

1. 消息复杂度

2. 收敛速度

3. 健壮性


一、迪杰斯特拉算法

迪杰斯特拉算法属于 LS 算法。

1. 术语定义

2. 算法描述

3. 举例说明

计算从 u 到所有可能目的节点的最低费用路径。

计算过程如表,表中的每一行表示一次迭代结束时的算法变量值。

- 代表无穷,/ 代表已经加入集合 N' 。

4. 构建从源节点到目的节点的路径

5. 构建最低费用路径树

最低费用路径树不同于最小生成树。最小生成树保证连接所有节点的路径权值之和最小,而最低费用路径树只是保证源节点到各目的节点的路径权值之和最小。因此,最小生成树不用指出一个源节点,而最低费用路径树必须指出一个源节点。源节点的不同,会导致最低费用路径树的不同。

根据目的节点找出顺序及其前驱节点,可以画出从源节点 u 到所有目的节点的最低费用路径树。

根据得到的最低费用路径树,可以生成源节点 u 的转发表。

6. 构建转发表

默认路由 * :用于表示所有具有相同下一跳的表项。即将下一跳相同的项合并为一项,用 * 表示目的节点。默认路由的优先级最低:转发分组时,只有找不到对应表项时,才使用默认路由。

二、距离向量路由算法

1. 术语定义

最低费用路径的费用表示

2. 举例说明

所有 d 值都是邻居节点告诉源节点的,源节点只知道它与邻居节点的直接链路的链路费用。

3. 距离向量表

初始时 x 并不知道 y 和 z 的距离向量,因此都设置为无穷。

4. 更新距离向量表

5. 举例说明

初始节点只知道自己到邻居节点的链路费用。

开始后,节点将自己的距离向量表发送给邻居,同时接收邻居的距离向量表。然后,根据邻居的距离向量表来更新自己的距离向量。

注意:c(x, z) 等数值来源于图,Dy 和 Dz 来源与邻居的距离向量表。此外,这一时刻的 Dx 由 BF 公式计算而得,跟上一时刻的 Dx 值无关(不需要和上一时刻的 Dx 值比大小)!因此,更新的 Dx 值可能更大也可能更小。

只要自己的距离向量更新了,就需要发送给自己的邻居节点,同时也要接收邻居节点发来的更新的距离向量。

第二次没有需要更新的距离向量,因此不会再发送给邻居节点,从而算法终止。

总结:

① 多次重复从邻居节点接收更新的距离向量,并重新计算距离向量,再向邻居节点发送更新的距离向量,一直持续到没有更新的距离向量发出为止。

② 算法进入暂时的静止状态,直到某个链路的费用发生改变为止。

③ 再次重复 ① 的操作。

三、距离向量路由算法 PLUS

1. 链路费用改变与链路故障

当一个节点检测到它与邻居节点之间的链路费用发生变化时,就用 BF 公式重新计算其距离向量。若距离向量发生变化,则通知其邻居节点。

(1)某链路费用减少时的情况

说明:节点之间链路费用减少的 好消息 在网络中能迅速传播。

(2)某链路费用增加时的情况

Q:为什么计算出来的新费用是错的?

A:由于链路费用改变,Dz(x) 已经不等于 5 了,但 y 还是使用了旧的 Dz(x) 。

产生选路回环:为到达 x, y 通过 z 选路,z 又通过 y 选路。即目的地为 x 的分组到达 y 或 z 后,将在这两个节点之间不停地来回反复,直到转发表发生新的改变为止。

说明:链路费用增加的 坏消息 传播得很慢!当链路费用增加的很大时,会出现 计数到无穷 问题。如链路费用 c(y,x) 变为 10000,c(z,x) 变为 9999 时。

2. 毒性逆转

解决 计数到无穷 的方法:毒性逆转。

毒性逆转:假如 z 为了实现最低路径费用而需要通过 y 去到达 x,则 z 告诉 y :它到 x 的距离是无穷大的,从而 y 将不会再经过 z 到 x 。

假设 y 计算出它到达 x 的最低费用路径为:y→z→...→x,而 z 计算出它到达 x 的最低费用路径为:z→y→...→x,则会产生选路循环。因此,如果 z 到 x 需要经过 y,则让 y 到 x 的时候一定不要经过 z,因为无论如何 y 经 z 到 x 的费用都会比 y 到 x 的大(因为 z 到 x 包含了 y 到 x)

y 内心 OS:还不如俺自己去找 x 。

前两步还是和之前一样的操作,不过引入毒性逆转后,x 或 y或 z 需要根据自己的下一跳来通知邻居节点其某个距离向量为无穷。

链路费用的改变打破了原本的安宁!

z 根据 y 更新的距离向量来更新自己的距离向量。

虽然 z 的距离向量改变了,但由于该路径还是会经过 y,对于 y 仍应该是无穷,因此不必再通知 y 了,从而又进入了暂时静止状态。

3. 毒性逆转的 BUG

Q:毒性逆转可以完全解决计数到无穷的问题吗?

A:不能。如果是三个以上节点的环路,则不能被毒性逆转技术检测到。

Dz(a) 的路径为:z→y→...→a,进一步这条路为:z→y→x→...→a,但是 z 只知道自己的下一跳是谁,而不知道自己的下一跳又去经过了 x,因此基于下一跳的毒性逆转策略失效了。

其它解决环路的方法:

  • 定义最大度量,以防止计数至无穷大
  • 抑制计时器
  • 水平分割
  • 路由毒化
  • 触发更新

四、LS 算法和 DV 算法比较

1. 消息复杂度

LS 算法:知道网络每条链路的费用,需发送 O(nE) 个报文;当一条链路的费用变化时,必须通知所有节点。

DV 算法:迭代时,仅在两个直接相连邻居之间交换报文;当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用。

 

 

2. 收敛速度

LS 算法:需要 O(nE) 个报文和 O(n2) 的搜寻,可能会振荡。

DV 算法:收敛较慢。可能会遇到选路回环,或计数到无穷的问题。

3. 健壮性

Q:当一台路由器发生故障、操作错误或受到破坏时,会发生什么情况?

LS 算法:路由器向其连接的一条链路广播不正确费用,路由计算基本独立(仅计算自己的转发表),有一定健壮性。

DV 算法:一个节点可向任意或所有目的节点发布其不正确的最低费用路径,一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络。

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

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

相关文章

多维评测指标解读2022MSU世界编码器大赛结果

是极致性能,更是最佳商用。 19项第一之上,是63%的极致带宽降低 近日,2022 MSU世界视频编码器大赛成绩正式揭晓。报告显示,阿里媒体处理服务MPS(Alibaba Media Processing Service)s264及s265编码器共计斩获…

【黑马旅游案例记录(结合ES)】

黑马旅游案例记录 11.9.黑马旅游案例11.9.1.酒店搜索和分页11.9.1.1.需求分析11.9.1.2.定义实体类11.9.1.3.定义controller11.9.1.4.实现搜索业务 11.9.2.酒店结果过滤11.9.2.1.需求分析11.9.2.2.修改实体类11.9.2.3.修改搜索业务 11.9.3.我周边的酒店11.9.3.1.需求分析11.9.3.…

10 【Sass语法介绍-继承】

1.前言 在我们编写样式的时候,很多情况下我们几个不同的类会有相同的样式代码,同时这几个类又有其自己的样式代码,这使我们就可以通过 Sass 提供的继承 extend 来实现。本节内容我们将讲解 Sass 继承的语法以及继承的多重延伸等等&#xff0…

【无功功率控制】连接到无限电网的小型风电场的无功功率控制(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MongoDB【常用命令】

目录 1:基本常用命令 1.1:演示案例 1.2:数据库操作 1.2.1:选择和创建数据库,查看当前正在使用的数据库命令 1.2.2:数据库的删除 1.3:集合操作 1.3.1:集合的显式创建&#xff0…

安全意识培训:如何提高员工网络安全意识?

随着网络技术的不断发展和应用,网络安全已经成为企业必须关注和重视的问题。尤其是在今天,企业数字化转型的大背景下,网络安全问题日益凸显。对于企业而言,员工是企业安全的第一道防线,提高员工的网络安全意识已经成为…

制作自己的镜像并且推送到docker hub上去。

1、在docker hub(Docker)注册账号:比如我的账号是:zhangyi0833 2、在本机上制作自己已经安装了自己想要的工具的镜像,比如我这里安装了cgdb在centos8上面。通过命令制作自己的镜像: docker commit -m"提交的描述信息" -a"镜像…

如何复刻Midjourney的成功?

AI绘画的大模型和应用非常多,但最有名的非Stable Diffusion和Midjourney莫属,其中,尤其是Midjourney(以下简称MJ),仅11位成员,8个研发人员中的一半都是尚未毕业的本科生,从未融资,成立3年,千万用…

(原创)Flutter基础入门:手把手教你搭建Flutter混合项目:模块代码依赖方式集成

前言 Flutter是Google开源的构建用户界面(UI)工具包 支持在不同平台构建一致的ui效果 但在实际业务中,一般不会整个APP都用纯Flutter开发 尤其一些老的项目,会采用接入Flutter的方式来混合开发 那么今天就主要讲一下如何搭建一个…

外卖app开发流程全解析

外卖app开发是现代餐饮业的一个必备部分。在这个数字化时代,人们更愿意使用手机应用程序来订购食品。因此,为了满足客户需求,餐饮企业需要开发自己的外卖app。 第一步:确定目标受众 在开始外卖app的开发之前,需要确定…

Shiro-721---漏洞复现

漏洞原理 Shiro rememberMe 反序列化远程代码执行漏洞 由于 Apache Shiro cookie 中通过 AES-128-CBC 模式加密的 rememberMe 字段存 在问题,用户可通过 Padding Oracle 加密生成的攻击代码来构造恶意的 rememberMe 字段,并重新请求网站,进…

latex论文排版个人向相关问题记录

很久没更新了,小论文基本都见刊了,记录下之前写论文碰上的latex一些排版问题吧,比较琐碎。 伪代码跨页问题 最开始使用algorithms包来写的伪代码,左边会有大方括号,蛮好看的。 不过使用algorithms包进行伪代码撰写&a…

Java语言----动态顺序表(ArrayList)

目录 一.顺序表 二.顺序表的手动实现 2.1顺序表的创建 2.2.基本功能的实现 2.2.1扩容顺序表 2.2.2 判断顺序表是否为满 2.2.3 判断顺序表是否为空 2.2.4打印顺序表 2.2.5清空顺序表 2.3四大功能的实现 2.3.1增加元素 2.3.2删除元素 2.3.3查找元素 2.3.4更改数据 总代码 &a…

记录-有意思的气泡 Loading 效果

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果&am…

【SpringCloud常见面试题】

SpringCloud常见面试题 1.微服务篇1.1.SpringCloud常见组件有哪些?1.2.Nacos的服务注册表结构是怎样的?1.3.Nacos如何支撑阿里内部数十万服务注册压力?1.4.Nacos如何避免并发读写冲突问题?1.5.Nacos与Eureka的区别有哪些&#xff…

易岸公考:公务员有五种类型可以挑选?

公务员分为国试、省试、选拔、乡镇公务员、选拔等不同考试; 不符合选拔选调生条件的,可选择国考、省考、乡镇公务员。 成为公务员后,遴选是你必不可少的晋升渠道。 一、国家考试 国考是指中央和国家机关的公务员考试,其招录机构…

关于TypeVariable的深度理解

在看java源码时,如果涉及到反射,会经常看到TypeVariable。 那么这玩意到底是个什么东西? 这是个必须要搞清楚的概念,否则很难理解源码的意图是什么? 我在这里先给出结论:这个问题的关键是具体类型和类型变…

Linux shell编程 循环语句for while实例

while 循环创建用户 i1 while [ $i -le 10 ] do useradd user${i} echo "123456" | passwd --stdin user${i} &> /dev/null let i done猜测价格 [rootxue opt]# cat caijia.sh price$[RANDOM%1001] #0-32767 i0 while true doread -p "input the price&…

尚融宝25-投资列表展示以及实现充值功能

目录 一、展示投资列表 (一)需求 (二)后端 (三)前端 二、充值功能 (一)需求 1、需求描述 2、流程 (二)充值 1、后端 2、前端 (三&…

第九章 C#脚本(下)

本章节我们说一说MonoBehaviour这个类,它的内部有很多方法用来执行不同的逻辑。Unity脚本从唤醒到销毁都有着一套比较完善的生命周期,添加任何脚本都要遵守生命周期法则!直白的讲,就是MonoBehaviour类中的方法的执行是有严格的顺序…