说明

对于EIGRP来说,核心就是DUAL算法了,它决定EIGRP的很多参数和在网络中快速收敛起到决定性的作用。

DUAL的预备概念

1、一个EIGRP的路由器必须在有效时间内检查到邻居的存在或者丢失,也就是指的Hello包功能

2、当一个可靠的组播传送发送出去后,就必须在规定的时间内收到确认信息

3、当链路代价、链路down/up、和新的邻居发现后,都必须在规定的时间内一次一个的处理,并且是有序的。
4、邻接概念:EIGRP会通过Hello包来发现邻居的存在,当邻居存放在邻居表后,EIGRP试图将邻居关系形成一个邻接,也就是尝试着路由信息的交换,这些路由信息包括从它邻居那所知道的所有关于这些路由的度量值,计算出最优的放入进路由表中。

FD、FC、S、FS的详细分析

如图,地址信息如上,来研究DUAL算法中的FD、FC、S、FS的概念,其中A、B、C路由器以R1、R2、R3来命名

R1(config)#router eigrp 1
R1(config-router)#network 12.1.1.1 0.0.0.0
R1(config-router)#network 10.1.1.1 0.0.0.0

R2(config)#router eigrp 1
R2(config-router)#network 12.1.1.2 0.0.0.0
R2(config-router)#network 10.1.1.2 0.0.0.0
R2(config-router)#network 23.1.1.1 0.0.0.0

R3(config)#router eigrp 1
R3(config-router)#network 23.1.1.2 0.0.0.0
R3(config-router)#network 3.3.3.3 0.0.0.0

这次主要查看 关于3.0.0.0/8的路由信息。

一、FD(Feasible Distance,可行距离):到达每一个目的地的最小度量值将作为该目的的网络可行距离,出现在路由表中。(其余的放入拓扑表中作于备份),关于3.0.0.0/8这条路由,FD is 435200,可以发现它由两个下一条,一个为435200,一个为2323456,因为435200是最小的,所以,它出现在路由表中,而2323456则作为备份存在。

二、AD (Advertisement distance) :邻居到达该目的地的度量值,也就是指的邻居的FD

可以发现在R1上的关于3.0.0.0/8的度量值是435200,后面还有个409600,这就是AD,邻居到达3.0.0.0/8这条路由的最优度量值

可以看到关于R2上面到达3.0.0.0/8的度量值是409600,也就是R1的AD

三、S(Successor,后继路由器):抵达目的地最佳的下一跳,也就是FD最小的。

四、FS (Feasible Successor,可行后继路由器)和FC (Feasible Conditions,可行性条件):
FS的作用就是当有多条路径去往同一个目的地的时候,当满足了特定条件后(也就是FC),它就能成最佳路径的备份。
FC就是规定当什么情况下才能满足这个条件,只有当这条次优路径的AD值小于最佳路径的FD的时候,就相当于FC条件成立了。

还是查看3.0.0.0/8这条路由,它的最优路径是从12.1.1.2走,也就是FD为435200,次优路径为2323456走的是10.1.1.2,这时候它在拓扑表中,是因为次优路径的AD<最佳路径的FD,也就是409600<435200。如果这时候当409600变成436200的时候,那么它就不会出现在拓扑表中,其实是存在的,不过需要通过 show ip eigrp topology all-links才能看到,这在调整cost值的时候,是非常有帮助的。 总结:

1、在设计EIGRP的时候,成功的关键就在于是否有FS的存在,有了FS的存在,那么整个收敛的速度是非常之快的,就连OSPF也比拟不了。
2、可行性后继路由器和可行性条件的概念是避免环路的核心技术,也就是说可行性后继路由器到达目的的度量值比本地的更短
3、拓扑表中记录着:1、目的网络的可行距离 2、所有的可行后继路由器 3、每一个可行性后继路由器通告到目的的网络的通告距离,也就是AD。 (其实在拓扑表还记录着其他没有达到FC条件的链路,只是不显示正常的拓扑表中)
4、到达下一跳设备的链路fail或者到达目的地的cost增加,如果存在可行后继路由器,那么可行后继路由器将在次秒的时间内成为后继路由器,极其迅速的收敛


DUAL的有限状态机

当EIGRP不执行扩散计算时,每一条路由都处于稳定状态(passive state),当发生了某种变化的时候就会重新查找可行性后继路由器的存在。

{1、直连链路代价发生变化 2、直连链路的状态(up或down)发生变化 3、收到一个更新包 4、收到一个查询包 5、收到一个答复包 }


