RIP 协议的问题

RIP 协议的 2 个问题

一、 基础知识

  1. 工作原理:

    路由信息协议 (Routing Information Protocol,RIP) 是一种采用距离向量算法的路由协议,它的工作原理是利用邻居的路由表构造自己的路由表。它的最大优点是简单

  2. RIP 距离定义:

    • 从路由器到直连网的距离定义为 1;从路由器到非直连网的距离定义为所经过的路由器数加 1(最后一个路由器到直连网的距离为 1)。

    • 初始时每个 RIP 路由器只有到直连网的路由,距离为 1。

    • 路由表中到目的网络的距离以为单位,所以 RIP 协议的距离也称为 “跳数”。最大距离为 15,距离 16 表示无穷大,即目的网络不可达。

    • RIP 认为 好的路由就是它通过的路由器少,即 “距离” 短。所以,RIP 只会选择一条具有最少路由器的路由(最短路由),即使存在一条高速低时延但路由器较多的路由。

  3. 按固定的时间间隔交换路由信息:

    每 30 秒, RIP 路由器把它的整个路由表发送给邻居。
    具体实现时发给每个邻居时会错开发送,30秒的时间也会随机变化一点。

  4. 距离向量算法:

    当收到邻居发来的路由表 (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。接下来的事件严格按照时间顺序进行。

  1. R2 发给 R1 的路由表先于 R2 发给 R3 的路由表到达,R1 的路由更新为 <N1, 16, R2>
  2. R1 的路由表刚刚更新后,R3 就恰好将自己的路由表发送给了 R1,根据 RIP 协议,R1 的路由再次被更新为 < N1, 3, R3>
  3. 此时,R1 的学习来源是 R3,所以 R1 可以将自己的路由表发送给 R2 了,R2 的路由表更新为 <N1, 4, R1>
  4. R2 再向 R3 发送路由表,则 R3 的路由表更新为 <N1, 5, R2>。

此时三个路由表的距离都不是无穷 (16),它们会不断持续更新路由表,直到所有的路由到 N1 的距离为 16。由上文可知这会消耗不少的时间。

解决方法:利用 抑制技术 (hold down) 和 触发更新(triggered update)。

  • 抑制技术:距离被改为无穷大的路由在一段短时间 (180 s) 内其距离不允许被修改,这么做的目的是为了防止抖动。
  • 触发更新:一旦出现路由变化,立即把变化的路由发送给邻居。原有的 30 s 发一次完整的路由表机制依然不变。
posted @ 2021-05-20 19:45  CoolGin  阅读(816)  评论(0编辑  收藏  举报