第35篇:RIP 协议原理与防环机制

一、写在前面

RIP(Routing Information Protocol)是最早的动态路由协议之一,属于距离矢量协议

虽然现网中 RIP 已经被 OSPF 取代,但它以简单易懂的特点成为学习路由协议的入门教材。理解 RIP 的缺点,能让你更明白为什么需要 OSPF/IS-IS。

一句话:RIP 用跳数当度量值,每 30 秒广播一次路由表,最大 15 跳就到头了。


二、RIP 的基本工作原理

2.1 核心机制

周期更新:每 30 秒向邻居广播一次自己的完整路由表
度量值:跳数(Hop Count)
最大跳数:15(16 = 不可达)
传输协议:UDP 端口 520
路由更新方式:整表广播

2.2 工作流程

R1 ──── R2 ──── R3
 │              │
10.0.1.0/24    10.0.3.0/24

R1 的路由表:
  10.0.1.0/24  直连  跳数 0
  10.0.2.0/24  R2    跳数 1  ← 从 R2 学到的
  10.0.3.0/24  R2    跳数 2  ← R2→R3 再学到的

R1 每 30 秒广播自己的路由表给邻居(R2)
R2 收到后:
  如果 R1 通告的跳数 + 1 小于自己当前的路由跳数 → 更新
  否则 → 忽略

2.3 RIP 的版本

版本 V1 V2 NG(IPv6)
是否支持 VLSM
是否支持认证
更新方式 广播 组播(224.0.0.9) 组播
使用场景 已淘汰 少量存在 极少

三、RIP 的定时器

定时器 默认值 作用
周期更新 30 秒 每 30 秒发送一次完整的路由表
路由失效 180 秒 180 秒没收到某路由的更新 → 标记为"可能失效"
路由刷新 120 秒 实际华为和 Cisco 中都整合在 180 秒
抑制计时器 180 秒 路由标记不可达后,等待 180 秒才接受新更新

四、RIP 的四大防环机制

RIP 作为距离矢量协议,最大的问题就是容易产生环路,因此它有一套"组合拳"来防环。

4.1 最大跳数(Max Hop Count)

最根本的防线:跳数超过 15 即为不可达。

R1→R2→R3→...→R16:跳数=16 → 不可达,丢弃

即使产生环路,数据包最多绕 15 次就会被丢弃。

4.2 水平分割(Split Horizon)

原理:从某个接口学到的路由,不再从该接口通告出去

R1 ←── R2 告诉 R1:"10.0.3.0/24,跳数 1"
R1 将这条路由加入路由表(跳数 2)

R1 发路由更新时:
  从 R2 方向学到的 10.0.3.0/24 → 不再告诉 R2
  (因为 R2 已经知道了,且告诉 R1 只会造成误导)

效果:防止两台路由器互相把对方当作下一跳形成环路。

4.3 毒性反转(Poison Reverse)

原理:对于从某接口学到的路由,通告时将跳数设为 16(不可达)

R1 ←── R2 告诉 R1:"10.0.3.0/24,跳数 1"

R1 发路由更新给 R2:
  "10.0.3.0/24,跳数 16" → 告诉 R2 "这条路从我这不可达"

毒性反转比水平分割更激进:它不只是"不说",而是明确告诉邻居"这里不通"。

4.4 触发更新(Triggered Update)

原理:拓扑变化时立即发送更新,不等 30 秒周期。

R1→R2 链路断了 → R1 立刻检测到
  ↓
R1 立即发送更新(不等 30 秒)
  ↓
R2 马上知道变化
  ↓
R2 立即转发更新给 R3

效果:加速收敛,减少环路的时间窗口。


五、RIP 的慢收敛问题

即使有四大防环机制,RIP 仍然存在慢收敛问题。来看一个典型场景:

R1 ──── R2 ──── R3
│                 │
└──── 10.0.1.0 ──┘

如果 R1↔R2 断了:

正常时:
  R2 → 10.0.1.0/24 → R1(跳数 1)

R1↔R2 断了后:
  R1 知道断了(自己的直连)
  但 R3 还不知道

R3 发路由更新给 R2:
  "10.0.1.0/24,跳数 2"  ← 从旧路由学到的

R2 收到:
  10.0.1.0/24 通过 R1 的路径断了
  但 R3 告诉我通过它只有 2 跳 → 更新!

结果:
  R2 → 10.0.1.0/24 → R3(跳数 3)
  R3 → 10.0.1.0/24 → R2(跳数 2)
  ← 环路形成!

直到跳数达到 16(经过多次更新),环路才被打破。
这个过程叫"计数到无穷大(Count to Infinity)"。

RIP 的"计数到无穷大" 需要多次更新周期才能收敛,所以 RIP 收敛时间可达 3~5 分钟


六、RIP 配置

[Router] rip 1
[Router-rip-1] version 2
[Router-rip-1] network 10.0.0.0           ← 宣告直连网段(注意是主类网络)
[Router-rip-1] network 192.168.1.0
[Router-rip-1] quit

查看 RIP 状态

[Router] display rip 1
  RIP process : 1
  Version     : 2
  Local IP    : 10.0.12.1
  Neighbor    : 10.0.12.2
  Timer       : 30s (update), 180s (timeout), 120s (garbage)

[Router] display rip 1 database
  10.0.0.0/8    via 10.0.12.2    cost 1
  10.0.2.0/24   via 10.0.12.2    cost 2

七、RIP 在实际中的局限

局限 说明
最大 15 跳 不能用于大型网络
收敛慢 分钟级收敛,业务断连时间长
带宽浪费 每 30 秒全表广播
跳数为度量值 不考虑带宽、延迟,可能导致次优路径
V1 不支持 VLSM V2 才支持 CIDR

八、思考

  1. RIP 的最大跳数是多少?跳数到达这个值表示什么?
  2. 水平分割的作用是什么?一句话说清楚。
  3. 毒性反转和水平分割有什么不同?哪个更激进?
  4. 什么是"计数到无穷大"问题?RIP 怎么解决?(用到了哪个机制?)
  5. RIP V1 和 V2 有哪些区别?
  6. 如果网络中有 20 台路由器,全用 RIP,一条链路故障后全网恢复需要多久?

下篇预告:第36篇《RIP跳数限制导致的网络不可达故障》——通过故障案例理解RIP跳数限制导致的网络不可达问题。