第31篇:路由环路是怎么产生的:TTL 与跳数限制
关键词:路由环路、TTL、跳数限制、ICMP Time Exceeded、水平分割(Split Horizon)
一、引言
在第30篇中,我们学习了浮动静态路由如何实现链路主备切换。但如果主备路由配置不当,或者网络拓扑出现变化时路由信息未能及时更新,数据包就会在路由器之间反复传递,形成路由环路(Routing Loop)。路由环路不仅浪费带宽和设备资源,还会导致业务完全中断。本篇深入分析环路产生的根本原因,以及 IP 协议中 TTL 机制如何作为"最后一道防线"阻止环路无限持续。
二、环路产生的根本原因
2.1 什么是路由环路
路由环路是指数据包在两台或多台路由器之间循环转发,永远无法到达目的地址的现象。本质上,环路是路由表中存在相互矛盾的下一跳指向。
以三台路由器为例:
- R1 认为到达 10.0.0.0/8 的下一跳是 R2
- R2 认为到达 10.0.0.0/8 的下一跳是 R3
- R3 认为到达 10.0.0.0/8 的下一跳是 R1
此时发往 10.0.0.0/8 的数据包将在 R1→R2→R3→R1 之间无限循环。
2.2 环路产生的四大场景
| 场景编号 | 场景描述 | 触发条件 |
|---|---|---|
| 场景一 | 路由信息延迟更新 | 链路故障后,某些路由器仍持有旧路由 |
| 场景二 | 路由配置错误 | 手工配置了矛盾的静态路由 |
| 场景三 | 路由协议收敛慢 | 大型网络中路由协议尚未完成收敛 |
| 场景四 | 路由重分发引入环路 | 不同协议间路由引入时未做过滤 |
2.3 场景还原:链路故障后的环路

