对于某个目的网络,EIGRP持续关注它的各种距离参数。EIGRP使用复合度量参数,不过为了简化,这里使用一个没有单位的数值。同样出于简化,这里的EIGRP路由器都不使用水平分割。
本例中,我们主要关注R1与目的网络2001:DB8:CC1E::/64之间的行为。R4上的重分布配置已经被移除了。
下为R1上的几条show命令
 
 
show ip eigrp topology all-links 的输出内容中列出了2001:DB8:CC1E:: /64网络.并且去往这个网络有3个下—跳:路由器R2、R3和R4。 以“via”开头的每一行都描述了一条通过某个邻居去往这个目的地的路由.除了下一跳 IPv6地址和出接口外.小括号中还记录了两个数值。斜线后面的数值是报告距离(RD.Reported Distance).相当于这个邻居去往目的地的当前最小距离。换句话说.在路由器从 这个邻居那里收到的EIGRP数据包中.RD就是邻居在EIGRP数据包中报告的.其去往目的地的距离。R1通过从所有邻居那里接收的携带路由信息的EIGRP消息(更新包、査询包、响应包、 SIA査询包或SIA响应包).来学习这些距离参数。有些资料将RD称为通告距离(AD.Advertised Distance).但由于这个术语的缩写也是AD.容易与管理距离搞混.因此本书中使用RD。例中显示的路由器R2、R3和R4的RD值分別对应着它们的延迟值.都是使用延迟值乘以256计算得出的(256=1X256.1280=5X256.3072=12X256)。
 
小括号中斜线前面的数值称为汁算距离(CD,Computed Distance).指的是通过这个邻居去往目的地的总度量值。CD的汁算方法是:邻居的RD加J:R1与这个邻居之间链路的开销。 例中显示的值是从R1去往每个邻居的延迟总和.再乘以256得出的(2560=10X256..5120=20X256.4096=16X256)。
 
对于每个目的地网络来说.每个邻居都关联着一个CD值和一个RD值。工程师可以使用show ip eigrp topology命令.从“via”行中看到表示为 (CD/RD) 格式的这两个距离参 数。
 
与其他路由协议一样.EIGRP的目的是找出那条去往目的地度量值最小的路径。为了完成这个任务.EIGRP会选择那条拥有最低CD值的路径.并在确认这条路径无环之后.将它放入路由表中。从例8-9中可以看出.目前去往目的地网络的最小距离是由R2提供的.CD值为 2560。EIGRP将这条路由放入/R1的路由表中.并将这个CD值作为路由度量值。
 
CD值和RD值都是当前距离.CD表示这台路由器当时通过特定邻居去往目的地的总距离.RD表示邻居自己去往目的地的距离。EIGRP还会为每个目的地记录另一个距离:可行距离 (FD)。FD是EIGRP中最被大家误解且记戟最少的概念。对于每个目的地来说.FD记录了最后—次从活动状态转换到被动状态时.己知的最小距离。换句话说.FD是去往某个目的地己知最小CD的历史记录或历史副本.这个历史开始于最后一次的活动状态到被动状态的转换。从路由器上一次进入被动状态开始.作为己知最小CD值的记录.FD并不必与某目的地的当前最优CD值相等。FD的定义是:在被动状态时.当EIGRP初始化FD后.FD只能减少(如果当前的最优CD值变得比当前FD值小了)或保持当前值(如果当前的最优CD值增大.但路由仍处于被动状态)。无论有多少个EIGRP邻居.每个目的地只有一个FD值。非常值得注意的一点是.FD 值是内部可变的值.EIGRP为每个己知网络记录一个FD值.并永远不会把它通告给其他路由器。
 
下例很好地揭示了FD的行为.注意看案例输出中的注释内容。本例中的所有度量值变 更都是经过慎重选择.以避免违反可行性条件.从而导致去往2001:DB8:CC1E:: /64的路由进入活动状态。本例展示了路由保持被动状态时的FD行为。
 
