第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 |
八、思考
- RIP 的最大跳数是多少?跳数到达这个值表示什么?
- 水平分割的作用是什么?一句话说清楚。
- 毒性反转和水平分割有什么不同?哪个更激进?
- 什么是"计数到无穷大"问题?RIP 怎么解决?(用到了哪个机制?)
- RIP V1 和 V2 有哪些区别?
- 如果网络中有 20 台路由器,全用 RIP,一条链路故障后全网恢复需要多久?
下篇预告:第36篇《RIP跳数限制导致的网络不可达故障》——通过故障案例理解RIP跳数限制导致的网络不可达问题。