第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 路由更新流程

RIP 路由更新流程 - 图示

2.5 RIP 路由选择规则

当 RIP 收到一条路由更新时,按以下逻辑处理:

情况 处理方式
目的网络未知 直接加入路由表,跳数 +1
目的网络已知,下一跳相同 无条件更新(即使跳数变大)
目的网络已知,下一跳不同,新跳数更小 更新路由表
目的网络已知,下一跳不同,新跳数更大 忽略

规则 2 是关键:以"下一跳是否相同"识别同一来源的路由;同源路由即使 metric 变大也会持续刷新,从而跟踪源端路径的实时变化,不会被周期性的旧报文误删。防止把路由回灌给来源邻居的是水平分割(见 3.1)。

三、RIP 的四种防环机制

3.1 水平分割(Split Horizon)

原理:从一个接口学到的路由,不从同一个接口再宣告出去。

效果:防止路由器将自己从邻居学到的路由再告诉该邻居,避免"互相指路"。

水平分割(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)

思考

  1. 为什么 RIP 选择 30 秒作为更新间隔?这个值对收敛速度和资源消耗有什么影响?
  2. 水平分割和毒性逆转可以同时启用吗?如果同时启用,实际效果是什么?
  3. RIP 的四种防环机制为什么仍不能完全消除环路?它们各自解决的是哪种环路场景?

下篇预告:第36篇:RIP 跳数限制导致的网络不可达故障