从例中的几个示例可以看出, 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)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
随机推荐
- 04.PageNumberPagination分页
一.使用默认分页 1.settings 设置 REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.Pag ...
- 使用Xtrabackup进行MySQL备份 zz
zz from http://www.magedu.com/ 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对i ...
- 【1-n】区间覆盖 TOJ4168+BZOJ1192
Xiao Ming is very interesting for array. He given a sorted positive integer array and an integer n. ...
- poj3764字典树路径最大异或和
The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6853 Accepted: 1 ...
- 四使用浮动div布局
刚开始学习的小白,如有不足之处还请各位补充,感激涕零.在html中有两种方式布局<table>表格和<div>,个人剧的使用表格布局可以避免bug产生,并且表格布局相对来说要容 ...
- JAVA定义变量和基础的数据类型和关键字
标识符语法 1)java中定义标识符格式以字母,数字,下划线,$符合组成,不能以数字开头,且不能为 java中的关键字. 2)标识符意义要明确,不要乱起 3)标识 ...
- C#万能排序法
利用下面的方法可以对C#中任何类型的变量.甚至是自定义类型的变量做冒泡排序:原理是使用了C#的Func委托,使用时只要将比较的函数当作参数传进去就能够获取最终的排序结果.
- [优文翻译]002.陪伴我作为程序员的9句名言(9 Quotes that stayed with me as a developer)
导读:本文是从<9 Quotes that stayed with me as a developer>这篇文章翻译而来 下面的锦句均来自于<9 Quotes that stayed ...
- String与包装类_字节数组_字符数组间的转换
1.字符串与基本数据类型,包装类之间的转换 2.字符串与字节数组间的转换 3.字符串与字符数组间的转换 4.String与StringBuffer ①String---->StringBuffe ...
- 06 . Nginx静态资源缓存
Nginx静态资源 Nginx可以处理静态资源 非Web服务器可以运行处理而生成的文件,即服务器只需要从硬盘或者缓存中读取然后直接给客户端响应即可. 常见的静态资源 # 浏览器渲染: html文件,样 ...