一、当路由器检查到这些变化后,会在本地路由器上执行一个本地计算,如果有FS存在的话,通知有备份路由器存在,不进行扩散更新。


二、如果不存在一台可行性后继路由器的话,那么就进行扩散更新算法,并且比较路由状态改变为活动状态(active state),那么这个路由在扩散更新完之前不能:1、改变路由的后继路由器 2、改变正在通告的路由距离 3、改变路由的FD 4、开始进行另外一个扩散更新算法。

三、当一条路由消失后,并且没有到达该目的可行性后继路由器时候, 就向所有邻居发送query查询包,如果该邻居有去往目的路由的可行性后继路由器,那么就回复一个reply,如果没有可行性后继路由器,那么直接把这条路由变为active状态,并进行扩散更新计算。

四:对于每一个收到查询的路由器邻居,本地路由器将设置一个答复状态标记 (reply status flag)来跟踪所有没有处理的查询,当本地路由器收到发送到所有邻居路由器的查询后,扩散更新完成。

五:在某些情况下,三分钟内没有收到reply,那么该设备将reset所有的邻居。这称之为SIA,cisco专门针对这个问题设计了新的报文:SIA Query和SiA Reply,它的意思是说当A的一条路由出现了问题的时候,它会发送query查询包给B,B收到以后,会把这条路由标记为active,B又没有FS的情况下,那么就会询问C, 假设C这时候链路出现了问题,或者链路带宽拥塞了,导致这个查询回不来,这样在A等待180s后,发现查询还没回来,就把A与B之间的邻居给down了,其实在对于B来说是无辜的,因为是来自C的回应不能正常被收到所导致的,这样是不合理的。在12.1的IOS后,引入了SIA的query和reply报文,当发送了查询包90s后,还没有收到来自邻居的reply信息的话,会发送一个SIA的query报文,如果直连邻居是正常的话,就会回复reply报文,那么就不会因为SIA状态影响无辜的邻居,只有回应不了SIAreply的邻居会被重置掉。

在一个良好的网络中,我们需要尽量避免SIA的出现,避免SIA的出现就是保证牧

这里以三种情况来介绍关于,SIA的情况,以及解决办法

案例分析一:有FS的情况下,关于DUAL的收敛和SIA状态

这是卷一给出的例子,其实很好理解,路由全部收敛完成后,该例子中,Cayley没有可行后继路由器,当和wright的链路失效,由于没有FS的存在,会向Lilienthal发送查询关于10.1.7.0/24的信息。这时候lilenthalL是拥有到达10.1.7.0的可行后继路由器的,也就是Wright,并且这时候lilenthall把Wright变成为后继路由器,紧接着L会发送reply给Cayley,Cayley将把10.1.7.0从active置为Passive状态这是一个被查询设备有可行后继路由器的情况,重新计算新的度量值。(在reply中是附带这个10.1.7.0/24的度量值的)

关于这个例子,完全可以用GNS3搭建,通过debug信息来观看 reply和query的包,主要注意的是,这个例子中是修改了K值的,也就是说只用了延迟作为度量值的参考,并且注意的时候接口延迟的单位是10us,所以需要注意才行。

案例分析二:在没有FS的情况下,但是reply回应不来。

SIA的状态不容易被看见,这时候需要人为的搭建一个SIA的状态出来,地址信息如拓扑,之前已经提到过SIA状态就是当一个路由丢失后,而没有FS的情况下,那么它就会发送查询,当这个查询在3分钟内没有回应的话就会重置邻居关系,但是,有时候直连邻居是无辜的,所以,后续加入了SIA的query和reply报文,在1.5分钟后的时候,就会发送SIA的query,如果邻居回应了reply那么就不会重置邻居,只会重置有问题的邻居。 在这个环境下,我们把C路由器的3.3.3.3给shutdown了,那么它会发送query包,这时候,我们需要做的就是把A和B的holdtime改成200,并且应用一个ACL在B上面,过滤掉来自A的reply回应,这时候SIA状态就会出现了,如果正常的话,那么A和B的EIGRP邻居会down掉,而B与C之间则不会。

A(config)#router eigrp 1
A(config-router)#network 12.1.1.1 0.0.0.0

B(config)#router eigrp 1
B(config-router)#network 12.1.1.2 0.0.0.0
B(config-router)#network 23.1.1.1 0.0.0.0

C(config)#router eigrp 1
C(config-router)#network 3.3.3.3 0.0.0.0
C(config-router)#network 23.1.1.2 0.0.0.0

A(config)#int f0/0
A(config-if)#ip hold-time eigrp 1 200

