4. 网络连通性故障排查归纳总结

网络出问题了,第一反应是什么?

我反正先 ping。别笑,这招真管用。

干了这么多年运维,80%的连通性问题,用最基础的工具就能定位。真正复杂的场景不多,但你需要一套清晰的排查思路。

今天聊聊我自己的排查习惯。

网络连通性排查路径 收到连通性告警 第1步:检查物理链路 第2步:验证IP连通性 第3步:排查路由表 第4步:检查防火墙策略 第5步:验证DNS解析 交叉验证 & 抓包分析 定位并修复 提示:从物理层开始,逐层向上排查,不要跳过任何一步

4.1 先确认:到底是哪不通?

一上来就敲命令,容易吃瘪。你得先问清楚。

  • 是 全部网站 都打不开?还是某个特定的不行?
  • 是 内网 有问题,还是 外网 断了?
  • 只有 一台机器 上不了?还是整个网段都瘫痪了?
我个人的小习惯: 先画个简图。源 IP、目标 IP、中间经过几跳,心里有数再动手。

举个例子。有一次半夜接到电话,说财务系统登不上了。

我问:是所有人都登不上?

答:财务部三个人都登不上。

我又问:那你们能上外网吗?能内网 ping 通服务器吗?

答:能上百度,也能 ping 通服务器 IP。

嗯……问题大概率出在应用层或者端口上。如果直接去修网线,那就白费功夫了。

4.2 基本工具三板斧

工具不用多,会用就行。我常用的就三个。

4.2.1 ping —— 最快的心跳检测

说白了就是发个包看看对方回不回。

  • ping 127.0.0.1 —— 先确认本机协议栈是好的。如果这个都 ping 不通……重装系统吧。
  • ping 网关 IP —— 判断本机到路由器这一段通不通。不通一般就两个原因:网线松了,或者 IP 配错了。
  • ping 远端服务器 IP —— 如果通,说明三层没什么大问题。不通,可能是路由出故障了。
注意: 有些机房禁 ping。我曾经碰到过这种情况,ping 不通心里一凉,结果 traceroute 才发现包已经到对端了。所以,ping 不通别急着下结论。

4.2.2 traceroute —— 看看数据包走到哪了

ping 不通的时候,traceroute 帮你定位断点在哪一跳。

# Linux / MacOS
traceroute -n 10.0.0.100

# Windows
tracert 10.0.0.100

返回的每一行代表一跳。卡在哪一跳,问题基本就在那一跳附近。

我记得有一次排查跨机房访问慢的问题。ping 延时正常,但业务超时。traceroute 一看,中间某一跳延时飙到 200ms。原来是那台老交换机 CPU 满载了。

4.2.3 telnet / nc —— 测端口通不通

三层通不代表端口通。防火墙一拦,啥都白搭。

# 测试 192.168.1.10 的 3306 端口
telnet 192.168.1.10 3306

# 或者用 netcat
nc -zv 192.168.1.10 3306

通则弹出空窗口或返回成功,不通则一直卡住或报错。

4.3 排查清单:按步骤走,少踩坑

我把排查过程整理成了一张清单。按这个顺序来,基本不会漏。

排查步骤 执行操作 可能的结果 / 结论
1. 物理层
  • 检查网线接口灯是否亮
  • 检查交换机端口状态(show interface)
  • 无线的话,检查是否连错了 SSID
灯不亮 -> 换线;端口 err-disable -> 重启端口
2. 链路层
  • arp -a 查看 MAC 对应关系
  • 检查 VLAN 是否匹配
无 ARP 条目 -> VLAN 不对;MAC 地址冲突 -> 查网络环路
3. 网络层
  • 确认 IP、子网掩码、网关配置
  • ping 网关
  • traceroute 目标 IP
网关不通 -> IP 配错;中间断 -> 路由问题
4. 传输层
  • telnet/nc 测试目标端口
  • 检查本机防火墙规则
端口不通 -> 防火墙拦截或服务未启动
5. 应用层
  • nslookup 域名解析
  • curl / wget 测试 HTTP(S)
解析失败 -> DNS 问题;HTTP 返回非 200 -> 应用层故障

核心思路:逐层排查,不要跳步。先通物理,再看三层,最后查应用。

我曾经见过一个新同事,防火墙策略配错了,他愣是去重装了三次系统……就因为跳过了第四步。

4.4 实战场景:换个角度想一想

理论说完了,聊几个我印象比较深的场景。

场景 A:能 ping 通 IP,但打不开网页

原因太多了。DNS 挂了、代理配错了、或者对端 80 端口被防火墙挡住了。

我的排查顺序:

  1. nslookup baidu.com —— 先确认能不能把域名解析成 IP。
  2. telnet 目标IP 80 —— 看看 TCP 端口通不通。
  3. curl -v http://目标IP —— 如果端口通但 curl 卡住,看看是不是返回了 302,或者直接被重定向了。

有一次这么查下来,发现是本地 hosts 文件被人改了……

场景 B:同一个网段,有的机器能上网,有的不能

一般就三种可能:

  • IP 地址冲突了。改个静态 IP 试试。
  • 交换机端口做了 MAC 绑定。看看 MAC 地址有没有注册。
  • 接入交换机的端口被限速或 shutdown 了。

我个人习惯先查 ARP 表。如果某台机器的 MAC 不在表里,大概率 VLAN 配错了,或者端口被隔离了。

场景 C:网络一会儿通一会儿断(间歇性故障)

这种最折磨人。你一去看,它好了;你一走,它又断了。

排查要点:

  • 看日志,看日志,看日志。 系统日志和交换机日志是关键。
  • 检查网线质量。我见过一根被门夹过的网线,接触不良,动一动就断。
  • 检查交换机端口。show interface 看看有没有 CRC 错误、runts 或者 collisions。

还有一次,是电源适配器老化导致的电压不稳,交换机间歇性重启……找了三天。

避坑指南: 不要一上来就怀疑硬件。我曾经连续换了两根网线,还是不行,结果发现是对端交换机端口被关闭了。看日志 + 信息才是正道。

4.5 抓包才是最终武器

前面的工具都失灵了怎么办?

上 tcpdump 或 Wireshark。抓包再看,没有抓包解决不了的问题。

# 抓传输到 10.0.0.100 的包
tcpdump -i eth0 host 10.0.0.100

# 抓特定端口
tcpdump -i eth0 port 80

# 保存成文件,回头用 Wireshark 分析
tcpdump -i eth0 -w capture.pcap

抓包能让你看到“事实”,而不是你“以为”的事实。

我记得有一次排查 DNS 超时问题。业务方说偶尔解析失败,但我查配置、查服务器都正常。最后抓包发现,DNS 请求发了两个,第一个被中间的防火墙丢弃了,第二个过去了,但延时增加了。加了一条 iptables 规则才解决。

4.6 总结一下经验

排查网络连通性,说白了就两个字:拆解。

  • 把大问题拆成小问题(整体断 vs 单个不通)。
  • 把小问题拆成协议层(物理 -> 链路 -> 网络 -> 传输 -> 应用)。
  • 然后用工具一个个验证。

别慌,按步骤来。实在不行就抓包。记住:网络不会说谎,错的往往是配置或错觉。