这是静态路由系列的第三篇。前两篇一篇是基本静态路由、一篇是浮动路由,这次的**递归路由(Recursive Route)**是三篇里最绕的一个——它的下一跳地址不是直连邻居,而是一个"够不着"的地址,路由器得自己一层一层往下查,直到查到一个能直接送出去的出口为止。听着玄,配完就懂了。


目录

  1. 先看全貌:网络长这样
  2. 先扯两句:递归路由到底在干嘛
  3. 需求和拓扑怎么设计的
  4. 配之前先想清楚递归原理
  5. 开始敲命令
  6. 看路由表:递归是怎么解析的
  7. 验证故障切换
  8. 几个容易混的点
  9. 递归失败/切不过来怎么办
  10. 最后说两句

一、先看全貌:网络长这样

先上拓扑。Device1 要去 200.200.200.0/24 这个网段,但路由的下一跳不写邻居接口 IP,而是写 Device3 的环回口 192.168.1.1——这个地址 Device1 够不着(不是直连),所以得靠递归查找。Device1 有两条路到这个环回口:主路径直接经 Device3,备路径绕经 Device2:

主路径 VLAN13
172.16.13.0/24

备份路径 VLAN12
172.16.12.0/24

VLAN23
172.16.23.0/24

环回口 lo0
192.168.1.1/32

可达

🔀 Device1
G0/0/0: 172.16.13.1
G0/0/1: 172.16.12.1

🔀 Device3
G0/0/0: 172.16.13.3
G0/0/1: 172.16.23.3
lo0: 192.168.1.1

🔀 Device2
G0/0/0: 172.16.12.2
G0/0/1: 172.16.23.2

🎯 递归下一跳
192.168.1.1

📦 目的网段
200.200.200.0/24

🟡 看图有个小窍门 注意 Device3 那个 lo0: 192.168.1.1——这是环回口,逻辑接口永远 up。整张递归路由的关键就在这个地址上:它是递归路由的"下一跳",但它不是 Device1 的直连邻居,所以 Device1 得自己想办法查到它。


二、先扯两句:递归路由到底在干嘛

上一篇浮动路由说,静态路由 = 目的网络 + 掩码 + 下一跳。正常情况下下一跳是直连邻居的接口 IP,路由器一看「哦这个地址在我直连网段里,直接从那个接口送出去」就完事了。

但递归路由不一样——它的下一跳是一个非直连地址,路由器在自己直连网段里找不到,于是得再查一次路由表:「这个下一跳地址我自己怎么到?」查到的那条路由如果下一跳还是非直连,就再查……直到查到一个直连的下一跳为止。这个一层一层往下查的过程就叫递归(Recursive)。

🟠 打个比方 就像查地图。你要去 200.200.200.0,地图告诉你「先去中转站 192.168.1.1」;但你不知道中转站咋走,于是再查「192.168.1.1 怎么到」,地图告诉你「走 172.16.13.3 这条路」——这下 172.16.13.3 是你认识的直连邻居了,递归结束,出发。

递归深度就是查了几层。本案列递归深度是 2:先查 200.200.200.0 的下一跳(192.168.1.1),再查 192.168.1.1 的下一跳(172.16.13.3,直连),到这就到底了。

🔵 为啥要这么绕? 因为递归路由的下一跳写的是一个稳定的环回口地址,不随某个物理链路的 up/down 而变化。这样 200.200.200.0 这条路由本身不用改,只要「到达环回口的路径」能自动切换,递归解析出来的出接口就跟着切——等于把"路径切换"这件事下放给了到达环回口的那些路由。


三、需求和拓扑怎么设计的

网络需求

  1. Device1 配两条静态路由可达 192.168.1.1/32(Device3 的环回口),一条经 Device3、一条经 Device2。优先走 Device3 这条主路径。
  2. Device1 配一条静态递归路由可达 200.200.200.0/24,下一跳写环回口 192.168.1.1。当 Device1 与 Device3 之间的线路故障后,该路由自动切换到 Device2 通信。

地址规划

我把原文 IP 换了一套,Device3 用 .3、Device2 用 .2,一眼能区分:

