前面写到了田姐突然提问的“RIP的五大防环机制?”

由于突然被“袭击”过,因此印象还是比较深刻的。先把答案贴出来:
“1.水平分割;2.最大16跳;3.路由中毒;4.毒性逆转;5.抑制计时器。”
首先,“什么是环路?”(WHAT)
先来看一个情景:(里面解释了RIP的路由更新原理)
RIP的五大防环机制 _RIP 防环

正常的情况下,假设IP地址为192.168.1.1/24的一个PC,与R1直连,那么R1到PC的metric值为0。然后R1和R2之间跑了“RIP”协议,则R1会把它自身的所有的路由,通过“Response的数据包”发给R2,当然这些数据包里面是肯定包含到PC的这条路由的。R2拿到“Response的数据包”,一看里面有一条到PC的路由,是自己没有的,于是它便把这条路由信息加到自己的路由表里面,并且把“metric”值+1。这样,R2便有了一天到PC的IP地址为“192.168.1.1/24”的路由了,且metric值为2 。
但这个时候,PC与路由器连接的这条线路突然断掉了,R1便和PC失去了连接,便也失去了“到PC的这条直连路由”。但是由于RIP的周期更新机制,30S后,R2会发出一个“Response数据包”,里面有R2拥有的所有的路由,当然里面依然包括“到PC的这条路由”。R1在这个时候看到了这条路由,于是很是高兴呀!如见老友,因为自己没有了,又从邻居那里得知它的消息,于是默默地关心它,便收下这条路由,并把metric值+1(注意,此时R1到PC的metric值是“2”)。于是,30S又过去了。R1也要发出“Response”包来告诉大家它所拥有的路由(里面还是包含到PC的路由,虽然它和PC之间的连接已经断掉了), 这个时候,R2又收到了R1的数据包,打开一看,乖乖,里面果然有到PC的路由,只不过它的metric值怎么变成“2”了 ?既然本来PC的路由就是R1告诉我的,可能他们之间闹了什么矛盾把,不过都是他们自家的事情,我只管依然把“metric值+1”(此时R2上面的metric值为 3)。然后又是 30S,R1继续加,再 30 S,R2 再加。。。
想想这事何时才能加的到一个尽头呀?当然这个还不是最坑的事情。就在这时,R2右边收到了一条要访问“192.168.1.1/24”这台PC的请求,R2肯定会直接丢给R1,而R1一看,不是PC不是在你R2那里嘛?于是又果断地丢给R2。R2一看,以为R1开了个玩笑,于是又丢给R1。于是,两个人就这样一直互丢着,而且速度越来越快。这还只是一个包,要是刚好是传一部电影呢?那成千上万给数据包,就直接给让R1和R2丢到崩溃了!这个时候,又因为网线上面跑得基本是都是互丢的数据包,其他正常的程序也不能正常收发包了,要么卡顿,要么崩溃。这样一个大家一起崩溃的情景,则美其名曰“环路”。不过好在,IP包本身有一个叫做“TTL”(Time to live)值的东西,在丢了255次之后,这个包终于得到了解脱,然后就被抛弃了。但是,这中间的心酸是难以体会的。
这有点像中国特色的“相关部门”。你要去讨一个说法,A部门说“这个不归我管,你还是去找B部门吧”。B部门一看,说“你怎么能找我们呢?这明明是A部门的事情,你应该去找它才是呀。”于是没有办法,又只得返回去找A部门,然后又被踢给了B部门,再回到A部门。。。直到有一天,其中一个部门说“不好意思,您这件事情的有效期只有3个月。现在已经是三个月零一天了,我们管不了了”。一千个草泥马奔腾而过。。。
所以,显然环路是不好的,所以我们要避免它,或者说,消灭它。
那就要从源头抓起,在路由阶段就不给他们相互推卸的机会。
方法一:水平分割:
这个方法简单明了,就是你R1给了R2一条 A路由R2就不会再把A路由给你了。对,打死都不给。这样,就不会出现R1又从R2那里找到了久违了的好朋友这种情况了。这样,等了240S之后(刷新计时器),A路由就从R1和R2的路由表上面都消失了。人家来找A的话,就直接用一句“不好意思,A不在这里( U )”打发回去了。
方法二:路由中毒:
这个名字好像很牛逼的样子,其实他的原理却很小白。R1一旦发现A不见了,于是马上把A的metric值变成16(RIP最多允许15跳,也就是说,当metric值为16的时候,则说明该路由不可达) 。R2一看,原来A中毒了,于是果断地把A抛弃了。就这样,A被R1放弃,然后被R2抛弃,环路也就没有了。
方法三:毒性逆转:
这个是“路由中毒”的加强版,此环境下,R1和R2的关系就不那么简单直接了。如下图:

RIP的五大防环机制 _RIP 防环_02
在R2得知R1发过来的A路由是一条“中毒路由”的时候,它便把自己化作跳板,在把“路由A已经中毒了,大家快远离它”这条信息,发给它的小伙伴们。让大家都知道A是不可达的。这样,大家就很都能很速度的做出反映,及时的把A路由丢出自己的路由表了。
方法四:抑制计时器:
这个算是对路由中毒的“缓刑”。因为它怕A是由于不小心碰了一下接口,松了一下或者其他什么意外而导致对R1的失去连接。要是快刀斩乱麻地处理掉的话,万一几秒钟后它又恢复 了,那岂不是又要通告一次,麻烦。所以,就干脆给你180S(抑制计时器)的时间给你等待一下,A要是能够及时回到R1的怀抱,R1就不会发中毒信息。则大家的都不知道,也就不会引起整个网络的动荡了。
方法五:最大16跳:
这个是最后的武器,也是一个必杀技。之前已经提到了,RIP的最大跳数为16跳,也就是当metric为16时候,说明该网络不可达。要是前面的“路由中毒”没有行动起来的话。那么,回想一下,R1和R2相互踢皮球的过程,他们每踢一次,则会把metric值+1,那么加到16的时候,其效果也就相当于“路由中毒”了。你可能会觉得,这样踢过来踢过去多累呀,那么你想想依靠IP本身的属性的话,还要被踢“255下”才是一个尽头呢!当然,这个是没有办法的办法,也是它本身自带的属性。
2013年9月16日 02:07:25,我写东西还是太慢了,该睡觉了