从例中的几个示例可以看出, FD与真实的最低CD值不同,工程师可以通过命令show ipv6 route查看最低CD值。在向邻居通告去往2001:DB8:CCIE::/64的距离时, R1将会通告自已真实的距离,而不是通告FD,再次强调, FD是一个内部值,EIGRP用它来选择无环路径,但并不会在任何EIGRP数据包中通告FD值
刚才已经介绍了使用FD背后的意图,接下来考虑下图所示环境。这个拓扑与上图只有一点不同: R4只连接R1,并不连接LAN。工程师将R1-R4链路上的延迟配置为20。因此R4将去往2001:DB8:CCIE::/64的路由指向R1,同时对于这个网络, R4的总度量值会是: (2+9+1)×256=3072,与上图所得结论相同
.png)
现在假设R1-R2链路突然断开。在链路断开的瞬间,整个拓扑中只有R1和R2能够知道这个拓扑变化。R3和R4这时候还都不知道拓扑发生了变化。如果R1马上开始为这个目的地选择新的下一跳,它将会选择R4,因为在R2不可达后, R4提供的路径拥有最低开销:(2+12)×256=3584。然而,这种选择将会导致路由环路,因为当R1-R2链路断开,且R1尝试寻找其他下一跳时, R4并没有根据这个拓扑变化进行路由更新,因此它的RD (12×256=3072)已经过时了。盲目地信任这个值可不太明智。
这时就需要FD的介人了。工程师将FD设置为2560后, R1就会知道曾经在某个时间,有一条无环路径可以到达目的地,并且它的距离为2560。在拓扑中,所有链路的开销值都是正数(不会是负数,也不会是0),提供这条路径的邻居一定更靠近目的地,也就是说它们的RD一定小于2560。在曾经的那个时间点,任何距离小于2560的邻居都可以为R1提供安全的路径,因为这些邻居不会将数据包发回给R1,也不会通过其他更多的路由器将数据包发回给R1:这是因为如果邻居自已的距离小于R1的距离,邻居就没有理由通过距离大于自已的路径转发数据包。
现在,如果R1的真实距离随着时间变得更大了,那么对于那些距离小于2560的邻居来说,不使用Rl的理由更加充分了,与之前的理由一样,为什么要将数据包发送给距离比自已大,而且还越来越大的R1呢?要知道在这个逻辑中,邻居路由器甚至不需要知道R1的距离已经从2560增加到了一个更高的值,因此在这个可行性检查中,邻居甚至并不怎么需要R1的最新信息,但这却正是我们需要的!
上述这种思想就构成了FD (可行距离)以及与其相关的可行性条件检查的基础。FD是自上次路由变为被动状态后, EIGRP记录下的去往某目的地的最小已知距离,这个值描述的是路由器已知的去往该目的地最优路径的度量值。任何当前距离低于这个值的邻居都不会把数据包发回到这台路由器,而且就算邻居知道该路由器由于某种原因增大了自已的距离,它也不会考虑将数据包发回给这台路由器。因此,从这个目的地上一次变为被动状态后,任何比这台路由器距离目的地更近的邻居都不会造成路由环路,说得更专业一些就是:任何邻居的RD值只要小于这台路由器的FD值,就不会造成路由环路。这两种构想造就了可行性条件,这是由J. J. Garcia-Luna-Aceves博士在20世纪80年代末期和90年代早期提出的防环充分条件之一。这个可行性条件有时也称为源节点条件(Source Node Condition) ,指的是满足RD<FD的邻居能够提供无环路径。
要注意, FC是一个防环中的充分条件,并不是必要条件;也就是说每个满足FC的邻居都能够提供无环路径。但并不是每条无环路径都满足FC。在这两个拓扑中, R4向R1报告的它去往目的地2001:DB8:CCIE::/64的距离都是12×256=3072。在图1中, R4与目的地网络直连,能够直接将数据包转发到这个网络中。如果R4从R1那里收到了去往这个LAN的数据包, R4会直接把它们转发到这个LAN,并不会造成任何路由环路。可是在图2中, R4将R1作为去往LAN网络的下一跳,那么当R1试图通过R4来路由去往LAN的数据包时, R1会再次从R4收到这些数据包,从而造成路由环路。换句话说,如果邻居的RD值等于或大于R1的FD值,(也就是如果RD>FD还选它做下一跳的话就可能环路)这个邻居(图2)可能会或不可能(图1)造成路由环路;对于距离矢量协议来说, R1没有更多的信息能够确认到底是否会形成路由环路。不过有一点是肯定的,如果邻居的RD值小于R1的FD值(也就是自从目的地上一次变为被动状态后,这个邻居总是比R1更靠近目的地) ,这个邻居就永远不会造成路由环路。FC基本上把一台路由器的所有邻居分为了以下两组:保证能够提供无环路径的邻居;以及所有其他无法做出保证的邻居。
对于一个目的地来说,所有满足FC的邻居都称为可行后继(Feasible Successor) ,路由器可以安全地将它们用作去往该目的地的下一跳。换句话说,可行后继是指确保能够为某目的地提供无环路径的邻居;一个邻居是否是可行后继,检验标准就是FC。在所有的可行后继中,总会有一个或几个提供了去往该目的地的最小CD值;这些邻居称为后继(Successor) 。可行后继和后继都必须满足FC的要求,都保证能够提供无环路径;后继还必须要提供最短路径。其实从技术上说,每个后继也是可行后继,因为它也满足了FC的要求。不过在日常工作中,可行后继这个术语专门用来表示提供了无环路径的邻居,但它提供的路径还不是最短路径。工程师可以使用show ip eigrp topoIogy命令来查看某个目的地的所有后继和可行后继。不满足FC的邻居不会出现在这条命令的输出内容中;为了查看所有信息,工程师必须使用命令show ip eigrp topoIogy all-links.
回来看看图2,当R1-R2链路失效后, FC能够使R1不选择R4,从而不会构成路由环路。这是因为R4的RD是3584,而R1的FD是2560,因此R1认为R4可能会将自已当作去往这个LAN的下一跳。因此R4没有通过FC检查,也就不会被R1当作可行后继。当R1-R2链路断开的瞬间,只有R1和R2能够知道这个故障;而R1这时也知道,即使R4看起来提供了最低开销的下一跳路径,但它其实并不可靠。这样就避免了R1将路由指向R4,避免了构建短暂的路由环路。
EIGRP路由器总是可以使用任意后继和可行后继来访问目的地,对此并没有过多的限制。使用后继,可以通过最短的无环路径来传输数据包;使用可行后继,会使数据包传输更长的距离,但通过的路径也是无环的。当一条路由处于被动状态时,通常并没有理由使用可行后继来路由数据包,因为这会导致数据包被路由到次优的路径上;不过,这正是EIGRP提供的非等价负载分担特性的理念来源。
- EIGRP-12-弥散更新算法-DUAL的FSM(*没写完)
FD (可行距离).后继和可行后继.本地计算和弥散计算(随着查询包的发出而扩散,随着响应包的接收而收敛)一到目前为止介绍的这些机制能够使路由器有效地计算出去往某目地的新路径,只要在整个弥散计算中不再出 ...
- EIGRP-9-弥散更新算法-拓扑表
弥散更新算法(DUAL)是一个收敛算法.它代替了其他距离矢量协议使用的Bellman-Ford 算法.路由环路.甚至是在协议完全收敛前出现的瞬时环路.都会对网络性能造成不良影响.为了防止环路的形成.D ...
- EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算
至此,我们已经了解了诸多概念: RD (报告距离). CD (计算距离). FD (可行距 离)和FC (可行性条件) ,在此基础上继续了解EIGRP对于拓扑变化的应对方法想必是轻松愉快的.能够导致拓 ...
- 海量数据相似度计算之simhash和海明距离
通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法.欧式距离.Jaccard相 ...
- Canopy算法计算聚类的簇数
Kmeans算是是聚类中的经典算法.步骤例如以下: 选择K个点作为初始质心 repeat 将每一个点指派到近期的质心,形成K个簇 又一次计算每一个簇的质心 until 簇不发生变化或达到最大迭代次数 ...
- App Store审核指南中文版(2014.10.11更新)
App Store审核指南中文版(2014.10.11更新) 2014-10-11 16:36 编辑: suiling 分类:AppStore研究 来源:CocoaChina 2 8657 App ...
- 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- C语言的10大基础算法
C语言的10大基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文包括了经典的Fibonacci数列.简易 ...
- 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
随机推荐
- python之pytest框架实现
一.pytest测试框架简介: pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做se ...
- Poj2586 每五个月都是亏
题目大意: MS公司(我猜是微软)遇到了千年虫的问题,导致数据大量数据丢失.比如财务报表.现在知道这个奇特的公司每个月不是盈利就是亏损(废话),而且无论是盈利和亏损都有一个定值(亏少了它还不干).经过 ...
- 求平均成绩(hdu2023)
注意:要心细,不要错在小细节上.如int c[6];double agve; c[j]=agve:这是错误的. #include<stdio.h> #include<cmath> ...
- Mysql与Mysqli的区别及特点
1)PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能,就 Extension ...
- Codeblocks运行按钮变灰,卡程序编译
实际上,当我们点击绿色运行按钮运行之后,.exe文件会开始运行,当我们点击红色调试按钮之后,会开始调试. 因此当我们在运行卡住之后,点击红色调试按钮,实际上并没有真正的结束程序,只是将窗口隐藏起来,我 ...
- h5 js判断是IOS系统还是android系统
function detect(){ var equipmentType = ""; var agent = navigator.userAgent.toLowerCase(); ...
- Java的字节流,字符流和缓冲流对比探究
目录 一.前言 二.字节操作和字符操作 三.两种方式的效率测试 3.1 测试代码 3.2 测试结果 3.3 结果分析 四.字节顺序endian 五.综合对比 六.总结 一.前言 所谓IO,也就是Inp ...
- html5学习之路_005
PHP环境搭建 1.下载安装xampp 2.打开xampp,开启mysql和apache 3.在开发环境eclips中下载插件 4.安装php 5.切换到php开发环境 6.创建一个php项目 7.打 ...
- 读-写锁 ReadWriteLock & 线程八锁
读-写锁 ReadWriteLock: ①ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作. 只要没有 writer,读取锁可以由 多个 reader 线程同时保 ...
- MFC---编辑框控件
1.编辑框内允许多行输入,或者说是允许敲回车 编辑框属性里将multiline设置为TRUE或者将Want Return设置为TRUE 2.水平滚动条,垂直滚动条 Horizontal Scroll ...