第36篇:RIP 跳数限制导致的网络不可达故障
一、写在前面
RIP 最大的硬伤是最大跳数只有 15。一旦网络路径超过 15 跳,RIP 就会认为目的地不可达。
这个限制在大型企业网或运营商网络中经常导致"奇怪"的网络故障——明明物理连通、端口都 UP,但就是 ping 不通。
二、故障案例:跨省网络无法通信
2.1 网络拓扑
北京 上海 广州
R1 ─── R2 ─── R3 ─── R4 ─── R5 ─── R6 ─── R7 ─── R8 ─── R9
│ (中间多跳) │
PC-A PC-B
10.0.1.1 10.0.9.1
北京到广州经过 8 台路由器,7 跳。
2.2 故障现象
- PC-A 能够 ping 通 R1~R2~R3~R4
- PC-A ping R5 超时
- PC-A ping PC-B 超时
- 但物理链路全部正常,接口都 UP
2.3 排查过程
第 1 步:从 PC-A 开始 tracert
C:\> tracert 10.0.9.1
1 R1 (10.0.1.254)
2 R2 (10.0.12.2)
3 R3 (10.0.23.3)
4 R4 (10.0.34.4)
5 * * * Request timed out.
6 * * * Request timed out.
到第 4 跳之后就没有了。
第 2 步:在 R4 上查路由表
<R4> display ip routing-table
Destination/Mask Proto Pre Cost NextHop Interface
10.0.1.0/24 RIP 100 3 10.0.34.3 GE0/0/1
10.0.9.0/24 RIP 100 ??? ?????
没有 10.0.9.0/24 的路由!
第 3 步:查 RIP 数据库
<R4> display rip 1 database
10.0.1.0/24 cost 3
10.0.5.0/24 cost ˝
10.0.6.0/24 cost 2
10.0.7.0/24 cost ??
...
没有 10.0.9.0/24 的信息。
第 4 步:查 R9 到 PC-A 的路径跳数
<R9> display ip routing-table 10.0.1.0
Route Destination: 10.0.1.0/24
NextHop : 10.0.89.8 Pre: 100 Cost: 7
R9 到 PC-A 是 7 跳,没问题。
第 5 步:看 R4 到 R9 的跳数
# 在 R4 上从 RIP 数据库看各路由的跳数
R4 到 R9:需要经过 R5-R6-R7-R8-R9 → 5 跳
R4 到 PC-B(10.0.9.0):
R4→R5→R6→R7→R8→R9→PC-B → 总共 6 跳
6 跳,没超过 15——那为什么 R4 没有路由?
第 6 步:查到根因了!
重新算 PC-A 到 PC-B 的跳数:
PC-A → R1 (1) → R2 (2) → R3 (3) → R4 (4) → R5 (5)
→ R6 (6) → R7 (7) → R8 (8) → R9 (9) → PC-B
从 RIP 的角度:
PC-A 属于 10.0.1.0/24,R1 直连,cost=1
R3 学到 10.0.1.0/24:R1→R2→R3 = cost 2
R4 学到 10.0.1.0/24:cost 3
R5 学到:cost 4
R6 学到:cost 5
R7 学到:cost 6
R8 学到:cost 7
R9 学到:cost 8 → 还没超过 15!
等等,问题可能是反向的?
重新思考:问题不是 PC-A → PC-B,而是R4 是怎么学到 10.0.9.0/24 的?
10.0.9.0/24 → R9 直连 cost=0
R8 从 R9 学到:cost 1
R7 从 R8 学到:cost 2
R6 从 R7 学到:cost 3
R5 从 R6 学到:cost 4
但这里还有一个问题:RIP 宣告时用的是主类网络还是 CIDR?
等等,实际上 RIP V1 不支持 VLSM,V2 才支持。
更常见的场景是这样的:
2.4 更典型的 RIP 跳数故障
R1 ──── R2 ──── R3 ──── ... ──── R17 ──── 目标网段
R1 到目标:
直连设备 cost=0
R1: cost=1(经过 R2)
R2: cost=2
...
R17: cost=16 → RIP 认为是不可达!
R17 到目标网段的路由 cost=16 → 该网段在 R17 上不可见 → R17 不转发流量 → ping 不通!
2.5 问题确认
北京 R1 ~ 广州 R9 中间经过 8 跳
PC-A (10.0.1.1) → 目标网络 (10.0.9.0/24)
R1 学到: cost=8
R2 学到: cost=7 (R1: "我离10.0.9.0/24 有 8 跳"→ R2 变成 9 跳?不对)
让我重新计算:
从 R1 角度看:
10.0.9.0/24 经过 R2-R3-R4-R5-R6-R7-R8-R9 → 8 跳
R1 的 cost = 8
RIP 的限制是 15 跳 → 8 跳没超
所以这个案例中,正常不应出问题。
让我换一个更常见且真实的场景:
2.6 真实场景:多跳接入远端站点
总部 ──R1──R2──R3──R4──R5──R6──R7──R8──R9──R10──R11──R12──R13──R14──R15──R16── 分支
总部 10.0.0.0/24 到分支 10.16.0.0/24
R1: 去 10.16.0.0/24 经过 R2-R3-...-R16,共 15 跳
→ cost = 15!(R1→R2=1, R2→R3=2, ..., R15→R16=15)
→ RIP 允许的最大值
R18: 如果再加一台...
→ cost = 16 → RIP 认为是不可达!
这就是 RIP 跳数限制故障的典型场景。
三、更实际的案例:路由重分发跳数叠加
OSPF 网络 RIP 网络 OSPF 网络 | R1 OSPF | ──RIP── 跳数5 | R2 RIP+OSPF | ──RIP── 跳数6 | R3 OSPF | | --- | --- | --- | --- | --- | 10.0.1.0
OSPF 路由被重分发到 RIP 中:
R1 将 10.0.1.0/24 从 OSPF 重分发到 RIP
→ 重分发时的默认跳数 = 1
→ 经过 5 跳 RIP 到达 R2
R2 又将该路由从 RIP 重分发到 OSPF...
但 RIP 侧 R2→R3 还有 6 跳
→ 总跳数 = 5+1+6 = 12
如果中间路径更长 → 超过 15 跳 → 不可达!
四、RIP 跳数限制的解决方案
| 方案 | 说明 |
|---|---|
| 用 OSPF 替代 RIP | 从根本上解决跳数限制(推荐) |
| 路由协议分层 | 核心用 OSPF/IS-IS,边缘用 RIP |
| 路由重分发时手动设跳数 | rip metric 1 控制初始跳数 |
| 分割网络 | 大网络拆成多个小 RIP 域(不推荐) |
推荐的改造方案
# 用 OSPF + RIP 共存,OSPF 做骨干
[R1] ospf 1
[R1-ospf-1] import-route rip 1 ← 引入 RIP 路由到 OSPF
[R1-ospf-1] quit
[R1] rip 1
[R1-rip-1] import-route ospf 1 ← 引入 OSPF 路由到 RIP
[R1-rip-1] default metric 3 ← 设置默认跳数,避免跳数过高
五、思考
- RIP 的最大跳数是 15,如果你有 20 台路由器串成一串,第 16 台路由器还能学到远端路由吗?
- RIP 跳数限制在什么场景下最容易触发?(Hint:路由重分发)
- PC-A ping PC-B tracert 到第 12 跳就超时了,但物理链路正常,可能是什么问题?
- RIP 跳数限制是设计缺陷还是故意为之?为什么?
- 如果现网有设备只能用 RIP,你怎么与 OSPF 骨干网络共存?
- 路由重分发时,
default metric不设置的话,OSPF 路由在 RIP 中的默认跳数是多少?
下篇预告:第37篇《路由优先级Preference与度量值Metric》——理解路由优先级和度量值对路由选择的影响。