设备接口/VLANIP 地址连谁角色
Device1G0/0/0(VLAN13)172.16.13.1/24Device3主路径本端
Device1G0/0/1(VLAN12)172.16.12.1/24Device2备份路径本端
Device3G0/0/0(VLAN13)172.16.13.3/24Device1主路径对端
Device3G0/0/1(VLAN23)172.16.23.3/24Device2Device2↔Device3 链路
Device3lo0(环回口)192.168.1.1/32—递归下一跳
Device2G0/0/0(VLAN12)172.16.12.2/24Device1备份路径对端
Device2G0/0/1(VLAN23)172.16.23.2/24Device3Device2↔Device3 链路
目的网段—200.200.200.0/24Device3 后面递归路由目的地

🟡 这里有个小心得 环回口地址 192.168.1.1 用 /32 掩码——因为它是一个主机地址,不是一个网段。递归路由的下一跳就是冲着这个主机地址去的,掩码必须精确到 32 位。


四、配之前先想清楚递归原理

这一步是整篇的重点,原理搞懂了,后面的命令和路由表变化就是顺水推舟。

第一层:去环回口的两条路由(带浮动)

Device1 要能"够到"环回口 192.168.1.1,得先配两条去 192.168.1.1/32 的路由,一条主一条备,靠管理距离分主次(上一篇浮动路由的套路):

路由下一跳管理距离说明
去 192.168.1.1/32(主)172.16.13.3(Device3,直连)1(默认)走主路径
去 192.168.1.1/32(备)172.16.12.2(Device2,直连)10走备份路径

🟢 注意 这两条路由的下一跳(172.16.13.3 和 172.16.12.2)都是 Device1 的直连邻居,所以它们是普通静态路由,不需要递归。递归发生在下面那条路由上。

第二层:递归路由去 200.200.200.0/24

关键来了。去 200.200.200.0/24 的路由,下一跳写的是环回口 192.168.1.1——这个地址不是 Device1 的直连邻居:

递归查找

出接口

📦 200.200.200.0/24
下一跳: 192.168.1.1
❌ 非直连!

🎯 192.168.1.1/32
下一跳: 172.16.13.3
✅ 直连!递归终止

vlan13 发出

🟠 递归解析过程 路由器看到 200.200.200.0/24 的下一跳是 192.168.1.1,但自己直连网段里没这个地址 → 再查路由表,发现有 192.168.1.1/32 的路由,下一跳是 172.16.13.3 → 172.16.13.3 在直连网段 172.16.13.0/24 里 → 递归终止,出接口 vlan13。200.200.200.0/24 这条路由本身没写出接口,出接口是递归查出来的。

故障时怎么切换?

主路径(Device1↔Device3)断了之后:

故障:递归切备份

递归

200.200.200.0/24
via 192.168.1.1

192.168.1.1/32 AD=10
via 172.16.12.2 ✅

出接口 vlan12
经 Device2

正常:递归走主路径

递归

200.200.200.0/24
via 192.168.1.1

192.168.1.1/32 AD=1
via 172.16.13.3 ✅

出接口 vlan13
经 Device3

🟢 递归路由的妙处 200.200.200.0/24 这条路由的下一跳始终是 192.168.1.1,一个字都没变。但它依赖的 192.168.1.1/32 路由因为主路径 down 而 AD=1 的失效、AD=10 的浮上来,递归解析出的出接口就从 vlan13 变成了 vlan12。等于把"切换"这件事甩给了到达环回口的那些路由——递归路由自己啥都不用管。

🔴 这里有个容易想歪的地方 环回口 lo0 是逻辑接口,永远 up(除非手动 shutdown)。所以 192.168.1.1/32 这条路由的"消失"不是因为环回口 down,而是因为到达环回口的路径(经 Device3 的直连链路)down 了,导致 AD=1 那条路由失效。别搞反了。


五、开始敲命令

步骤一:VLAN 和接口 IP(略)

老规矩,VLAN12/13/23 建好,端口划进去,接口配 IP。别忘了 Device3 的环回口也要配 IP:

Device3(config)#interface loopback 0
Device3(config-if)#ip address 192.168.1.1 255.255.255.255

🟡 小技巧 环回口掩码用 255.255.255.255(/32),因为它是单一主机地址,不是一个网段。配完验证:Device1 分别 ping 172.16.13.3 和 ping 172.16.12.2 都通,说明两条链路 OK。

步骤二:配去环回口的两条路由(主路径 + 浮动备份)

