在真正的服务器排障现场,图形界面往往用不上,命令行工具才是第一手的武器。这篇文章会沿着一条相对完整的网络故障排查链路,对 TCPdump 常用命令、过滤表达式以及典型数据包表现进行系统梳理。希望能帮你从“会敲几行抓包命令”进阶到“根据真实数据包,准确判断问题发生在 DNS、网络传输、TCP 建连、防火墙策略还是应用层”。
⚠️ 重要提醒:抓包工具只能用于自有资产、实验环境或者已经获得明确授权的网络。抓包文件可能包含业务地址、请求内容等敏感信息,在保存、传输和分析过程中,务必做好访问权限控制与数据保护。

真正高效的排障流程,通常是先用 TCPdump 在服务器上抓取一手流量、保存成 .pcap 文件,然后再交给 Wireshark 进行深度可视化分析。能在现场抓到真实数据包,才是排障的第一步。 抓包时建议从一开始就带上 -i any 监听所有接口,配合 -nn 避免域名和端口名解析,从而提高抓包速度和输出可读性。当然,这一切的前提是:你只在自有或授权的网络中进行操作。

看懂 TCP 建连阶段的包是排障的基本功。
- 正常三次握手:客户端 SYN → 服务器 SYN, ACK → 客户端 ACK,连接建立成功。
- SYN 重传:SYN 发出去后一直没回应,客户端会多次重传。常见原因包括链路不通、目标端口未开放、被防火墙丢弃或网络丢包严重。
- RST 重置:在连接建立阶段收到 RST,通常表示目标拒绝连接、端口未监听或中间设备主动重置连接;如果在已建立连接后收到 RST,则可能是应用崩溃或策略干预。
记住:重传不等于攻击,RST 也不一定就是故障,可能只是对端的策略行为。抓包的核心价值不在于“有没有包”,而在于看清连接建立过程中到底发生了什么。

先掌握最基础的抓包命令,做到“抓得到、看得懂、留得住”。
tcpdump -i eth0 # 在 eth0 接口上抓包
tcpdump -i any # 监听所有接口
tcpdump -nn # 不解析主机名和端口号
tcpdump -c 20 # 抓到20个包后自动停止
tcpdump -w capture.pcap # 将原始流量写入 pcap 文件
tcpdump -r capture.pcap # 读取并查看 pcap 文件
新手建议:
- 条件允许时,先加
-nn,信息更直接;
- 用
-c 控制抓包数量,避免海量输出;
- 需要复盘的时刻,一定记得
-w 保存文件。

把现象、抓包表现和可能原因对应起来,排障速度会成倍提升。
- DNS 解析异常:域名访问失败,抓包看不到 53 端口请求,或请求发出后毫无回应 → DNS 配置错误、上游 DNS 不可达或链路异常。
- 端口不通:IP 可达但特定端口不通,抓包看到持续 SYN 重传,或直接收到 RST → 端口未监听、防火墙/ACL 丢弃、目标服务异常。
- 应用响应慢:页面能打开但明显卡顿,握手正常但数据段往返时间很长、重传增多 → 链路抖动、服务器负载高、应用处理逻辑慢。
- 疑似中间设备拦截:同一服务走不同路径结果不同,请求发出后无回包或中途被重置 → 网关策略、防火墙、ACL、路径差异。
在实际运维排障中,如果能将上述抓包表现与业务现象快速对照,定位效率会非常高。查问题的时候别忘了配合精确过滤条件,减少干扰。

盲目抓包往往事倍功半,按链路层层排查才更高效。推荐这样一条路径:
- 明确现象:打不开?慢?偶发?
- 检查 DNS:能否解析到正确的 IP?
- 检查链路连通性:本机 → 网关 → 目标是否可达?
- 检查目标端口/服务:请求是否真正到达了服务端口?
- 分析 TCP 握手与重传:是否成功建立连接?有无超时、RST?
- 观察应用层响应:服务是否返回了正确结果?
TCPdump 在哪一步最有用?当你要证实“真实流量有没有到达”以及“到达后服务器做了什么”的时候,它的价值最大。

一旦接口流量较大,不过滤的抓包很快就会被无用的包淹没。常用过滤关键字:host(主机地址)、src(源地址)、dst(目的地址)、port(端口号)、tcp、udp、icmp、and、or、not。
几个立即可用的示例:
tcpdump host 10.0.0.1 # 只看和 10.0.0.1 相关的流量
tcpdump src host 192.168.1.10 # 只看源地址为 192.168.1.10 的包
tcpdump dst port 443 # 只看发往 443 端口的流量
tcpdump tcp # 只看 TCP 流量
tcpdump udp port 53 # 只看 DNS 的 UDP 流量
tcpdump 'tcp port 443 and host 192.168.1.10' # 同时限定协议、端口和主机
当表达式包含特殊字符或较复杂时,建议用单引号把条件引起来,既能避免 shell 误解释,也让逻辑更清晰。

这两个工具不是“谁替代谁”的关系,而是前后端配合:TCPdump 负责在无图形环境的服务器上贴近现场抓包,Wireshark 负责在图形界面中对 .pcap 文件深度分析。 真正的差距在于,TCPdump 能让你捕捉到发生问题的瞬间,而 Wireshark 能让你把那一瞬间放大、解析得明明白白。

排障流程应当形成闭环:
- 先明确问题现象(用户反馈什么?何时发生?影响范围?);
- 选对接口和过滤条件,聚焦有效流量;
- 在问题复现时用 TCPdump 抓取现场,加上
-nn;
- 用
-w 保存为 .pcap 文件,记录时间和场景;
- 在 Wireshark 中跟踪 TCP 流、统计数据,定位根因。
新手最容易踩的四个坑:
- 不加过滤条件,抓到的包太多,反而淹没问题;
- 忘记
-nn,输出杂乱不易读;
- 抓完不保存,事后无法复盘;
- 在未授权的环境乱抓,踩到合规红线。
真正的大神,不是命令背得多,而是能用抓包快速还原问题现场。
在 云栈社区 的技术讨论中,抓包分析一直是网络工程师和运维人员最扎实的基本功之一。把 TCPdump 从一个“命令表”内化成自己的排障方法论,你在面对复杂问题时也会从容得多。
|