RIP 协议的问题
Posted Tommyplayer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RIP 协议的问题相关的知识,希望对你有一定的参考价值。
RIP 协议的 2 个问题
一、 基础知识
-
工作原理:
路由信息协议 (Routing Information Protocol,RIP) 是一种采用距离向量算法的路由协议,它的工作原理是利用邻居的路由表构造自己的路由表。它的最大优点是简单。
-
RIP 距离定义:
-
从路由器到直连网的距离定义为 1;从路由器到非直连网的距离定义为所经过的路由器数加 1(最后一个路由器到直连网的距离为 1)。
-
初始时每个 RIP 路由器只有到直连网的路由,距离为 1。
-
路由表中到目的网络的距离以跳为单位,所以 RIP 协议的距离也称为 “跳数”。最大距离为 15,距离 16 表示无穷大,即目的网络不可达。
-
RIP 认为 好的路由就是它通过的路由器少,即 “距离” 短。所以,RIP 只会选择一条具有最少路由器的路由(最短路由),即使存在一条高速低时延但路由器较多的路由。
-
-
按固定的时间间隔交换路由信息:
每 30 秒, RIP 路由器把它的整个路由表发送给邻居。
具体实现时发给每个邻居时会错开发送,30秒的时间也会随机变化一点。 -
距离向量算法:
当收到邻居发来的路由表 (update packet) 时,路由器将按以下步骤更新它的路由表:<目的网络, 距离, 下一跳>
-
首先将收到路由的距离全部加 1 (即一跳的距离)。
-
然后利用上述路由修改路由表:
- 把路由表中不存在的路由(原来的路由没有该目的网络)加入路由表。
- 如果下一条的路由地址不是邻居,且比路由表中的路由的距离更小,则更新该路由的距离为新距离,把下一跳改为邻居。
- 如果路由已存在并且下一跳就是该邻居,则必须进行更新。(因为这是最新的消息,要已最新的消息为准。不管距离变大、变小还是不变都要更新)。
-
二、慢收敛问题 (Slow Convergence)
当增加一个新网络 N1 的时候,N1 的路由要从 R1 传到 Rm 最多需要多长时间?最少需要多少时间?
-
最长时间:(m-1) * 30 s
增加了新网络 N1 时,恰好 R1 要等待 30 s 后才能将自己的路由表传给 R2,R1 的路由表传到 R2 后,R2 也要等待 30 s 后才能将自己的路由表传给 R3,以此类推。所以到达 Rm 要等待 (m-1) * 30 s。
-
最短时间:0 s(不计物理传播时间)
R1 快要发送路由表时,恰好增加了新网络 N1,这时 R1 立即发送自己的路由表给 R2,恰好此时 R2 收到路由表后立即发送自己的路由表给 R3,以此类推。每一步都恰到好处。
三、计数到无穷问题(Count to Infinity)
1. 无环的情况
注:上图中,\'<>\' 表示的是 <目的网络,距离,下一跳>,\'-\' 表示下一跳为直连网。
问题:当 N1 失效时(比如路由器 R1 到 N1 的链路出现了故障),R1 把 N1 路由的距离改为 16(无穷大) 后会发生什么?
解析:N1 失效后,R1 把 N1 路由的距离改为 16。然而 R1 发送自己的路由表给 R2 前,R2 可能已经先把自己的路由表发给了 R1,R1 到 N1 的距离会更新为 3(16 被覆盖了),这时 R1 再把自己的路由表发送给 R2,R2 到 N1 的距离会更新为 4。这样的更新一直继续下去(因为互为来源),直到 R1 和 R2 到 N1 的距离都增大到 16 时,R1 和 R2 才知道 N1 是不可达的。
网络出故障的传播时间往往很长(例如几分钟),这时 RIP 的一个主要缺点。
解决方法:水平分割技术 (split horizon):从一个接口学来的路由不会从该接口发回去。用一个形象的类比,“ 从老师学来的东西,不要还给老师 ”。
2. 有环的情况
注:上图中,\'<>\' 表示的是 <目的网络,距离,下一跳>,\'-\' 表示下一跳为直连网。
问题:即使使用了 “水平分割技术”,依然可能产生计数到无穷的情况。
当网络 N1 失效时,R2 路由表更新为 <N1, 16, - >。根据水平分割技术,由于 R1 和 R3 到 N1 的路由是向 R2 学来的,R1 和 R3 都不能将路由表发给R2。此时,R2 将路由表分别发给 R1 和 R3。接下来的事件严格按照时间顺序进行。
- R2 发给 R1 的路由表先于 R2 发给 R3 的路由表到达,R1 的路由更新为 <N1, 16, R2>
- R1 的路由表刚刚更新后,R3 就恰好将自己的路由表发送给了 R1,根据 RIP 协议,R1 的路由再次被更新为 < N1, 3, R3>
- 此时,R1 的学习来源是 R3,所以 R1 可以将自己的路由表发送给 R2 了,R2 的路由表更新为 <N1, 4, R1>
- R2 再向 R3 发送路由表,则 R3 的路由表更新为 <N1, 5, R2>。
此时三个路由表的距离都不是无穷 (16),它们会不断持续更新路由表,直到所有的路由到 N1 的距离为 16。由上文可知这会消耗不少的时间。
解决方法:利用 抑制技术 (hold down) 和 触发更新(triggered update)。
- 抑制技术:距离被改为无穷大的路由在一段短时间 (180 s) 内其距离不允许被修改,这么做的目的是为了防止抖动。
- 触发更新:一旦出现路由变化,立即把变化的路由发送给邻居。原有的 30 s 发一次完整的路由表机制依然不变。
以上是关于RIP 协议的问题的主要内容,如果未能解决你的问题,请参考以下文章