B(config)#int f0/1
B(config-if)#ip hold-time eigrp 1 200

可以看到关于hold时间已经为200了,这样更改是为了SIA状态的出现。

B(config)#access-list 100 deny eigrp any any
B(config)#access-list 100 permit ip any
B(config)#int f0/1
B(config-if)#ip access-group 100 in

C(config)#int lo 0
C(config-if)#shutdown
C#debug eigrp packets siAquery siAreply reply request

这时候,把ACL挂上以后,就把C的loopback口该down掉,同时开启EIGRP的SIA查询和应答。

在1分30s的时候,C发送了SIAquery的擦新,并且收到了来自B的reply,可以通过debug信息查看到。

这时候查看B的状态

这时候,B状态显示也为A,也就是active,并且对于状态是Qqr也就是是query状态(发给A路由器了),reply(回应C路由器),replay status(回应给C路由器的) ,这时候还在等待A的查询,但是,A回应了查询的,被B的ACL给拒绝掉了,所以,回应不来。

这时候,当B的拓扑表中关于3.0.0.0/8的Successor 到达2分58s后,他还没有收到来自A的回应,所以,当2s过后,从拓扑表中删除,并且提示是 邻居down,原因是stuck in ative。

这时候在B路由器上只有关于C路由器的信息了,而A则没有了。

这时候C也收到了来自B的回应,在2分59s的时候,3.0.0.0/8路由还是A状态,当到了3分钟后,就从拓扑表中消失了。

总结:可以看出来,当出现 SIA状态是非常麻烦的,并且在大型网络中,网络的范围很大的话,很有可能SIA状态出现,并且在3分钟内收不到回应,所以,我们在设计网络的时候,一定要保证目的路由有FS存在,这样收敛死非常快的,也不会出现SIA状态,另外就是stub的应用了。

案例分析三:stub区域的应用

这个环境是继续上个案例来分析的,不过这时候,我们把A路由器设置为stub区域,stub区域的作用就是B路由器不会发送reqer到stub区域的EIGRP邻居,同样的方法把loopback给shutdown了,A与B之间的邻居是否会出现问题。

环境的搭建参考案例分析二,一模一样的,唯一的区别就是在A上面定义为stbu区域

A(config)#router eigrp 1
A(config-router)#eigrp stub


可以通过show ip eigrp neighors detail来查看邻居是否为stub,可以看都关于12.1.1.1是stub区域。

这时候同样的把loopback给shutdwn,查看这个SIA状态是否会影响到A与B的邻居,注意B上面的ACL和hold时间都是与案例分析二一样的。

可以看到,当把loopback0 shutdown后,EIGRP发送那个了Request,立马收到了来自B的reply,这时候在查看top表,发现已经收敛完成了,从这点上可以看出来,B并没有发送给stub区域,直接回应了reply给C,这时候收敛是非常迅速的。

总结:这次主要介绍了DUAL算法和SIA状态在EIGRP的关键性,这是在设计EIGRP时候的必须明白的事情,一个EIGRP网络的好坏取决于是否都有FS的存在,现在EIGRP在银行和证卷行业还是应用的非常多的,如果不是私有协议的话,我相信不会比OSPF应用的少。这里还有stub区域还有许多参数,将在下篇进行介绍,这次主要介绍DUAL算法和SIA状态的解决方案。

本文首发于公众号:网络之路博客

©著作权归作者所有:来自51CTO博客作者网络之路blo的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. TCPIP卷一(7):Routing Information Protocol—-RIP
  2. TCPIP卷一(9):EIGRP的数据包格式、TLV、 三张表
  3. TCPIP卷一(11):EIGRP的汇总、stub、leak-map参数
  4. TCPIP卷一(12):EIGRP的负载均衡方式 And RouterID、default Rout
  5. MPLS系列之一:Multi Protocol Label Switch-Basic 【介绍了原理、
  6. MPLS系列之二:MPLS *** 静态路由、RIP、EIGRP【包括配置 分析控制
  7. 华为路由交换技术:VRRP-虚拟网关冗余协议配置
  8. 一分钟了解交换机-路由器-集线器-防火墙的区别
  9. 锚点前端路由与Vue前端路由的实现

随机推荐

  1. android 5.0 新特性
  2. android五星评级
  3. Android 文件操作
  4. 一张图搞定Android学习路线
  5. Google Android 文档笔记-Training-Getti
  6. Android 闹钟源码
  7. android版本更新代码
  8. android java获取当前时间的总结
  9. Android process
  10. Android(安卓)6编译环境搭建 (Marshmallow