DJ4-5 路由算法:LS 和 DV
目录
一、迪杰斯特拉算法
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 算法:一个节点可向任意或所有目的节点发布其不正确的最低费用路径,一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络。
相关文章:
DJ4-5 路由算法:LS 和 DV
目录 一、迪杰斯特拉算法 1. 术语定义 2. 算法描述 3. 举例说明 4. 构建从源节点到目的节点的路径 5. 构建最低费用路径树 6. 构建转发表 二、距离向量路由算法 1. 术语定义 2. 举例说明 3. 距离向量表 4. 更新距离向量表 5. 举例说明 三、距离向量路由算法 PLUS…...
python图像处理之形态学梯度、礼帽、黑帽
文章目录 简介实战 简介 腐蚀和膨胀是图像形态学处理的基本运算,这两种运算的复合运算构成了开和闭,而腐蚀、膨胀与原图之间的加减操作,则构成了形态学梯度、礼帽和黑帽计算。 由于这几种函数均基于腐蚀和膨胀,所以其参数均与开…...
千万级直播系统后端架构设计
1、架构方面 1.1 基本 该图是某大型在线演唱会的直播媒体架构简图。 可以看出一场大型活动直播涵盖的技术方案点非常庞杂,本节接下来的内容我们将以推拉流链路、全局智能调度、流量精准调度以及单元化部署,对这套直播方案做一个展开介绍。 1.2 推拉流链…...
ImageJ 用户手册——第五部分(菜单命令File,Edit)
这里写目录标题 菜单命令26. File26.1 New26.1.1 Image26.1.2 Hyperstack26.1.3 Text Window26.1.4 Internal Clipboard26.1.5 System Clipboard 26.2 Open26.3 Open Next26.4 Open Samples26.5 Open Recent26.6 Import26.6.1 Image Sequence26.6.2 Raw26.6.3 LUT26.6.4 Text I…...
nmap常用命令
一、nmap简介 Nmap,也就是Network Mapper。nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一&…...
常用adb 命令
目录 一、常用简单的adb命令: 二、adb shell pm基本的命令: 三、adb shell am基本的命令: 四、关闭某项进程,以monkey为例: 五、最近12小时的资源情况: 六、录制屏幕命令: 七、截图命令&am…...
后端开发常犯的问题(Java版)
数据类型使用不当 ——钱相关的计算,数据类型必须用BigDecimal 1.很多开发在做金额计算时会使用double数据类型,自测一些常用场景认为double是满足需求的因而图省事直接使用此数据类型。使用double类型存在金额精度丢失的风险,涉及到钱的数据…...
Vue CLI 部署
通用指南 如果你用 Vue CLI 处理静态资源并和后端框架一起作为部署的一部分,那么你需要的仅仅是确保 Vue CLI 生成的构建文件在正确的位置,并遵循后端框架的发布方式即可。 如果你独立于后端部署前端应用——也就是说后端暴露一个前端可访问的 API&…...
客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway
文章目录 网关 Spring Cloud Gateway 一、简介 1、功能特性...
fMRI时间序列振幅和相位对功能连接分析的影响
导读 目的:fMRI领域的一些研究使用瞬时相位(IP)表征(源自BOLD时间序列的解析表征)考察了脑区之间的同步性。本研究假设来自不同脑区的瞬时振幅(IA)表征可以为脑功能网络提供额外的信息。为此,本研究探索了静息态BOLD fMRI信号的这种表征,用于…...
备战2个月,四轮面试拿下字节offer...
背景 菜 J 一枚,本硕都是计算机(普通二本),2021 届应届硕士,软件测试方向。个人也比较喜欢看书,技术书之类的都有看,最后下面也会推荐一些经典书籍。 先说一下春招结果:拿下了四个…...
关于Nginx
一、常见的“服务器中间件”(即http server-web中间件)有哪些 Tomcat、Jboss、Apache、WeBlogic、Jetty、webSphere、Nginx、IIS 二、nginx的特点 1.性能高,能承受5万并发每秒; 2.内存、磁盘,读取消耗空间小。 三、…...
tensorflow中的共享变量
(1)用途 在构建模型时,需要使用tf.Variable来创建一个变量(也可以理解成节点)。但在某种情况下,一个模型需要使用其他模型创建的变量,两个模型一起训练。此时需要用到共享变量。这时就是通过引…...
flink cep数据源keyby union后 keybe失效
问题背景:cep模板 对数据源设置分组条件后,告警的数据,和分组条件对不上, 掺杂了,其他的不同组的数据,产生了告警 策略条件: 选择了两个kafka的的topic的数据作为数据源, 对A 数据…...
python中的继承与多态,dir()函数
Python继承 在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。如果需要在派生类中调用基类的方法,可以使用内置函数super()或者通过“基类名.…...
C++练级之初级:第五篇
C练级之初级:第五篇 第五篇 C练级之初级:第五篇1.auto关键字2.for循环改进3.指针空值nullptr4.内联函数4.1内联函数的概念4.2内联函数的注意点 总结 1.auto关键字 🤔什么是auto(automatic的缩写,自动的意思)关键字? au…...
JMeter的使用(二)
九、直连数据库 通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。 获取某条学院的名字,放在百度搜索: JMeter 不具备直连数据库功能,必须整合第三方(jar包)实现配置数据库的连接通过JDBC Re…...
C/C++文件操作/IO流
学习任务: ⭐认识文件。⭐学习C语言中文件如何打开和关闭。⭐学习C语言中文件的读写方法(包括顺序读写和随机读写)。⭐学习C语言文件操作中如何判断文件读取结束。⭐简单了解FILE缓冲区。⭐认识流。⭐学习C的IO流,包括标准IO流和文…...
推荐 7 个超牛的 Spring Cloud 实战项目
个 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,这就是微服务架构的架构概念,通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 关于微服务相关的学习资料不多,而 GitHub 上的开源项目可以作为你微服务之旅…...
Linux信号:信号 信号集 信号集函数
1. 信号的概念 Linux进程间通信的方式之一。信号也称为“软件中断”。 信号特点: 简单;携带信息有限;满足特定条件才发送信号;可进行用户空间和内核空间进程的交互; 信号4要素: (1…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

