第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            ← 设置默认跳数,避免跳数过高

五、思考

  1. RIP 的最大跳数是 15,如果你有 20 台路由器串成一串,第 16 台路由器还能学到远端路由吗?
  2. RIP 跳数限制在什么场景下最容易触发?(Hint:路由重分发)
  3. PC-A ping PC-B tracert 到第 12 跳就超时了,但物理链路正常,可能是什么问题?
  4. RIP 跳数限制是设计缺陷还是故意为之?为什么?
  5. 如果现网有设备只能用 RIP,你怎么与 OSPF 骨干网络共存?
  6. 路由重分发时,default metric 不设置的话,OSPF 路由在 RIP 中的默认跳数是多少?

下篇预告:第37篇《路由优先级Preference与度量值Metric》——理解路由优先级和度量值对路由选择的影响。