Device1 —— 主路径经 Device3(AD=1),备路径经 Device2(AD=10):

Device1#configure terminal
Device1(config)#ip route 192.168.1.1 255.255.255.255 172.16.13.3
Device1(config)#ip route 192.168.1.1 255.255.255.255 172.16.12.2 10

Device2 —— Device2 也要能到环回口,它通过 172.16.23.0/24 直连 Device3:

Device2#configure terminal
Device2(config)#ip route 192.168.1.1 255.255.255.255 172.16.23.3

🟠 核心概念 注意 Device1 那条主路由的 AD 没写(默认 1),备路由末尾写了 10。这跟上一篇浮动路由一个套路:主路 AD 小优先,备路 AD 大藏着,主路断了备路浮上来。区别只在于——这里的"目的"是一个环回口地址,不是业务网段。

步骤三:配递归路由

Device1 —— 去业务网段 200.200.200.0/24,下一跳写环回口(非直连,触发递归):

Device1(config)#ip route 200.200.200.0 255.255.255.0 192.168.1.1

🔴 易错点警告 这条命令的下一跳 192.168.1.1 不是 Device1 的直连邻居!如果你忘了前面那两条去 192.168.1.1/32 的路由,这条递归路由会因为「找不到下一跳怎么到」而安装失败——路由表里根本不会出现 200.200.200.0/24。递归路由能不能生效,完全取决于你有没有给它配好"到达下一跳的路由"。


六、看路由表:递归是怎么解析的

配完查看 Device1 路由表:

Device1#show ip route
Codes: C - connected, S - static, R - RIP, O - OSPF, OE - OSPF External, M - Management
D - Redirect, E - IRMP, EX - IRMP external, o - SNSP, B - BGP, i - ISIS
Gateway of last resort is not set
C   172.16.12.0/24 is directly connected, 00:04:07, vlan12
C   172.16.13.0/24 is directly connected, 00:03:58, vlan13
C   127.0.0.0/8 is directly connected, 73:10:12, lo0
S   200.200.200.0/24 [1/100] via 192.168.1.1, 00:00:08, vlan13
S   192.168.1.1/32 [1/100] via 172.16.13.3, 00:01:46, vlan13

🟢 重点看最后两行

  • 192.168.1.1/32 这条路由下一跳是 172.16.13.3(Device3,直连 vlan13),AD=1——这是主路径生效;
  • 200.200.200.0/24 这条路由下一跳是 192.168.1.1,但出接口显示的是 vlan13!这个 vlan13 不是命令里写的,是路由器递归查出来的——它查到 192.168.1.1 要从 vlan13 走,于是 200.200.200.0/24 也从 vlan13 走。

🟠 递归依赖关系 200.200.200.0/24 这条路由依赖于 192.168.1.1/32 这条路由。192.168.1.1/32 的出接口一变,200.200.200.0/24 的出接口就跟着变。这就是"递归"——上面那条路由的出口,由下面那条路由来定。


七、验证故障切换

模拟主路径故障:把 Device1 的 G0/0/0(连 Device3 的主路径)shutdown,再看路由表:

Device1(config)#interface g0/0/0
Device1(config-if)#shutdown

Device1#show ip route
Codes: C - connected, S - static, R - RIP, O - OSPF, OE - OSPF External, M - Management
D - Redirect, E - IRMP, EX - IRMP external, o - SNSP, B - BGP, i - ISIS
Gateway of last resort is not set
C   172.16.12.0/24 is directly connected, 00:09:04, vlan12
C   127.0.0.0/8 is directly connected, 73:15:18, lo0
S   200.200.200.0/24 [1/100] via 192.168.1.1, 00:00:02, vlan12
S   192.168.1.1/32 [10/100] via 172.16.12.2, 00:00:02, vlan12

🟢 对比故障前后,三个变化

  • 直连的 172.16.13.0/24(vlan13)没了——主链路 down,直连路由消失;
  • 192.168.1.1/32 路由的下一跳从 172.16.13.3 变成 172.16.12.2,AD 从 1 变成 10——主路径失效,AD=10 的备路径浮上来;
  • 200.200.200.0/24 路由的下一跳还是 192.168.1.1(没变!),但出接口从 vlan13 变成了 vlan12——递归重新解析,自动切到 Device2。

