第35篇:RIP 协议原理与防环机制
关键词:RIP、RIP v2、距离矢量、水平分割、毒性逆转、触发更新、Hold-Down
一、引言
在第34篇中,我们了解了 RIP 作为距离矢量协议的基本特点:收敛慢、有环路风险、跳数限制。尽管如此,RIP 仍然是理解动态路由协议的最佳入门案例。本篇深入讲解 RIP 的工作原理、报文格式,以及 RIP 为解决环路问题设计的四种防环机制。
二、RIP 协议基础
2.1 RIP 的版本演进
| 版本 | 特性 | 状态 |
|---|---|---|
| RIP v1 | 有类路由、不支持子网、广播发送 | 已淘汰 |
| RIP v2 | 无类路由(CIDR)、支持认证、组播发送 | 仍可见 |
| RIPng | IPv6 版本 | 较少使用 |
2.2 RIP 关键参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| 更新间隔(Update) | 30 秒 | 定期发送完整路由表 |
| 无效计时器(Invalid) | 180 秒 | 超过此时间未收到更新则标记为无效 |
| 保持计时器(Hold-Down) | 180 秒 | 抑制期间不接受更好的路由更新 |
| 刷新计时器(Flush) | 240 秒 | 超过此时间从路由表中删除 |
| 最大跳数 | 15 | 16 表示不可达 |
2.3 RIP 报文格式
RIP 报文封装在 UDP 520 端口:
| 字段 | 长度 | 说明 |
|---|---|---|
| Command | 1 字节 | 1=Request(请求),2=Response(响应/更新) |
| Version | 1 字节 | 2 表示 RIP v2 |
| Reserved | 2 字节 | 保留字段(RIPv2 中为 Routing Domain,一般置 0) |
| Entries | 变长 | 每条路由条目 20 字节,最多 25 条 |
每条路由条目包含:
| 字段 | 长度 | 说明 |
|---|---|---|
| Address Family | 2 字节 | 地址族(2=IP) |
| Route Tag | 2 字节 | 路由标记(用于区分来源) |
| Address | 4 字节 | 目的网络地址 |
| Mask | 4 字节 | 子网掩码(v2 支持) |
| Next Hop | 4 字节 | 下一跳地址(v2 支持) |
| Metric | 4 字节 | 跳数(0-16) |
2.4 RIP 路由更新流程

2.5 RIP 路由选择规则
当 RIP 收到一条路由更新时,按以下逻辑处理:
| 情况 | 处理方式 |
|---|---|
| 目的网络未知 | 直接加入路由表,跳数 +1 |
| 目的网络已知,下一跳相同 | 无条件更新(即使跳数变大) |
| 目的网络已知,下一跳不同,新跳数更小 | 更新路由表 |
| 目的网络已知,下一跳不同,新跳数更大 | 忽略 |
规则 2 是关键:以"下一跳是否相同"识别同一来源的路由;同源路由即使 metric 变大也会持续刷新,从而跟踪源端路径的实时变化,不会被周期性的旧报文误删。防止把路由回灌给来源邻居的是水平分割(见 3.1)。
三、RIP 的四种防环机制
3.1 水平分割(Split Horizon)
原理:从一个接口学到的路由,不从同一个接口再宣告出去。
效果:防止路由器将自己从邻居学到的路由再告诉该邻居,避免"互相指路"。

