路由表在哪儿,数据包就往哪儿走
你有没有遇到过这种情况:电脑连着网,浏览器却打不开网页,ping 外部地址也超时。重启路由器没用,杀毒软件也没报问题,最后发现是系统不知道该把数据包发给谁。这时候就得查网络协议栈里的路由表。
路由表就像快递系统的分拣规则,告诉操作系统“去 192.168.1.0 的包走内网,去 8.8.8.8 的包走默认网关”。一旦这条路由出错或缺失,再快的网速也白搭。
查看路由表的基本命令
在 Windows 上打开命令提示符,输入:
route print你会看到一堆表格,重点看“网络目标”和“网关”这两列。比如,默认路由通常长这样:
网络目标 网关 接口 跃点数
0.0.0.0 192.168.1.1 192.168.1.100 30这表示所有未知目的地的流量都会被送往 192.168.1.1。如果这一条没了,外网自然访问不了。
在 Linux 或 macOS 上,使用:
ip route show或者老一点的系统:
route -n输出类似:
default via 192.168.1.1 dev wlan0
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.100这里的 default 就是默认路由,相当于 Windows 的 0.0.0.0 那条。
常见问题和处理方式
有时候你会发现路由表里有两条默认路由。比如插了 USB 网卡又连着 Wi-Fi,两个网络都设置了默认网关。这时候系统可能选错出口,导致明明连着网却上不了线。
可以手动删掉多余的:
route delete 0.0.0.0 mask 0.0.0.0 192.168.2.1Linux 下用:
ip route del default via 192.168.2.1还有一种情况是静态路由配置错误。公司内网常会加特定路由,比如把 10.10.0.0/16 的流量指向某个专用接口。如果手误写成 10.10.0.0/8,可能把不该走内网的请求也拦下来了。
查这类问题,可以用 traceroute(Windows 是 tracert)看看数据包到底走到哪一步断了:
tracert 8.8.8.8如果第一跳就失败,很可能是本地路由表没配好。
别忘了检查策略路由
高级场景下,系统可能用了策略路由(Policy Routing),也就是根据源地址、端口等条件选择不同路由表。Linux 上可以用:
ip rule show看看有没有按源 IP 分流的规则。如果某张自定义路由表里缺了默认路由,走那条路径的流量就会丢包。
开发人员调试多网卡应用时,容易忽略这一点。比如 Docker 启动容器后会新建虚拟网桥并添加独立路由规则,若主机网络切换频繁,这些规则可能失效。
自动化脚本辅助排查
如果你经常处理这类问题,可以写个简单脚本定期记录路由状态。Windows 批处理示例:
@echo off
route print > C:\routes\route_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%.txtLinux 可以用 shell 加入 cron:
*/10 * * * * ip route show > /var/log/route.log.$(date \+\%Y\%m\%d)当网络出问题时,对比正常和异常时刻的路由快照,往往能一眼看出差异。