三、TTL:IP 协议的防环机制
3.1 TTL 的工作原理
TTL(Time To Live)是 IP 报文头部的一个 8 比特字段。虽然名字是"生存时间",但它实际上记录的是最大跳数。每经过一台三层设备(路由器或三层交换机),TTL 减 1;当 TTL 减到 0 时,设备丢弃该报文并向源地址发送 ICMP Time Exceeded 消息。
3.2 TTL 递减过程
| 经过设备 | TTL 值 | 状态 |
|---|---|---|
| 源主机发出 | 64(Linux/macOS 默认)/ 128(Windows 默认)/ 255(多数网络设备默认) | 初始值 |
| 经过 R1 | 初始值 - 1 | 正常转发 |
| 经过 R2 | 初始值 - 2 | 正常转发 |
| 经过 R3 | 初始值 - 3 | 正常转发 |
| ... | ... | 持续递减 |
| TTL = 1 时再经过一台 | 0 | 丢弃报文,发送 ICMP Time Exceeded |
3.3 不同系统的默认 TTL
| 操作系统/设备 | 默认 TTL |
|---|---|
| Windows | 128 |
| Linux | 64 |
| macOS | 64 |
| 华为路由器/交换机 | 255 |
| Cisco 路由器 | 255 |
通过观察收到的报文 TTL 值,可以推断源主机的操作系统类型,这也是网络侦察中常用的方法。例如:PC ping测网络设备ip查看到的TTL可能是253;PC ping测Windows主机ip查看到的TTL可能是124;PC ping测Linux主机ip查看到的TTL可能是59。
3.4 TTL 在环路中的作用
TTL 不是用来"防止"环路产生的,而是在环路已经发生时,限制环路造成的损害范围:
- 阻止无限循环:没有 TTL,数据包将永远在环路中传递
- 释放资源:TTL 过期后报文被丢弃,释放链路上占用的带宽
- 故障诊断:ICMP Time Exceeded 消息可帮助定位环路位置
四、实战配置与故障案例
4.1 案例一:接口故障后残留静态路由导致环路
故障描述:某企业分支到核心之间的链路正常,但办公网段用户访问外网出现间歇性丢包和时延增大,且与办公侧接口频繁 Down/Up 的时段吻合。
网络结构:分支路由器 BR 通过 GE0/0/1 接入核心路由器 CR。BR 上联接口 GE0/0/1 的 IP 为 10.1.1.1/30,CR 对端 IP 为 10.1.1.2/30。BR 身后办公网段为 192.168.10.0/24(Vlanif10)。CR 通过 GE0/0/2 上联互联网网关。
# BR 上正确的默认路由(办公用户去外网 → CR)
[BR] ip route-static 0.0.0.0 0 10.1.1.2
# 错误配置:BR 上为办公网段 192.168.10.0/24 配了一条"反指"回 CR 的静态路由
[BR] ip route-static 192.168.10.0 24 10.1.1.2 ← 错误!办公网段被反指回 CR
# 正常情况下:办公侧直连路由(Pre 0)优先,错误静态路由不生效,不会环路
# 一旦办公侧接口(Vlanif10)故障 Down,直连路由消失,错误静态路由"浮出水面":
# - 外网回程 → CR → BR(按 CR 上的 192.168.10.0/24 回程路由)
# - BR 查表命中 "192.168.10.0/24 → 10.1.1.2 (CR)",再次丢回 CR
# - CR 又回给 BR → 循环往复,直到 TTL 减为 0 被丢弃
关键点:只要办公侧直连路由存在,正确路由始终优先(Pre 0 最小),错误静态路由不会真正生效。环路往往在接口 Down、直连路由消失后才被触发——接口状态已变化,残留的旧路由却还在表中转发流量,这正是"路由信息延迟更新"类环路的典型形态。
排查过程:
# 查看路由表:此时办公接口已 Down,直连路由消失,只剩残留的静态路由
<BR> display ip routing-table 192.168.10.0
Destination/Mask Proto Pre Cost NextHop Interface
192.168.10.0/24 Static 60 0 10.1.1.2 GE0/0/1 ← 残留的错误静态路由
# 确认办公侧接口状态(直连路由消失的原因)
<BR> display interface Vlanif10
# Vlanif10 当前处于 Down 状态
# 使用 tracert 观察路径:反复出现 10.1.1.2,说明数据包在 BR↔CR 之间循环
<CR> tracert 192.168.10.10
# 修复 1:删除错误静态路由
[BR] undo ip route-static 192.168.10.0 24 10.1.1.2
# 修复 2:排查并恢复办公侧物理链路,使直连路由重新生成
4.2 案例二:环路导致的 ICMP Time Exceeded 爆发
故障描述:核心交换机 CPU 利用率异常升高,经 GE1/0/1 接入的业务出现明显时延增大、间歇性丢包。
# 查看 CPU 占用
<HUAWEI> display cpu-usage
# CPU utilization for five seconds: 85%; one minute: 80%; five minutes: 75%
# 如果设备支持按任务查看,可用 display cpu-usage task,按需查看(以实际设备版本为准)
# 查看接口统计
<HUAWEI> display interface GigabitEthernet 1/0/1
# 发现端口速率异常
# 通过抓包或镜像定位
# 在 GE1/0/1 上做端口镜像,使用 Wireshark 抓包
# 发现大量 ICMP Time Exceeded 报文,TTL 均为 1 或 2
# 根因:接入交换机与核心之间形成 L3 路由环路,数据包被反复转发、TTL 耗尽后产生大量 ICMP Time Exceeded;这些 ICMP 报文的目的地址路由又指回环路,形成二次环路(雪崩效应),进一步挤占带宽和转发资源,导致 CPU 升高和业务时延增大。
4.3 案例三:使用 TTL 追踪定位环路
# 使用 tracert 定位环路节点
<HUAWEI> tracert -a 192.168.1.1 10.10.10.10
1 10.1.1.2 1ms 1ms 1ms
2 10.2.2.1 2ms 2ms 2ms
3 10.3.3.1 3ms 3ms 3ms
4 10.1.1.2 4ms 4ms 4ms ← 回到节点1!
5 10.2.2.1 5ms 5ms 5ms ← 环路确认
6 * * *
7 * * *
# tracert 发现 1→2→3→1 形成环路
原理:tracert 通过发送 TTL 依次为 1、2、3 ... 的探测报文,每一跳设备在 TTL 减到 0 时返回 ICMP Time Exceeded,从而把路径画出来。当路径里出现重复 IP,就能确认环路。
4.4 华为设备上的环路防护配置
# 方法1:静态路由使用出接口方式(接口 Down 时路由自动失效)
[HUAWEI] ip route-static 0.0.0.0 0 GigabitEthernet 0/0/1
# 接口 Down → 路由自动撤销;接口恢复 → 路由自动放回
# 方法2:在易形成环路的接口上做报文过滤或路由汇总
# 例如对办公网段做黑洞路由兜底
[HUAWEI] ip route-static 192.168.10.0 24 NULL0
五、总结
| 知识点 | 要点 |
|---|---|
| 环路本质 | 路由表中存在循环指向的下一跳 |
| TTL 机制 | 每经过一跳减 1,到 0 丢弃并发送 ICMP |
| 默认 TTL | 华为设备 255,Windows 128,Linux/macOS 64 |
| 环路根因 | 路由信息延迟更新、配置错误、收敛慢、重分发 |
| 排查工具 | ping(TTL 参数)、tracert、抓包、路由表 |
| 防护措施 | 效果 | 适用场景 |
|---|---|---|
| TTL 机制 | 限制损害范围 | 所有 IP 网络(内建) |
| 直连路由优先级最高 | 避免覆盖直连 | 静态路由配置 |
| Track 联动静态路由 | 主链路 Down 时撤销路由 | 单链路接入场景 |
| 路由协议防环机制 | 主动防止 | 动态路由(下篇详述) |
| 浮动静态路由 | 主备切换防矛盾 | 参考第30篇 |
思考
- 为什么 TTL 字段设计为"跳数"而非"时间"?用时间计时的方案有什么缺陷?
- 如果一台路由器的 TTL 没有正常递减(设备 Bug),会对网络产生什么影响?
- tracert 利用 TTL 探测路径的原理是什么?为什么需要连续发送 TTL=1、2、3... 的报文?
下篇预告:第32篇:策略路由(PBR):不按路由表走