

EIGRP的无环路计算和收敛速度是基于分布式的DUAL算法的,这种算法是将不确定的路由信息(active route)散播(向邻居发query报文),得到所有邻居的确认后(reply报文)再收敛的过程,邻居在不确定该路由信息可靠性的情况下又会重复这种散播,因此某些情况下可能会出现该路由信息一直处于active状态,这种路由被称为stuck in active route
EIGRP使用可靠的多播来寻找替代路由.路由器必须得到收到查询的所有路由器的应答才能重新进行计算successor的信息,如果有一个路由器的应该还没有收到的话,发出查询的源路由器就必须等待.默认如果在3分钟内某些路由器没有对应答做出响应的话,这条路由就进入stuck in active(SIA)状态(即始终处于active状态).然后路由器将重新设定和这个没有做出应答的路由器的邻居关系
具体来说是这样的,看上图 ↑
现在3.3.3.3坏了,R3就会把到3.3.3.3的路由开销改为-1(不可达)由于没有FS,所以它也会把这条路由active掉,并往F0/0和S0/0发送查询报文并把R1和R2标记为q,R1收到以后看自己的路由表发现还可以通过R2走到3.3.3.3,然后就返回告诉R3自己还可以去。 差不多同时,R2收到R3发过来的查询,一查自己路由表发现没有路由,就继续向R1查询,R1发现到R2去的路也死了,反过来去查询R3,R3这时知道其实R2也不可达了。查询基本结束鸟{:3_60:}
剧情重演,这时悲剧的来了,查询R2的时候,R3和R2之间不知道怎么回事查询N久没回应,R3的active只能干等,到这个active 180秒过了以后就把和R2之间的邻居关系和从他那里学来的路由给咔嚓了。这里最花时间的就是这个等180秒,SIA了。
后来思科想出了个解决办法,新增 SIA-查询,SIA-应答。
当active时间到90秒时,源查询路由器就会向刚才发过查询的路由器发送SIA查询,如果收到对方的SIA应答就说明这其中的链路是正常的。上面例子中,R3会各发给R1和R2一个SIA查询,R1回应了,R2没回应。那R3就会保持和R1的邻居关系而和R2断绝关系。这样可以提前结束查询。避免了SIA,或者说缩短了SIA时间。
SIA的常见发生原因(使用EIGRP的多个自主系统是无法防止SIA的,因为查询请求会传递到另外一个AS中去.)
EIGRP查询方式是递归.查询路由时发送方式是一:在串行链路上用单播。二:在以太环境中用组播查询,对方单播回应。要求每个邻居能要回应,如果没有回应,它就继续查询.直到SIA(发出查询包后,开启定时器)
1.路由器太忙无法回答查询,CPU过高或是内存不够
2.路由器之间的链路问题,出现丢包.
3.单向链路(最常发生SIA)
SIA的出现,会导致网络上的EIGRP的邻居关系大批量重建,网络瘫痪.
防止SIA的出现,我们可以限制EIGRP的查询范围.
如何限制EIGRP查询的范围:
1.使用路由汇总来限制
2.使用末节路由器来限制查询范围
(还在领悟中……感谢老李同志倾情辅导)
估计有错,欢迎来喷{:3_59:} |
|