距离向量(DV)算法的问题

2023-11-04

上一篇将了DV协议的基本内容。DV算法固然简单易懂,但应用于实际后,人们很快发现这种算法在某些特定情况下是会出现一些致命的问题的!在这篇文章中,我们来讨论下这些问题及其解决方法。

----------------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------

选路环路(routing loop)和计数到无穷(count-to-infinity)


当某条链接的费用减少时,我们称之为有一个“好消息”。在网络中,好消息的传递往往很迅速。
例如,存在这样一个网络:
某一时刻,Y检测到它到X的链路费用由4减少为1,好消息当然要告诉大家了,于是它更新了自己的距离向量,并通知了Z。Z在收到Y的更新报文后,也更新了自己的距离向量(由5减为2),并向邻居们发送更新报文。而后,Y又收到了Z的更新报文,但它发现并没有改变自己的最低费用,于是保持不变。这样,仅仅经过了两次迭代网络就达到了静止。好消息通过网络得到了迅速传播。
但是,当链路费用增加(甚至断开)时,就不会这么简单了。
我们看下面这个例子:
还是X、Y、Z三个节点。此时Y检测到它到X的路径费用由4增加到了60。此时节点Z的距离向量为:d(X) = 5, d(Y) = 1, d(Z) = 0。于是Y在更新向量时发现,咦,Z到X的距离只有5诶,那可以先到Z再到X,于是Y的距离向量更新为:d(x) = 5 + 1 = 6, d(Y) = 0, d(z) = 1。我们可以发现,这个逻辑显然是错误的,因为Z到X的距离为5的前提是要经过Y,但Y更新后的路径又要经过Z,这就形成了一个选路环路(routing-loop)问题。因为Y的距离向量更新了(虽然是错误的),但它还是向Z发送了更新报文。Z收到更新报文后,比较了下邻居们到X的距离,发现经过Y的路径距离为1 + 6 = 7,小于直接到X的距离,于是Z也更新的自己的距离向量,然后又将更新后的距离向量发给Y。Y收到后又更新向量为8,然后再发给Z。。。这样循环往复,更新报文在Y和Z之间传来传去,直到第44次迭代后,Z算出它经由Y的路径费用大于50为止。此时,Z最终确定到X的最短路径费用是直接到达X的费用50,而Y也得到了最短路径是经Z到X的费用51。
可以看出,虽然最后还是得到了正确的信息(最后的50和51是正确的!),但坏消息的传播与好消息相比实在是慢太多了!而且,如果X和Y之间的费用为10000,Z和X的费用是9999时,就会出现计数到无穷(count-to-infinity)的问题!

毒性逆转方法(The Reverse-Poison(Split-horizon) Hack)


上述的选路环路问题可以通过毒性逆转的技术加以避免。它的基本思想是:如果Z的最短路径要通过邻居Y,那么它将告诉Y自己到目的节点的距离是∞。这样,Z向Y撒了一个善意的谎言,使得只要Z经过Y选路到X,它就会一直持续讲述这个谎言,这样Y也就永远不会尝试从Z选路到X了,也就避免了环路问题。(可见,有时善意的谎言也不是件坏事,也是为了你好啊T^T)
我们将毒性逆转技术应用于上例。Y在更新自己的距离向量时,发现Z到X的距离是∞,于是它将d(x)无奈地更新为60,并向Z发送了更新报文。Z收到报文后更新自己的d(X)为50(直接选路到X),并发给Y更新报文(此时因为Z不需要经过Y进行选路,因此将告诉Y自己到X的距离为50)。Y在接收到Z的报文后,重新将距离更新为1 + 50 = 51,并告诉Z自己到X的距离是∞(实际是51)。Z收到报文后,发现最低耗费并没有改变,因此算法进入静止状态。
但是,当涉及3个或更多节点(而不仅仅是两个直接相连的邻居节点)的环路将不能被毒性逆转技术检测到,如下例:
当C和D之间的连接断开时,依次发生如下事件:
  1. A收到来自C的坏消息,然后将选择从B到达D
  2. A向C发送更新报文
  3. C向B发送更新报文