这就是递归路由的核心价值:业务路由的下一跳不动,到达下一跳的路径自己切,出接口跟着切。

正常: AD=1 主路径

故障: AD=10 备路径

200.200.200.0/24
via 192.168.1.1

递归查
192.168.1.1 怎么到?

via 172.16.13.3 → vlan13
经 Device3 ✅

via 172.16.12.2 → vlan12
经 Device2 ✅


八、几个容易混的点

递归路由 vs 浮动路由 vs 普通静态

类型下一跳特点切换方式
普通静态直连邻居下一跳直接可达,一步到位不切换
浮动路由直连邻居两条去同一目的,靠 AD 分主备主断备浮
递归路由非直连地址下一跳要递归查找才能解析出接口依赖路由自己切

🟠 核心区别 浮动路由和递归路由可以叠加使用——本案列就是:去环回口那两条路由是"浮动",去业务网段那条是"递归"。递归路由自己不切,靠它依赖的浮动路由切。

递归深度

递归深度含义性能
1 层下一跳是直连邻居,不递归最快
2 层下一跳非直连,查一次就能到直连本案列,可接受
多层下一跳非直连,查好几次才到直连太深会拖慢转发,不建议

🔴 易错点警告 递归不能成环!如果路由 A 的下一跳要查路由 B,路由 B 的下一跳又指回路由 A,就会形成递归死循环,路由器会报错并丢弃这条路由。配递归路由时一定要确保递归链最终能落到一个直连下一跳上。

为什么用环回口做递归下一跳?

对比物理接口环回口 lo0
状态随链路 up/down永远 up(逻辑接口)
稳定性链路一断地址就不可达只要设备活着就可达
适合做递归下一跳❌ 不适合✅ 适合

🟡 小技巧 递归路由的下一跳为什么要用环回口?因为环回口不随物理链路 down 而消失,地址始终"存在"。这样递归路由的下一跳(192.168.1.1)永远有效,真正切换的是"到达这个环回口的路径"——这正是递归路由能自动切换的根本原因。


九、递归失败/切不过来怎么办

递归路由不生效或切换失败,基本是这几个原因:

第几步检查啥命令判断
1到达下一跳的路由有没有show ip route没有去 192.168.1.1/32 的路由 → 递归失败
2备份路径通不通ping 备份下一跳不通就查备份链路
3AD 大小对不对show ip route备份那条 AD 要比主大
4有没有递归环show running-configA 指向 B、B 指向 A → 死循环

🔴 我踩过最多次的三个坑
① 递归路由没配上,因为忘了配到达下一跳的路由 光敲了 ip route 200.200.200.0 ... 192.168.1.1,但没配去 192.168.1.1/32 的路由,路由器查不到下一跳咋到,这条路由直接安装失败,路由表里根本看不到。排查先看 192.168.1.1/32 在不在路由表里;
② 环回口没配 IP 或 mask 写错 环回口配成了 /24 而不是 /32,导致 192.168.1.1/32 这条主机路由匹配不上;
③ Device2 没配去环回口的路由 切到备份路径后包到了 Device2,但 Device2 不知道 192.168.1.1 怎么到(没配 ip route 192.168.1.1 ... 172.16.23.3),包到了 Device2 就丢了。


十、最后说两句

递归路由三篇里最绕,但拆开看就两层:第一层配"到达下一跳的路由"(带浮动主备),第二层配"递归路由"(下一跳写非直连地址)。路由器自己递归查解析出接口,到达下一跳的路径一切换,递归路由的出接口就跟着切。

阶段192.168.1.1/32 路由200.200.200.0/24 出接口谁在转发
正常AD=1 via 172.16.13.3vlan13Device3
主路断AD=10 via 172.16.12.2vlan12Device2
主路恢复AD=1 重新生效vlan13Device3 切回

📌 记一句话就够了
递归路由 = 下一跳写一个"够不着"的地址,路由器自己一层层查到直连出口为止。业务路由不动,到达下一跳的路由一切换,出接口自动跟着切。

三篇静态路由到此告一段落:基本配置 → 浮动主备 → 递归切换,难度逐步递进。下一篇打算进入动态路由 RIP,那块的坑比静态多不少,等我弄完再发。有问题评论区见。


计算机网络 静态递归路由 递归查找 环回口 软考网工

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