什么是抓包文件离线分析
排障时的正确分工是:线上只负责采集,尽可能小地影响业务;分析放到离线,用 tshark 与 capinfos 这类工具慢慢统计与过滤。离线分析的好处是可以反复回看、按条件切片、统计重传与响应时间分布。抓包本身要注意文件轮转与磁盘保护,否则一次长时间抓取可能把磁盘写满,把网络问题变成磁盘问题。
基本信息
| 采集 | tcpdump -i <if> -s 0 -C <MB> -W <数量> -w <文件> '<过滤表达式>' |
|---|---|
| 轮转 | -C 按 MB 切分,-W 限定保留文件数 |
| 离线统计 | tshark -r <文件> -q -z io,stat,<间隔> |
| 过滤分析 | tshark -r <文件> -Y '<显示过滤器>' |
| 文件信息 | capinfos <文件> |
| 注意 | 抓包点的位置会影响时序判断 |
典型使用场景
- 重传与丢包定位:统计重传率并下钻到具体连接
- 响应时间分析:按流统计请求与响应的间隔分布
- 协议行为确认:核对握手、选项与状态机是否符合预期
- 跨团队协作:把抓包文件交给对端或网络团队复现问题
- 事后复盘:故障已恢复但仍需还原当时的现场
采集与离线分析
采集与离线分析
# 线上采集:抓 8080 端口,按 100MB 轮转,最多留 5 个文件
tcpdump -i eth0 -s 0 -C 100 -W 5 -w /var/tmp/cap.pcap 'port 8080'
# 离线:先看文件概况(时间跨度、包数、是否有截断)
capinfos cap.pcap
# 每秒 IO 统计,定位流量与丢包的时间点
tshark -r cap.pcap -q -z io,stat,1
tshark -r cap.pcap -Y 'tcp.analysis.retransmission' | head
tshark -r cap.pcap -Y 'tcp.port==8080 && tcp.flags.reset==1' | head常见分析视角
| 关注点 | 过滤/统计方式 | 用途 |
|---|---|---|
| 重传 | tcp.analysis.retransmission | 判断链路质量与丢包方向 |
| 重复确认 | tcp.analysis.duplicate_ack | 配合重传区分乱序与丢包 |
| 连接重置 | tcp.flags.reset==1 | 定位被中断的连接来源 |
| 响应时间 | io,stat 或 TCP 流统计 | 评估服务端处理与网络耗时占比 |
| 窗口变化 | tcp.window_size_value | 确认接收方是否在缩窗 |
网页与图像类流量会显著放大文件体积,采集时用精确过滤表达式限定端口或主机,能把同样的磁盘开销换成更长的时间覆盖。
在业务高峰无限制抓取会把磁盘写满;同时抓包点靠近主机的时刻不可靠(驱动 offload 会推迟时间戳),分析重传方向时要留意这一限制。