很多人排查网络问题时,第一反应是 ping。但 ping 只能说明 ICMP 是否可达,根本不能回答“某个 TCP 端口有没有监听”“连接有没有建立”“数据包有没有真正发出去”“请求有没有返回”这些更关键的问题。

ss 负责看连接状态,lsof 负责把端口和进程对起来,tcpdump 负责直接看包。这三类工具配合起来,才是 Linux 网络排障真正有力量的组合。

会抓包不等于复杂化问题,而是让网络排障终于能看到真实证据。

为什么这一篇重要

如果只靠应用报错和 ping,很多端口级、连接级问题根本看不见。

先把核心问题想清楚

  • ss 更适合观察监听端口和连接状态。
  • lsof 更适合确认某个端口到底被哪个进程占着。
  • tcpdump 更适合在链路层面确认包有没有到、有没有回。

实战里更该关注什么

  • 端口问题先看监听,再看连接状态,再决定要不要抓包。
  • 把抓包当作证据采集手段,而不是最后的绝望手段。
  • 学会从 SYN、ACK、RST 这些基础报文现象里读出问题位置。

常见误区

  • ping 通等同于服务一定可用。
  • 不知道某个端口到底被谁占用。
  • 抓包只看有无流量,不看握手和返回模式。

一个值得自己做的小练习

自己制造一个“主机可达但端口不通”的场景,再制造一个“端口能连但请求超时”的场景,分别用 sslsoftcpdump 观察差异。

小结

网络排障一旦走到端口和连接层,就不能只靠感觉了,必须让连接状态和真实报文出来说话。