这种问题出现的原因是,A和B无法同时收到来自C的更新报文然后更新自己的距离向量。比如这里,B与A相比得到的更新报文时间要晚,这就给A造成了“错觉”,在A看来,虽然从C到不了D,但是选B也可以。然后它又把这个错误的好消息告诉了C,让C也以为自己又和D团聚了。最后,终于想到忽略了B,又发送了报文给B。这样,A、B、C都以为自己和D联系上了!但实际上D和它们已经隔离了。。。

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

距离向量(DV)算法的问题 的相关文章

  • git学习:github上传自己的代码到别人的仓库

    转载 原博客链接 总结 向别人贡献自己的代码 和传到自己仓库的区别 要先fork转化 clone仓库文件到电脑本地 然后进入文件夹 若想提交到非默认分支 要先git checkout到分支 pull分支下的最新代码 若还想创建新分支 用gi
  • 入門篇-耦合Coupling AC/DC/GND差別在哪

    摘自 https www strongpilab com p 156 示波器操作 入門篇 耦合Coupling AC DC GND差別在哪 2016 06 26 儀器 Instrument 示波器 Scope 0 示波器的Vertical選
  • Crested Ibis vs Monster——AT动态规划思想

    题目描述 Ibis is fighting with a monster The health of the monster is H Ibis can cast N kinds of spells Casting the i th spe
  • 对caffe2的一些初步体会(草稿)

    Caffe2的一些关键设计思想 所有运算都抽象为Operator Blob和Tensor的概念 Blob和Net都存放在Workspace中 一个Workspace中可以有多个Net 这些Net中使用到的相同名称的Blob实际对应于这个Wo
  • 图数据库nebula

    目录 1 查询方式 按需不需要基于索引查询 可以分为两类 为什么有的需要索引 go 依据路径查询属性 fetch 获取指定边 点的属性值 lookup match 1 查询方式 nebula可以用来查询的语句关键字主要有 GO FETCH

