DUAL算法是EIGRP操作的核心内容,它保证了EIGRP100%无环路。在弄懂DUAL之前,需要先介绍几个术语:
 
1)  可行距离(feasible distance, FD-----指路由器到达目的网络的最小度量。很重要的是最小两个字。如图:可见下图中A到达目的网络的可行距离为121.
  
 
2)  报告距离(reported distance, RD-----也叫做公布距离(AD),有邻居路由器公布的,如果说目的网络是源的话,就是由“上游路由器”公布的,因为“上游路由器”离目的网络应该比你近,这也构成了所谓的FC。上图中H B D的报告距离分别是30 21 140.
 
3)  可行性条件(feasible condition, FC-----是指报告距离比可行距离小的条件(RD^AD<FD)。这个条件很重要,是保证无环的根本。上图中的D并不满足此条件。
 
4)  后继路由器(successor-----满足可行条件并具有到达目的网络最短距离的相邻路由器,即为下一跳路由器。上图中的后继路由器为B
 
5)  可行后继路由器(feasible successor-----满足FC但是没有被选作后继的一个邻居路由器。它相当于后继的一个backup。上图中的H即为可行后继路由器。可行后继路由器同时也减少了扩散计算的数量,提高了网络性能。
 
6)  被动路由-----表明路由器当前有一个合法后继,并且EIGRP工作正常。在路由器上使用sho ip eigrp top可以查看eigrp的拓扑图,其中路由条目前的p就表示该路由当前为被动路由
 
7)  主动路由-----表示路由器已经失去了它的后继,它没有任何可用的可行后继,并且当前该路由器正在主动搜寻替代的路由以实现收敛。和6)一样,路由条目前的a表示当前为主动路由。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

补充一点,在做实验的时候为了方便可以直接指定链路的度量值,方法是先metric weight 0 0 0 1 0 0即为只用delay参考,然后再用delay命令指定延迟就好。

 

基本的术语解释完毕,下面给出一个规则说明DUAL是怎么工作的。这个规则成为DUAL有限状态机。
 
在正常状况下,EIGRP的每一条路由都处于被动路由的状态下,在产生一个输入输入事件的时候,路由器会重新评估一条路由的可行后继列表。这些事件可以是直连链路的代价或状态(up or down)发生变化,收到一个查询,答复,更新时。
 
路由器重新评估的第一步是做一个本地计算,也就是对于所有的可行后继路由器重新计算。如果发现可用可行后继,路由讲继续保持被动状态。如果没有一台可用的可行后继,则路由条目变成active状态(回头应该写一个SIA的东西,呵~)并进行扩散计算。
 
路由器通过向所有的邻居发送查询开始扩散计算,邻居收到查询后进入local computation阶段,如果邻居有到达目的网络的一条或多条可行后继,则答复请求,请求中包括到达目的网络。如果没有邻居会开始进行扩散计算。
 
在一个路由器开始进行扩散计算的时候,会有一个被设置为3mintimer,如果在活动计时器超时之后还没有收到回复,该条路由就会“stuck in active(SIA).没有被答复的邻居路由器会被从邻居表里删除。下篇blog再举例子说明DUAL吧,这个写的太长了,累了。