一、 基础知识
1. 工作原理:
路由信息协议 (Routing Information Protocol,RIP) 是一种采用距离向量算法的路由协议,它的工作原理是利用邻居的路由表构造自己的路由表。它的最大优点是简单,适用于规模较小的网络。
2. RIP 距离定义:
- 从路由器到直连网的距离定义为 1;从路由器到非直连网的距离定义为所经过的路由器数加 1(最后一个路由器到直连网的距离为 1)。
- 初始时每个 RIP 路由器只有到直连网的路由,距离为 1。
- 路由表中到目的网络的距离以跳为单位,所以 RIP 协议的距离也称为 “跳数”。最大距离为 15,距离 16 表示无穷大,即目的网络不可达。
- RIP 认为 好的路由就是它通过的路由器少,即 “距离” 短。所以,RIP 只会选择一条具有最少路由器的路由(最短路由),即使存在一条高速低时延但路由器较多的路由。
4. 实现方法:
相邻路由器之间按固定的时间间隔交换路由信息:每 30 秒, RIP 路由器把它的整个路由表发送给邻居。
具体实现时发给每个邻居时会错开发送,30秒的时间也会随机变化一点。
6. 距离向量算法(基于Bellman-Ford最短路径算法):
当收到邻居发来的路由表 (update packet) 时,路由器将按以下步骤更新它的路由表:<目的网络, 距离, 下一跳>:
- 首先将收到路由的距离全部加 1 (即一跳的距离)。
- 然后利用上述路由修改路由表:
- 把路由表中不存在的路由(原来的路由没有该目的网络)加入路由表。
- 如果下一条的路由地址不是邻居,且比路由表中的路由的距离更小,则更新该路由的距离为新距离,把下一跳改为邻居。
- 如果路由已存在并且下一跳就是该邻居,则必须进行更新。(因为这是最新的消息,要已最新的消息为准。不管距离变大、变小还是不变都要更新)。
7. 使用UDP协议进行传输
二、慢收敛问题 (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 的一个主要缺点。
2. 有环的情况
问题:即使使用了 “水平分割技术”,依然可能产生计数到无穷的情况。文章来源:https://www.toymoban.com/news/detail-743595.html
当网络 N1 失效时,R2 路由表更新为 <N1, 16, - >。根据水平分割技术,由于 R1 和 R3 到 N1 的路由是向 R2 学来的,R1 和 R3 都不能将路由表发给R2。此时,R2 将路由表分别发给 R1 和 R3。接下来的事件严格按照时间顺序进行。文章来源地址https://www.toymoban.com/news/detail-743595.html
- 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。由上文可知这会消耗不少的时间。
3. 解决方法
- 最大跳数:16跳不可达
- 水平分割 (split horizon):从一个接口学来的路由不会从该接口发回去。用一个形象的类比,“ 从老师学来的东西,不要还给老师 ”。比如有三台路由器ABC,B向C学习到访问网络10.4.0.0的路径以后,不再向C声明自己可以通过C访问10.4.0.0网络的路径信息,A向B学习到访问10.4.0.0网络路径信息后,也不再向B声明,而一旦网络 10.4.0.0发生故障无法访问,C会向A和B发送该网络不可达到的路由更新信息,但不会再学习A和B发送的能够到达10.4.0.0的错误信息。
当存在环路时。该方法无效 - 毒化路由:假设有三台路由器ABC,当网络10.4.0.0出现故障无法访问的时候,路由器C便向邻居路由发送相关路由更新信息,并将其度量值标为无穷大,告诉它们网络10.4.0.0不可到达,路由器B收到毒化消息后将该链路路由表项标记为无穷大,表示该路径已经失效,并向邻居A路由器通告,依次毒化各个路由器,告诉邻居10.4.0.0这个网络已经失效,不再接收更新信息,从而避免了路由环路。
- 毒性逆转:当路由器B看到到达网络10.4.0.0的度量值为无穷大的时候,就发送一个叫做毒化逆转的更新信息给C路由器,说明10.4.0.0这个网络不可达到,这是超越水平分割的一个特列,这样保证所有的路由器都接受到了毒化的路由信息。
- 抑制(hold-down)计时器:当路由表中的某个条目所指网络消失时,路由器并不会立刻的删除该条目并学习新条目,而是严格按照我们前面所介绍的计时器时间现将条目设置为无效接着是挂起,在240秒时才删除该条目,这么做其实是为了尽可能的给予一个时间等待发生改变的网络恢复。比如收到从邻居发送来的更新信息,包含一个比原来路径具有更好度量值的路由,就标记为可以访问,并取消抑制计时器。
- 触发更新:因网络拓扑发生变化导致路由表发生改变时,路由器立刻产生更新通告直连邻居,不在需要等待30秒的更新周期,这样做是为了尽可能的将网络拓扑的改变通告给其他人。
到了这里,关于RIP协议与存在的问题:慢收敛、计数到无穷的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!