随机推荐

  • virt与virsh常用命令

    前提 客户机虚拟机上配置qemu guest agent 并对guest的xml配置文件做一些修改 那么就可以使用很多特有的命令 对虚拟机进行配置 例如 修改虚拟机密码 root localhost virsh set user passw
  • Excel工具类

    目录 1导入导出 2测试 2 1导入测试 2 1 1JSON导入 2 1 2对象导入 2 2导出测试 2 2 1导出模版 2 2 2导出用户表 3依赖 4工具包 1导入导出 UserImport package com excel enti
  • 关于嵌入式系统的学习路线图

    来源 本文乃同济大学软件学院王院长 JacksonWan 在同济网论坛发表的帖子 谈谈软件学院高年级同学的学习方向 的第二部分 三部分依次为 一 关于企业计算方向 二 关于嵌入式系统方向 三 关于游戏软件方向 嵌入式系统方向 嵌入式系统无疑
  • Java加密技术(九)——初探SSL

    在 Java加密技术 八 中 我们模拟了一个基于RSA非对称加密网络的安全通信 现在我们深度了解一下现有的安全网络通信 SSL 我们需要构建一个由CA机构签发的有效证书 这里我们使用上文中生成的自签名证书 zlex cer 这里 我们将证书
  • 2021-06-24

    daily plan 2021 05 2021年05月 2021 05 06 Spring概要与入门 https www yuque com haohaoxuexicainengtiantianxiangshang ldmxww eb8tv
  • USB fastboot

    1 Samsung fastboot flashing unlock 2 bootloader增加解锁密码 diff git a app aboot aboot c b app aboot aboot c index e4d46e4 1b4
  • win10安装.NET Framework 4.5.2时会提示:这台计算机中已经安装了 .NET Framework 4.5.2 或版本更高的更新

    问题现象 win10安装 NET Framework 4 5 2时会提示 这台计算机中已经安装了 NET Framework 4 5 2 或版本更高的更新 问题原因 Win10系统自带的 net framework版本为4 7 问题解决 1
  • 1352--奖金(拓扑排序)

    输入样例 2 1 1 2 输出样例 201 解析 拓扑排序 判断是否存在结果 include
  • 鸢尾花分类

    鸢尾花数据集 鸢尾花数据集包含四个特征和一个标签 这四个特征确定了单株鸢尾花的下列植物学特征 花萼长度 花萼宽度 花瓣长度 花瓣宽度 我们的模型会将这些特征表示为float32数值数据 该标签确定了鸢尾花品种 品种必须是下列任意一种 山鸢尾
  • 交流耦合与直流耦合

    交流耦合 AC Coupling 就是通过隔直电容耦合 去掉了直流分量 直流耦合 DC Coupling 就是直通 交流直流一起过 并不是去掉了交流分量 比如在3V的直流电平上叠加一个1Vpp的弦波 如果用直流耦合 看到的是以3V为基准 0
  • Codeblocks+MinGW+wxWidgets搭建方法

    Code Block MinGW 和 wxWidgets 分别是三个著名的开源项目 分别是 IDE 编译器和界面库 由这三样搭建起来的全开源纯c 开发环境 功能不逊色于Visual C 由于是开源的 这样的环境还是免费的 并且是跨平台的 下
  • [管理与领导-73]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 如何持续提升自我

    目录 一 能力三核 1 1 专业知识能力 1 2 通用管理能力 1 3 优秀品质能力 二 能力发展策略 三 学习的四种渠道 四 有效的刻意练习 一 能力三核 1 1 专业知识能力 专业知识能力是指在特定领域或行业中所掌握的专业知识和技能 它
  • Ubuntu空间不足,如何扩容

    目录 1 硬盘操作步骤 2 Ubuntu命令操作 安装分区管理工具 3 分区结果展示 1 硬盘操作步骤 最近发现Ubuntu空间不足 怎么去扩容呢 第一步 点击 硬盘 第二步 点击 扩展 第三步 修改 最大磁盘容量大小 选择一个自己认为比较
  • 一. k8s-基础概念

    1 kubernetes是什么 Kubernetes 是一个可移植 可扩展的开源容器编排系统 主要用于自动化部署 扩展和管理容器应用 提供资源调度 部署管理 服务发现 扩容缩容 监控等功能 对于负载均衡 服务发现 高可用 滚动升级 自动伸缩
  • 303. Range Sum Query - Immutable dynamic programming

    Given an integer array nums find the sum of the elements between indices i and j i j inclusive Example Given nums 2 0 3
  • 多电平双向DC/DC直流变换器的工作原理(以三电平为例子)

    多电平双向DCDC变换器的工作原理 一 所用论文和参考文献 1 1 主要是中文的文献 二 工作原理和重要概念 2 1 飞跨电容的作用 2 2 三电平的工作原理 1 3 多电平的优点 二 一些注意点 2 1 电感电流的变化 2 2 多飞跨电容
  • UE4 c++动态加载Ui并添加到窗口

    创建界面并且添加到窗口用蓝图创建的话 比较简单 本篇博文就不介绍了 有时候需要用C 添加已经创建好的界面蓝图到窗口 下面就简单介绍一下怎么用C 的方法添加 涉及到动态加载 FString UiPath TEXT Script UMGEdit
  • FPGA设计:制作一个频率计

    这次把自己做过的一个频率计拿出来跟大家分享一下 项目采用VHDL语言来编写 一 功能介绍 对信号源输入信号的频率进行正确测量并显示 测量范围 0 9999Hz 测量精度 1Hz 测量误差 1Hz 因为用的FPGA板只有四个数码管 所以就采用
  • 84.Robot Framework简介及安装验证方法

    文章目录 requirements 简介 Robot Framework架构 安装Robot Framework 转载请注明原始链接 https blog csdn net a464057216 article details 104369
  • 距离向量(DV)算法的问题

    上一篇将了DV协议的基本内容 DV算法固然简单易懂 但应用于实际后 人们很快发现这种算法在某些特定情况下是会出现一些致命的问题的 在这篇文章中 我们来讨论下这些问题及其解决方法 分割线 选路环路 routing loop 和计数到无穷 co