选路算法(计算机网络)

2023-11-08

目的:决定从源到目的地通过网络的“好的路径”(一般指最小费用的路径)。

根据算法是静态的还是动态的进行分类:

静态:

①路由随时间缓慢变化。

②手工配置

动态:

①路由更快地变化(周期的更新,适应链路费用和网络拓扑变化)。

根据算法是全局式的还是分散式的来加以区分:

LS(Link State,链路状态算法)

全局的

所有路由器具有完全的拓扑、链路费用信息。

具有全局状态信息的算法常被称作链路状态算法,因为该算法必须知道网络中每条链路的费用。

使用Dijkstra算法。

所有节点知道网络拓扑、链路费用

1)经“链路状态广播”完成

2)所有节点具有相同信息

从一个节点到所有其他节点计算最低费用路径

1)给出对这些节点的转发表

k次迭代后,得到k个目的地的最低费用路径。

算法:

①维护一个集合N',初始时将起点u放入其中,维护一个数组D,其中D(v)代表u到v的距离,初始时,所以与u相邻的节点的数组D赋为u到其的距离,非相邻结点赋为∞。

②找出不在集合N'中的w且使得D(w)最小,将w加入集合N’。

③对于w的所有不在N’中的邻居v,更新D(v),即D(v)=min(D(v), D(w)+c(w,v))。知道所有节点都在N’中

具体例子1

ps:p(v)从源到v沿着当前最低费用路径的前一节点

解题步骤:

步骤 N' D(v),p(v) D(w),p(w) D(x),p(x) D(y),p(y) D(z),p(z)
0 u 2,u 5,u 1,u
1 ux 2,u 4,x 2,x
2 uxy 2,u 3,y 4,y
3 uxyv 3,y 4,y
4 uxyvw 4,y
5 uxyvwz

具体例子2

计算从x到所有网络结点的最短路径。

解题步骤:

步骤 N’ D(t),p(t) D(u),p(u) D(v),p(v) D(w),p(w) D(y),p(y) D(z),p(z)
0 x 3,x 6,x 6,x 8,x
1 xv 7,v 6,v 6,x 6,x 8,x
2 xvu 7,v 6,x 6,x 8,x
3 xvuw 7,v 6,x 8,x
4 xvuwy 7,v 8,x
5 xvuwyt 8,x
6 xvuwytz

算法复杂性:n个节点

1)每次迭代:需要检查不在N’中的所有节点w

2)n(n+1)/2对比:O(n^2)

3)更有效的实现是可能的:O(nlogn)

可能震荡(由于链路流量变化,导致链路费用变化,所以需要重计算)

DV(Distance-Vector,距离矢量算法)

分散的

一开始,路由仅有与其直接相连链路的费用信息。

计算的迭代过程,与邻居交换信息。

之所以叫做DV算法,是因为每个结点维护到网络中所有其他结点的费用估计的向量。

使用Bellman-Ford方程(动态规划)

定义:dx(y)代表从x到y最低费用路径的费用;c(x,v)是x到直接邻居v的费用;minv对x的所有直接邻居取最小值。

dx(y)=minv{c(x,v)+dv(y)}

简单例子:

已知dv(z)=5,dx(z)=3,dw(z)=3

基本思想:

1)每个节点周期性的发送它自己的距离矢量DV给邻居。

2)当节点x接受到来自邻居的新DV估计,它使用B-F方程更新其自己的DV:

Dx(y) minv{c(x,v) + Dv(y)}    for each node y N

在规模较小、正常的条件下,估计值Dx(y)收敛在实际最小费用dx(y)。

异步迭代:

每次本地迭代由下列引起:

1)本地链路费用改变c(x,v)

2)DV从邻居更新报文d(v,y)

分布式:

1)每个节点仅当其DV改变时通知邻居。

2)如果必要,邻居则通知它们的邻居

每个节点的流程如下:

具体例子

假设每个结点初始时知道到它的每个邻居的费用。考虑距离向量算法,并显示在结点z中的距离表表项。

无穷计算问题

例子阐述现象

