前言
我们常说“好事不出门,坏事传千里”,但对利普来说,“好消息传得快,坏消息传得慢”。我们今天用一幅画解释郁金香的“好消息传得快,坏消息传得慢”。
“好消息传得快,坏消息传得慢”是如何产生的?
正常情况下,R1路由器和网络1直接到达。
R2路由器通过路由学习发现到网络1的距离是2,下一台路由器是R1。
如果R1到达网络1的路径出现故障,则R2仍会定期更新路由信息[1 2 R1]到R1。
因此,R1将到达网络1的路径更新为[1 3 R2],形成如下恶性循环
这样循环的结果是,每个路由器到达net 1的跳数都变成了16,直到16。原来大家都到不了。(阿尔伯特爱因斯坦,《北方司法》前情提要)。
慢收敛和计算到无穷
RIP的这种"好消息传的快,坏消息传的慢"的机制又叫 慢收敛(slow convergence)问题,又叫"计算到无穷"(count to infinity)。
慢收敛slow convergence的解决方法
水平分割 Split horizon:从一个接口学到的路由,不会再把这条路由从这个接口转发出去
这个有点禁止以讹传讹的意思,就是说你别听到什么就瞎说出去
比如说:Router A 需要通过B路由到达网络C,根据水平分割的原则,Router A 不允许再向B广播到达C的路由。
路由毒化和毒性反转Route poisoning:当路由器发现某条路由down了也就是中毒了,就会在自己的路由表里面标记这条路由为infinite(无限大),然后立刻用更新包将这条标记的信息转发给其他路由器,其他路由器就会在自己的路由表里面也标记为is impossible down这样也会防止路由环路。
触发更新:路由表发生变化时,路由器发送更新。默认的端口S1和S0触发更新是开启的,当发现某条链路down掉的时候,是不会等待30秒等周期更新时间的,而会立刻发送一个更新包给B。这样也可以有效的来抑制路由环路。
抑制计时器:路由器为网络中的"可能有故障"状态保留条目,以便为其他路由器重新计算拓扑更改留出时间。当C发现10.4.0.0这条链路down掉的时候,立刻会向B发送一条不可达的信息,当B收到这跳信息的时候,会开启抑制计时器,也就是180秒,实际上也只是用到60秒,那么在这60秒内,如果收到一条关于10.4.0.0的次优先级的路由,那么B是不学习的。(如果原来自己的路由表里面10.4.0.0的metric值是3跳,而收到的关于10.4.0.0的路由metric值4跳还比自己本身的大,是不学的。如果这条新学到的关于10.4.0.0的路由的metric值是2,比自己原来的这条路由metric值3还小,那么就会学习这条小的,而替换掉自己原来的那条路由。)那么当然,如果在这抑制计时器的60秒,这条10.4.0.0的路由又恢复了,那么继续启用这条路由。