首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >tcpdump 抓包排障入门:过滤表达式、判断丢包重传与保存给 Wireshark

tcpdump 抓包排障入门:过滤表达式、判断丢包重传与保存给 Wireshark

原创
作者头像
一只特立独行的兔先生
发布于 2026-11-02 15:11:36
发布于 2026-11-02 15:11:36
870
举报

背景

服务间偶发超时、连接被重置、请求发出去没响应,这类问题日志里往往看不到原因。tcpdump 能直接看网卡上的真实报文,是判断“包到底有没有到、谁先断开连接”的最直接办法。本文整理常用的过滤写法和几个典型现象的判读。

一、基本用法

代码语言:bash
复制
# 查看有哪些网卡
tcpdump -D

# 在 eth0 上抓包,不解析主机名和端口名(更快,输出更清晰)
tcpdump -i eth0 -nn

# 任意网卡
tcpdump -i any -nn

常用选项:

  • -nn:不做 DNS 和端口名解析,避免抓包时产生额外的查询流量。
  • -c 100:抓到 100 个包后退出。
  • -s 0:抓取完整报文(新版本默认已是完整长度,低版本需要显式指定)。
  • -w file.pcap:写入文件,用于事后分析。
  • -A 或 -X:以 ASCII 或十六进制显示报文内容,适合查看明文 HTTP。

抓包需要 root 权限,在生产机上要注意流量很大时对性能和磁盘的影响。

二、过滤表达式

先过滤再抓,能显著降低干扰:

代码语言:bash
复制
# 指定主机
tcpdump -i eth0 -nn host 10.0.0.5

# 指定端口
tcpdump -i eth0 -nn port 8080

# 组合条件:来自某主机且目的端口为 3306
tcpdump -i eth0 -nn src host 10.0.0.5 and dst port 3306

# 只看 TCP SYN 包(排查建连问题)
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'

# 只看 RST 包(排查连接被重置)
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-rst != 0'

逻辑运算符是 and、or、not,含括号或位运算的表达式要用单引号包起来,避免被 shell 解释。

三、看懂一行输出

代码语言:bash
复制
12:00:01.123456 IP 10.0.0.5.51234 > 10.0.0.9.8080: Flags [S], seq 100, win 64240, length 0

字段含义:时间、源地址与端口、目的地址与端口、TCP 标志、序号、窗口大小、负载长度。常见标志:

  • [S]:SYN,发起连接。
  • [S.]:SYN+ACK,响应连接。
  • [.]:ACK。
  • [P.]:PSH+ACK,带数据。
  • [F.]:FIN,正常关闭。
  • [R] 或 [R.]:RST,异常中断。

四、典型现象怎么判断

1. 连接超时:只有 SYN,没有 SYN+ACK

客户端反复发送 [S] 而收不到 [S.],说明报文没有被服务端响应,可能原因:服务端没监听该端口且防火墙静默丢弃、安全组或网络策略拦截、路由不通。再在服务端网卡上同时抓包:如果服务端也看不到 SYN,问题在链路中间;如果看到了却不回应,问题在服务端本机。

2. 连接被拒绝:收到 RST

对 SYN 的响应直接是 [R.],通常是目标端口没有进程监听。

3. 连接中途被重置

建立后某一方突然发 [R]。关注是谁先发的:服务端发的,可能是应用主动关闭、超时清理或负载均衡的空闲超时;中间设备发的,可能是防火墙会话超时。结合发 RST 之前的静默时长判断,如果恰好是某个固定数值(如 60 秒、350 秒),多半是某一层的空闲超时。

4. 丢包与重传

同一序号的数据包重复出现,是重传的表现。重传集中出现说明链路上有丢包或对端响应慢。在 Wireshark 中,TCP 分析会直接标出 retransmission 和 duplicate ack,比肉眼看文本更方便。

5. 应用层慢还是网络慢

对比请求发出时间和响应第一个数据包到达时间。网络往返时间可以从 SYN 到 SYN+ACK 的间隔估计;如果往返很快,但请求到响应之间隔了很久,说明时间花在服务端应用处理上。

五、保存抓包文件

代码语言:bash
复制
# 抓取并轮转,避免文件无限增长:每个文件 100MB,最多保留 10 个
tcpdump -i eth0 -nn -s 0 -C 100 -W 10 -w /tmp/cap.pcap port 8080

再把文件下载到本地,用 Wireshark 打开,通过“跟踪 TCP 流”和“专家信息”查看完整会话。

六、注意事项

  1. 加密流量:HTTPS 内容在 tcpdump 里是密文,只能看到连接和握手层面的信息。需要看明文时,在应用侧或代理侧排查。
  2. 敏感数据:抓包文件可能包含密码、令牌和个人信息,妥善保管,用完删除。
  3. 抓包位置:客户端、服务端、网关各抓一份,对照时间能确定报文在哪一跳消失。注意各机器时间要同步。
  4. 网卡卸载特性:开启了 TSO、GRO 等功能时,抓到的报文长度可能大于 MTU,这是正常现象,不代表链路上真的传输了大包。
  5. 性能:在高流量机器上,务必加过滤条件并限制抓包大小和时长。

小结

  1. 用 -nn 和过滤表达式缩小范围。
  2. 通过 SYN、SYN+ACK、RST 判断连接在哪一步失败。
  3. 两端同时抓包,对照确认报文在链路中的哪个位置丢失。
  4. 保存 pcap 文件,用 Wireshark 做深入分析。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 背景
  • 一、基本用法
  • 二、过滤表达式
  • 三、看懂一行输出
  • 四、典型现象怎么判断
    • 1. 连接超时:只有 SYN,没有 SYN+ACK
    • 2. 连接被拒绝:收到 RST
    • 3. 连接中途被重置
    • 4. 丢包与重传
    • 5. 应用层慢还是网络慢
  • 五、保存抓包文件
  • 六、注意事项
  • 小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档