只关注y与z到目的地x的距离表中的有关表项。

在链路变化之前Dy(x)=4,Dy(z)=1,Dz(y)=1,Dz(x)=5。

若t0时刻,y检测到费用从4变为60,则Dy(x)=min{60+0,1+5}=6。(其实明显不存在1+5这条路,但是结点x仅有的信息是,它到x的直接费用是60,且z上次告诉它,z能以5费用到达x)。

这样出现了一个问题,即选择环路。y到达x,y通过路由z,z又通过路由y。这样就像一个黑洞,目的地为x的分组会在y和z结点间反复。

t1时刻,Dy(x)更新,所以又通知给z,则Dz(x)=min{50+0,1+6}=7。此时又会通知y,就这样类似进行下去。直到z最终算出它经过y的路径费用>50为止。这样才知道z直接到x是最低费用,y经过z再到x是最低费用。所以坏消息传播得很慢。

毒性逆转

思想:如果z通过y路由选择到目的地x,则z将通告y,z到x的距离是无穷大。即z将通告y Dz(x)=∞(即使实际上Dz(x)不是∞)。这样的话就可以保证只要z继续经y路由到x,则y就永远不会试图经由z到x(因为在其认知里,Dz(x)=∞)

例子阐述现象:

继续上图中的例子进行阐述。

由于使用毒性逆转,则对于y来说,Dz(x)=∞,所以t0时刻,Dy(x)=min{60+0,1+∞}=60。

通知给z,Dz(x)=min{50+0,1+60}=50,通知给y,则Dy(x)=min{60+0,1+50}=51。此时y又通知z Dy(x)=∞。以此来毒化了从z到x的逆向路径(比如z直接到y,y再经由z到x)。

然而当涉及到3个或更多结点的环路将无法用毒性逆转技术检测到。

那么可以定义最大度量来解决无穷计数的问题。

比如定义一个最大的有效费用值,如15跳步,16跳步表示∞。

LS与DV算法的比较

报文复杂性

LS:对n个节点,E条链路,发送O(nE)报文。

DV:仅在邻居之间交换(收敛时间变化)

收敛速度

LS:O(n^2)算法要求O(nE)报文(可能具有振荡)

DV:收敛时间变化(可能有选路环路,计数到无穷问题)

健壮性

若路由器异常,将发生什么现象

LS:①节点可能通告不正确的链路费用。②每个节点仅计算自己的表。

意味着其路由计算在某种程度上是分离的,提供了一定程度的健壮性。

DV:①DV节点通告不正确的路径费用。②每个节点能由其他人使用(差错通过网络传播)

因此DV算法中一个不正确的结点计算值可能扩散到整个网络。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选路算法(计算机网络) 的相关文章

