家里两台路由器接在一起,突然发现网页打不开、视频卡成PPT,ping 一下目标IP,TTL超时还反复跳转——八成是路由环路在作怪。这问题不罕见,但很多人一看到“环路”就懵,其实它本质就是数据包在几台设备间兜圈子出不去,最后被TTL耗尽丢弃。
为什么环路会悄悄出现?
常见于手动配置静态路由的场景:比如A路由器加了一条去192.168.3.0/24的路由,下一跳指向B;B上也配了同网段路由,下一跳又指回A。没有动态协议校验,俩人互相指路,结果谁也没把包送出去。
RIP的15跳限制,不是摆设
RIP用跳数当度量值,最大只认16(15跳可达,16跳即不可达)。这个设计本身就在防环:一旦某条路由在传播中跳数涨到16,所有路由器立刻把它标记为无效。你可以在RIP设备上抓包看到,收到metric=16的更新后,对应路由条目会马上从路由表消失。
OSPF靠SPF算法天然避环
OSPF不传路由,传的是链路状态通告(LSA)。每台路由器拿到全网拓扑描述后,自己跑一遍Dijkstra算法算最短路径树。只要拓扑描述一致,算出来的路径就不会自相矛盾。这也是为什么OSPF区域里很少见自发性环路——不是运气好,是算法底子硬。
手动防环的三招快准狠
如果只能用静态路由,别光写ip route,配上这三条能省不少排障时间:
- 加管理距离(AD)区分优先级,避免低优先级路由意外顶掉高优路径;
- 在关键接口上配
ip split-horizon(如EIGRP或RIP启用),不让刚收到的路由再发回去; - 对非直连网段,强制指定出接口而非下一跳,比如:
这样能绕过下一跳可达性判断导致的误判。ip route 192.168.5.0 255.255.255.0 GigabitEthernet0/1
一个真实案例
某公司分支用双ISP接入,主线路走BGP,备用走浮动静态路由。结果某天主链路闪断2秒,备用路由生效,但因为没配 track 或 ip sla 监控,主链路恢复后静态路由还在表里,和BGP路由冲突,部分流量被错误导向备用线路,来回绕行引发延迟飙升。后来加了基于延迟的SLA追踪,静态路由自动撤退,环路感立马消失。