++++++++++++++++++++++++++++++++

2012,Mid-Autumn Day

++++++++++++++++++++++++++++++++

我们大家都知道,在解决Eigrp的SIA(Stuck-In-Active)的问题上,先后编出了两个计时器程序①Active-time;②SIA-Retransmit。

我们先来回顾一下基础知识

⑴Active-time默认时间周期是180s;而SIA-Retransmit默认时间周期90s,一般为Active-time时间周期的1/2;

------------------

⑵在Active-time超时前,若收到全部reply数据包,那么被查询的路由条目进行本地计算后,进入Passive状态;否则,该路由条目进入SIA状态后,删除该路由;

------------------

⑶SIA-Retransmit超时后,本地路由器开始发送第一次SIA-Query数据包给没有回复reply数据包的邻居路由器,邻居路由器收到SIA-Query后,立即回复本地路由器SIA-Reply数据包。收到SIA-Reply数据包的本地路由器,重置Active-time和SIA-Retransmit两个计时器,随后,Active-time和SIA-Retransmit两个计时器重新开始计时,并且重复上述步骤,直到第三次发送SIA-Query后的90s之内,还未收到reply数据包,那么本地路由器就会在neighbor-table中将该邻居删除。那么在此期间,本地路由器将等待360s,即{===90s===1次SIA-Query===90s===2次SIA-Query===90s===3次SIA-Query===90s===};

------------------

⑷SIA-Retransmit超时后,若本地路由器在三次中的任意一次发出SIA-Query数据包后,并未收到SIA-Reply数据包,那么,Active-time将继续计时,直到180s时还未收到reply或者是SIA-Reply数据包,则开始断掉邻居,删除该被查询路由。

-----------------

回顾完以上4条内容后,在这里我列出了两个问题:

问题1:SIA-Retransmit的时间周期为何一般设置为Active-time时间周期的1/2?

问题2:既然收到reply之前,最多可以等待360s,那么180s的Active-time计时器是否显得多余呢?

------------------

好了,带着这两个朦胧的问题,我们举一个有趣的实例,来具体阐述这两个计时器到底是如何协同工作的

情景再现:

张三都是大三的学生,这一天晚上他未按时回到宿舍,此时张三的好友李四开始着急,担心宿舍管理员阿姨会按时锁楼门,张三因此无法回到宿舍。此时,宿管阿姨也开始数着时间,准备锁楼门……我们将张三比作邻居路由器,将宿管阿姨比作本地路由器上的Active-time;而将李四比作是本地路由器上SIA-Retransmit……假设,此时距离锁楼门还有180s,并开始计时

①时间已过去90s,李四看到还剩90s即将锁楼门,于是,开始给张三拨了第一次手机,“哥们儿,赶快回来吧,还有90s就锁楼门了,到时你就回不来了”,接到电话的张三,也很着急,于是给宿管阿姨打了一个电话“阿姨,不好意思,我女朋友在厕所呢,您再等我180s吧”;

--------

②收到电话的宿管阿姨,也就通情达理的答应了,并告诉在宿舍的李四,我再等张三180s啊,此时宿管阿姨开始重新计时180s,然而,90s后,张三并未出现,李四呢,开始给张三拨了第二次手机,“张三!怎么还不回来,又剩下90s了,你掂量着办啊”,张三,收到二次提醒后,再次给宿管阿姨打了电话“嘿嘿,阿姨,真对不住您,您看,女朋友马上就出来了,您再给我180s”;

-------

③再次接到电话的阿姨心想:现在的社会,做大学生难,做男大学生更难,做有女朋友的男大学生难上加难,再给她一次机会吧,阿姨又开始了新的180s的计时,于是又把这个决定告诉了在宿舍的李四,可是令李四感到万分沮丧的事情再一次发生了,90s后,张三仍未如期初期,接下来的对话便开始了本质上的飞跃,李四恶狠狠地给张三拨了第三次的手机“你丫的混蛋,最后90s了,爱回不回!!”,张三也开始认识到了事态的严重性,于是战战兢兢的给宿管阿姨,请求第三次的通融;

④“阿姨……大妈……我女朋友拉肚子……”“你个小王八蛋,敢戏耍老娘,90s内不会来,就给我从地球消失!!!”事实上,张三不是等什么女朋友,他现在远在郊区,当然,也不可能在90s内回到宿舍楼下,于是,90s后,宿舍楼门关闭,张三只能露宿街头;

⑤可是,如果在360s期间回到宿舍,那么,一切不会变的这么糟糕

------------------

综合例子,我们得出这样一个结论,依次可以解开上面提到的两个问题

++++++++++++++++++++++++++++++++++++++++++++++++++++

①Active-time对邻居状态的改变发挥了决定性作用,而并非是SIA-Retransmit;

---------------

②SIA-Retransmit真正发挥的作用是为周期性重传SIA-Query作计时,进而重置Active-time,延长等待时间,它始终以Active-time为基础;

---------------

③这两个计时器类似于RIP中的Update和invalidation计时器,真正决定路由条目有效或无效的是invalidation计时器,而非Update,但是也正是有了update计时器,invalidation计时器才有机会重置,路由条目存在时间才有机会无限延伸下去;

----------------

④如果SIA-Retransmit设置时间大于90s,假设为X,那么,X秒后,剩余的Active-time时间将不可能保证第二次SIA-Query报文的发送,因为在此之前,邻居已经断掉;如果SIA-Retransmit设置时间小于90s,假设为Y,那么,Y秒后,剩余的Active-time时间虽然可以保证此后SIA-Query报文的发送,但势必会导致两个计时器之间的不同步,因为4*Y≠360。

++++++++++++++++++++++++++++++++++++++++++++++++++++