DUAL算法

扩散更新算法(Diffusing Update Algorithm,DUAL)
DUAL是一个收敛算法,它代替了用于其它距离矢量协议的Belloman-ford 算法。DUAL算法的设计思想是,即使暂时的路由选择环路也会对一个网络的性能造成损害,所以为了能随时打破路由环路,使用扩散计算执行了一个分布式最短路径路由选择。
为了能正确操作DUAL,较低层协议必须满足下面的条件:

  • 一个节点需要在有限的时间内发现一个新邻居的存在或连接邻居的丢失。
  • 在已经运行的链路上传送的所有消息必须在有限的时间内正确接收,并且包含正确的序列号。
  • 所有的消息,包括链路代价改变、链路失败和发现新邻居的通告,都应该在一个有限的时间内一次一个的处理,并且应该被有顺序的检测到。
    这些条件由邻居发现和恢复部分以及RTP共同支持。
    DUAL算法中的术语:
  1. 邻接——刚启动时,路由器通过Hello数据包发现邻居并标识自己给邻居识别。当邻居被发现时,EIGRP协议会使路由器尝试和它的邻居建立邻接关系。邻接是指两台相互交换路由信息的邻居之间形成的一条逻辑关联关系。只有邻接关系建立后,路由器才能从它的邻居处接收路由更新消息。这里的更新消息包括发送路由器知道的所有路由和这些路由的度量值。对于每一条路由,路由器都会基于邻居通告距离(annunciate distance ,AD)和它到邻居邻居链路的代价计算出一个距离。
  2. 可行距离(feasible distance ,FD)——本地路由器到达每个目的网络的最小度量值就是该目的网络的可行距离。
  3. 可行条件(feasible condition, FC)——到达一个目标网络的邻居通告距离必须小于本地路由器到达同一网络的距离。
  4. 可行后继路由器(feasible successor ,FS)——本地路由器的邻居路由器所通告的到达目的网络的距离满足FC,那么这个邻居路由器就为该网络的一个可行后继路由器。
    EIGRP协议中,路由器将可行后继路由器的信息保存在拓扑结构表中。
    在这里插入图片描述

拓扑结构表的组成:

  • 目的网络
  • 目的网络的可行距离
  • 可行后继路由器地址
  • 本地路由器到达目的网络的距离
  • 可行后继路由器的通告距离
  • 连接可行后继路由器的接口
  1. 后继路由器——对于拓扑表中列出的每个目的网络,将选用最小度量的路由放在路由表中,通告这条路由的邻居路由器就是后继路由器。
  • 如果一台可行后继路由器通告的一条路由在本地路由器上所计算的度量比当前后继路由器的度量小,那么这台可行后继路由器将成为后继路由器。
  • 如果到达后继路由器的链路失效了,或者链路的代价增加并超过了可行距离,那么这台路由器将在拓扑结构表中查找可行后继路由器,若存在这样一个可行后继路由器,就让其成为后继路由器,这种选择通常发生在次秒级别范围。若路由器找不到可行后继路由器,路由器就进行扩散计算。可行后继路由器减少了扩散计算的数量,并提高了网络的性能。同时可行后继路由器也降低了网络重收敛的次数。

DUAL的有限状态机
当一个EIGRP的路由器不执行扩散计算时,每一条路由都处于被动状态(passive).
在产生输入事件的任何时候,路由器都会重新评估一条路由的可行后继路由器列表,输入事件包括:

  • 直连链路的代价发生变化

  • 直连链路的状态(UP或DOWN)发生变化

  • 收到一个新的更新消息

  • 收到一个查询消息

  • 收到一个答复消息
    路由器重新评估的第一步,在本地路由器上执行一个本地计算,也就是对所有可行后继路由器重新计算到达目的地的距离。可能的结果如下:

  • 如果拥有最低度量的可行后继路由器和已经存在的后继路由器不同,那么该可行后继路由器成为新的后继路由器。

  • 如果最低度量小于FD值,更新FD。

  • 如果新的度量距离和已经存在的度量距离不同,向所有的邻居发送更新。
    当路由器执行一个本地计算时,路由依然保持被动状态。如果路由器发现了一台可行后继路由器,那么将发送一个更新消息给它的所有邻居,但不改变路由状态。
    如果没有在拓扑结构表中发现任意一台可行后继路由器,那么路由器将执行扩散计算,而且路由器的状态变为活动状态(active).在扩散计算完成和路由状态变为被动状态之前,路由器不能:

  • 改变路由的后继路由器

  • 改变正在通告的路由的距离

  • 改变路由的FD值

  • 开始进行路由的另一个扩散计算
    路由器是通过向它的邻居发送查询数据包,开始扩散计算的。查询数据包包中包含新的本地路由器计算的到目的地的距离。收到查询的路由器执行自己的本地计算:

  • 若该邻居路由器上有到达目的网络的一个或多个可行后继路由器,该邻居就发送一个答复数据包给发送查询的源路由器,答复数据包中将包含邻居路由器计算的到达目的网络的最小距离。

  • 若该邻居路由器上没有到达目的地的可行后继路由器,它将把这条路由的状态置为活动状态,并开始扩散计算。
    对于每一台接收查询的邻居路由器,本地路由器会设置一个答复状态标记(reply status)来不断的跟踪所有未处理的查询。当路由器收到所有发送给邻居路由器的查询答复时,扩散计算完成。
    当扩散计算开始时,一个活动计时器被初始化为3min,如果活动计时器超时后还没有收到答复数据包。那么这条路由就被宣告为“卡”在活动状态(stuck in active ,SIA).这些没有答复的邻居将从邻居表中删除。并且扩散计算默认该邻居答复的为无穷大度量。

     #timer active-time %修改活动计时器时间
    

在扩散计算完成时,路由器会将FD值置为无穷大,这样可确保所有邻居答复中达到目的地的有限距离都能满足FC,并且成为一台可行后继路由器。而后路由器会基于这些答复消息中的距离和发送答复的邻居路由器的链路代价计算出到达目的网络的距离。并选出度量值最低的路由器成为后继路由器,并把最低度量值设为FD。并且将不满足FC的可行后继路由器删除。注意,在收到所有答复之前不会选择后继路由器。

猜你喜欢

转载自blog.csdn.net/yueyadao/article/details/87960616