随机推荐

  • 组件的生命周期

    一 组件的生命周期 1 组件的生命周期 至一个组件从 创建 gt 运行 gt 销毁的过程 2 声明周期函数 由Vue提供的内置函数 伴随组件生命周期按次序自动运行 gt 钩子函数 3 生命周期的阶段划分 1 创建阶段 beforeCreat
  • Flutter从入门到放弃之坑的神奇之处?

    坑一 关于环境变量的配置 这里要注意几点 不然你将会在这里卡死 这里只说Mac OS环境变量的配置 因为我是Mac 首先 command shift 打开隐藏文件 如果你是用的是自带的终端 请在这个文件中配置 如果你使用的是zsh请在 这个
  • Pytorch nn.Module的基本使用

    文章目录 nn Module的基本用法 nn Module的其他常用方法 参考资料 nn Module的基本用法 nn Module是所有神经网络的基类 所以你的神经网络类也应该要继承这个基类 当使用时 主要需要实现其两个方法 init 初
  • SPSS问卷数据处理步骤

    SPSS问卷数据处理步骤 一 准备 界面与数据准备工作 1 先处理显示界面问题 改成中文输出 优化操作过程 编辑 选项 2 数据字典 定义变量属性 几个代表性的 复制数据属性 数据 定义变量属性 设好以后 数据 复制数据属性 把几个代表性的
  • SQL 左连接 右表多条数据处理方式

    前言 多表连接经常使用 而一对多的数据处理比较麻烦 用于记录 便于以后使用 正文 SQL server语句 select a t from table1 a left join select from select b ROW NUMBER
  • STL模板库 常用函数 vector向量容器

    STL模板库 STL是Standard Template Library缩写 中文名字叫标准模板库 由惠普实验室提供 共有三类内容 算法 以函数模板形式实现的常用算法 如 max min swap find sort 容器 以类模板形式实现
  • 做一个 加减运算 利用JavaScript

    首先做个运算需要用到三个文本框 显示数字 这里我用input做了3个框 并且赋值他们的属性值 id 并且做了一个button按钮来调动 接着调用button这个函数 接着我们需要获取第一个和第第二个input的值 为什么用 parseInt
  • 【Linux专题_05】Linux统计行数命令

    Linux统计行数几种常用命令 wc l 这是最常用的命令 用于统计文件中的行数 它会输出文件的行数以及文件名 示例 wc l filename txt nl 该命令会给文件中的每一行添加行号 并将结果输出到标准输出 通过查看行号的最后一个
  • LeetCode 220. 存在重复元素 III

    题目链接 点击这里 class Solution public boolean containsNearbyAlmostDuplicate int nums int k int t TreeSet
  • Android Studio解除全局搜索100条限制

    1 点击Help gt Find Action选项 2 输入Registry 并选中进入 3 将ide usages page size的value设置为自己想要的数值即可
  • 修改块的方法+AcGeMatrix3d+AcGeScale3d+两点之间的距离

    开发过程中 当从外部获取了一个 需要修改块中的实体时 有以下几种方法 1 第一个通过explode函数炸开AcDbBlockReference 获取块参照中的实体对象 然后遍历对象 找到修改的实体 完成修改后将所有的实体插入到模型空间 注意
  • 第四章CSS基础

    文章目录 学习CSS的目的 引入的三种方式 内部样式表 行内样式表 外部样式表 选择器的分类 基础选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 盒子模型 不同浏览器下盒子模
  • 深度学习 从零开始 —— 神经网络(四),二分类问题,IMDB数据集使用

    IMDB数据集 互联网电影数据 包含50000条严重两极分化的评论 正面和负面评论各占50 而该数据集也同样被内置于Keras库中了 其中的评论数据已经经过了预处理 评论 单词 被转化为了整数序列 每个整数都对应词典里面的一个单词 加载数据
  • HTML页面基本结构

    本文简要介绍HTML中的各种元素及其相关属性 读者需要有一个概念 HTML页面都是由基本元素及属性组成的 HTML页面的结构如下 doctype 声明 HTML 源文件中 首先出现的是 doctype 声明 该声明告诉浏览器 本页面使用何种
  • [hive]hive中查找表或者查看表的信息

    一 查找表 查看数据库中所有表 SHOW TABLES IN db name 使用正则表达式过滤表 USE db name SHOW TABLES employ 二 查看已创建的表信息 DESCRIBE EXTENDED db name t
  • C++ vector向量的查找和删除

    一 在vector中查找元素 1 代码 include
  • 枚举电脑上的终结点设备

    STDAPI CoCreateInstance REFCLSID rclsid 创建的Com对象的类标识符 CLSID LPUNKNOWN pUnkOuter 指向接口IUnknown的指针 DWORD dwClsContext 运行可执行
  • win下使用git-bash工具进行ssh免密登录服务器

    1 ssh keygen exe 生成公钥私钥 pub 2 ssh agent exe bash 指定工具 3 ssh add exe 添加私钥 OK
  • nacos注册中心的配置

    将nacos作为注册中心使用 使用的步骤 导入nacos依赖 这么导
  • 选路算法(计算机网络)

    目的 决定从源到目的地通过网络的 好的路径 一般指最小费用的路径 根据算法是静态的还是动态的进行分类 静态 路由随时间缓慢变化 手工配置 动态 路由更快地变化 周期的更新 适应链路费用和网络拓扑变化 根据算法是全局式的还是分散式的来加以区分