局限性:对于多路访问网络(如以太网),水平分割不能完全防止环路。
3.2 毒性逆转(Poison Reverse)
原理:从一个接口学到的路由,仍从该接口宣告出去,但将跳数设置为 16(不可达)。
效果:显式告知邻居"这条路由不要通过我",比水平分割更积极。
| 特性 | 水平分割 | 毒性逆转 |
|---|---|---|
| 处理方式 | 不宣告 | 宣告但 metric=16 |
| 带宽消耗 | 低 | 略高(多发送毒化路由) |
| 收敛速度 | 较慢 | 较快(主动告知不可达) |
| 兼容性 | 好 | 两端都需要支持 |
# 华为设备配置
[HUAWEI] rip 1
[HUAWEI-rip-1] split-horizon # 水平分割(P2P/广播网默认开启;NBMA/P2MP 默认关闭)
[HUAWEI-rip-1] undo split-horizon
[HUAWEI-rip-1] poison-reverse # 毒性逆转(默认关闭;与水平分割同时配置时毒性逆转生效)
3.3 触发更新(Triggered Update)
原理:当检测到拓扑变化时,立即发送更新(不等 30 秒周期),而不是等待下一个定期更新。
效果:大幅缩短故障感知时间,减少环路窗口期。
| 更新类型 | 发送时机 | 内容 |
|---|---|---|
| 定期更新 | 每 30 秒 | 完整路由表 |
| 触发更新 | 拓扑变化时 | 变化部分的路由 |
3.4 Hold-Down 计时器
原理:当一条路由被标记为"可能失效"(收到 metric=16 的更新)后,启动 Hold-Down 计时器(180 秒)。在 Hold-Down 期间:
- 不接受关于该路由的更新(即使跳数更好),避免被错误信息误导
- 只有当收到来自原始下一跳且跳数更小的更新时,才提前退出 Hold-Down
| 阶段 | 计时器 | 动作 |
|---|---|---|
| 正常 | — | 接受更新 |
| 失效 | Invalid(180s) | 标记路由为可能失效,启动 Hold-Down |
| 抑制 | Hold-Down(180s) | 拒绝更新,等待稳定 |
| 刷新 | Flush(240s) | 从路由表删除 |
四、实战配置与故障案例
4.1 案例一:RIP v2 基础配置
# R1 配置
[R1] rip 1
[R1-rip-1] version 2
[R1-rip-1] network 10.0.0.0
[R1-rip-1] quit
# R2 配置(10.1.2.0/24 与 R1 互联,10.1.3.0/24 下联 R3)
[R2] rip 1
[R2-rip-1] version 2
[R2-rip-1] network 10.0.0.0
[R2-rip-1] quit
# 验证
<R1> display rip 1 route
Route Flags: R - RIP, T - TRIP
P - Permanent, A - Aging, S - Suppressed, G - Garbage-collect
---------------------------------------------------------------------
Peer 10.1.2.2 on GigabitEthernet0/0/1
Destination/Mask Nexthop Cost Tag Flags Sec
10.1.3.0/24 10.1.2.2 1 0 RA 32
# Flags(华为):R=RIP 路由;A=Aging(老化计时中);S=Suppressed(Hold-Down 抑制期);G=Garbage-collect(等待 Flush 删除)
# 查看 RIP 邻居
<R1> display rip 1 peer
Peer 10.1.2.2 on GigabitEthernet0/0/1
# RIPv2 邻居经组播 224.0.0.9 交互;回显为简化示意,具体字段以设备版本为准
4.2 案例二:RIP v1 与 v2 不兼容
故障描述:两台路由器配置了 RIP,但无法学习到对方的路由。
# R1 运行 RIP v1(默认)
<R1> display rip 1
RIP Process 1, Version: 1
# R2 运行 RIP v2
<R2> display rip 1
RIP Process 1, Version: 2
# 根因:RIP v1 使用广播(255.255.255.255),v2 使用组播(224.0.0.9)
# 同时 v1 不携带掩码信息,v2 需要掩码;版本不一致时虽然能收到邻居通告,
# 但因格式差异导致路由不识别
# 解决:统一版本
[R1] rip 1
[R1-rip-1] version 2
[R1-rip-1] quit
4.3 案例三:水平分割防止环路验证
拓扑:R1(10.1.1.0/24) — R2(10.1.2.0/24) — R3(10.1.3.0/24),R2 与 R3 之间为点对点链路。
# R2 从 GE0/0/1 学到 10.1.1.0/24
# 水平分割生效:R2 不会从 GE0/0/1 再宣告 10.1.1.0/24 给 R1
# 但会从 GE0/0/2 宣告给 R3
# 验证:关闭水平分割观察异常
[R2] rip 1
[R2-rip-1] undo rip split-horizon
# 此时 R2 会把从 GE0/0/1 学到的 10.1.1.0/24 又从同一接口宣告回 R1(路由回灌)
# 本拓扑中 R1 因 10.1.1.0/24 为直连(metric 更优)通常忽略该通告;
# 但在存在迂回路径的组网中,这种回灌是形成环路和计数到无穷的根源
# 恢复水平分割
[R2] rip 1
[R2-rip-1] rip split-horizon
4.4 案例四:RIP 路由振荡
故障描述:某路由在路由表中反复出现和消失。
# 观察路由表变化
<R2> display rip 1 route verbose
Route Flags: R - RIP, T - TRIP
P - Permanent, A - Aging, S - Suppressed, G - Garbage-collect
---------------------------------------------------------------------
Peer 10.1.2.1 on GigabitEthernet0/0/1
Destination/Mask Nexthop Cost Tag Flags Sec
10.1.1.0/24 10.1.2.1 1 0 RS 45
# Flags 含义(华为):
# R = RIP 路由
# S = Suppressed:处于 Hold-Down 抑制期(可能失效,暂不接受新通告)
# G = Garbage-collect:Flush 计时器到期前待删除
# 路由振荡时,该条目的 Flags 会在 A(Aging)/ S(Suppressed)/ G(Garbage-collect)之间切换
# 根因分析:
# 1. 链路闪断(物理层不稳定)
# 2. 路由环路导致 metric 持续变化
# 3. Hold-Down 和 Flush 计时器反复触发
# 解决:
# 1. 检查物理链路状态(display interface)
# 2. 调整计时器参数
[R2] rip 1
[R2-rip-1] timers rip 30 180 180 240 # update invalid holddown flush
五、总结
| 防环机制 | 原理 | 效果 | 华为命令 |
|---|---|---|---|
| 水平分割 | 不从同一接口回传 | 防止反馈环路 | split-horizon |
| 毒性逆转 | 回传但 metric=16 | 主动告知不可达 | poison-reverse |
| 触发更新 | 变化时立即发送 | 缩短收敛时间 | 默认启用 |
| Hold-Down | 抑制不稳定路由 | 防止路由振荡 | 默认启用 |
| RIP 适用场景 | 不适用场景 |
|---|---|
| 小型网络(≤15 跳) | 大规模网络 |
| 简单拓扑 | 复杂拓扑 |
| 对收敛速度无严格要求 | 需要快速收敛 |
| 教学与实验环境 | 生产环境(推荐 OSPF/IS-IS) |
思考
- 为什么 RIP 选择 30 秒作为更新间隔?这个值对收敛速度和资源消耗有什么影响?
- 水平分割和毒性逆转可以同时启用吗?如果同时启用,实际效果是什么?
- RIP 的四种防环机制为什么仍不能完全消除环路?它们各自解决的是哪种环路场景?
下篇预告:第36篇:RIP 跳数限制导致的网络不可达故障