现在假定R1与R2之间链路的延迟从9增加到11,注意下边的输出,CD via R2已从2560变为3072,因此路由表中的度量也已更改。网络标题中显示的FD保持在当前值2560,这时,FD的值意思为:在过去的某个时刻,R1距离目的地有2560个单位,即使与当前的最优CD不同。R2的RD也不变,因为R2到目的的最优路径不受任何影响。
 
 
现在进一步假定R2的LAN接口的延迟从1变为3。现在,R2的FD和CD都变了,RD变为768,CD变为3584。但FD还留在之前的值2560.在过去的某时,我们的最优CD为2560.
 
 
现在假定R2的LAN接口延迟回到1,另外,R1与R2之间的延迟降低到7.因为总延迟8是到目前为止的最优历史。不仅R2的RD和CD变了,作为已知的最小的CD记录,FD也从2560变为2048.
 
 
现在当R1与R2之间的延迟增加回9,CD回到之前的2560,FD将保持在2048,成为新的历史最小值。这个例子的最后,网络接口延迟完全回到初始状态,但是因为它的特性,FD从2560变为了2048即使当前最优路由的CD变回了原始的2560
 
 
从例中的几个示例可以看出, 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,与上图所得结论相同
 
 
现在假设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-10-弥散更新算法-计算距离,报告距离,可行距离和可行性条件的更多相关文章

  1. EIGRP-12-弥散更新算法-DUAL的FSM(*没写完)

    FD (可行距离).后继和可行后继.本地计算和弥散计算(随着查询包的发出而扩散,随着响应包的接收而收敛)一到目前为止介绍的这些机制能够使路由器有效地计算出去往某目地的新路径,只要在整个弥散计算中不再出 ...

  2. EIGRP-9-弥散更新算法-拓扑表

    弥散更新算法(DUAL)是一个收敛算法.它代替了其他距离矢量协议使用的Bellman-Ford 算法.路由环路.甚至是在协议完全收敛前出现的瞬时环路.都会对网络性能造成不良影响.为了防止环路的形成.D ...

  3. EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算

    至此,我们已经了解了诸多概念: RD (报告距离). CD (计算距离). FD (可行距 离)和FC (可行性条件) ,在此基础上继续了解EIGRP对于拓扑变化的应对方法想必是轻松愉快的.能够导致拓 ...

  4. 海量数据相似度计算之simhash和海明距离

    通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法.欧式距离.Jaccard相 ...

  5. Canopy算法计算聚类的簇数

    Kmeans算是是聚类中的经典算法.步骤例如以下: 选择K个点作为初始质心 repeat 将每一个点指派到近期的质心,形成K个簇 又一次计算每一个簇的质心 until 簇不发生变化或达到最大迭代次数 ...

  6. App Store审核指南中文版(2014.10.11更新)

    App Store审核指南中文版(2014.10.11更新) 2014-10-11 16:36 编辑: suiling 分类:AppStore研究 来源:CocoaChina  2 8657 App ...

  7. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  8. C语言的10大基础算法

    C语言的10大基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文包括了经典的Fibonacci数列.简易 ...

  9. 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法

    算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...

随机推荐

  1. 【Java_SSM】(二)使用eclipse创建一个Maven web工程

    这篇博文我们介绍一下如何利用eclipse创件一个maven web工程. (1)File--New--Other--Maven--Maven project 此处我们快速创建一个maven工程 点击 ...

  2. 同一父进程下的子进程之间的通信(pipe通信)

    首先对于fork命令  通过fork命令创建进程 父进程返回子进程id 子进程返回0 失败返回-1 对于pipe通讯机制   pipe通讯是半双工的 也就是说只能一方读一方写 题目中想要P1的输出作为 ...

  3. GC总结

    概述 GC(Garbage Collection),需要完成的3件事 哪些内存需要回收? 什么时候回收? 如何回收? 为什么需要了解GC和内存分配?更好的监控和调节 排查各种内存溢出,内存泄漏 避免G ...

  4. Spring MVC基于注解@Controller和@RequestMapping开发的一个例子

    1.创建web项目 2.在springmvc的配置文件中指定注解驱动,配置扫描器 在 Spring MVC 中使用扫描机制找到应用中所有基于注解的控制器类,所以,为了让控制器类被 Spring MVC ...

  5. 值得注意的Java基础知识

    1)Java语言中默认(即缺省没写出)的访问权限,不同包中的子类不能访问. 中有4中访问修饰符:friendly(默认).private.public和protected. public :能被所有的 ...

  6. TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹

    TechEmpower 第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客:https://www.techempower.com/blog/2020/05/28/framewo ...

  7. Linux光盘yum源软件安装

    关于Linux中的软件安装,有三种方法,个人认为比较方便的就是yum安装,有网的话比较简单,暂且不提.本文主要记录在没有外网的情况下,如何以本地光盘搭建yum源来实现yum安装. 主要包括以下几步: ...

  8. 错误记录:Data too long for column 'xxx' at row 1

    错误记录:Data too long for column 'xxx' at row 1 使用Flask-sqlalchemy操作数据时报错: "Data too long for colu ...

  9. Cypress系列(9)- Cypress 编写和组织测试用例篇 之 钩子函数Hook

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Hook 就是常说的钩子函数,在 pyt ...

  10. (Java实现) 洛谷 P1223 排队接水

    题目描述 有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小. 输入输出格式 输入格式: 输入文件共两行,第一行为n:第二行分别 ...