tcpdump不直接测性能,但能定位协议栈及之后环节的性能损耗,如重传、乱序、ack延迟等;需结合网卡指标、内核状态与时间戳分析,聚焦关键字段过滤,并在问题复现时精准抓包。

tcpdump 不是直接测性能的工具,但它能帮你定位性能损耗发生的环节和原因。关键在于结合网络收包全链路理解抓到的数据——从网卡进包、DMA搬运、NAPI软中断处理、协议栈解析,到 socket 接收队列和应用读取。损耗可能出现在任一环节,而 tcpdump 捕获的是已成功进入内核协议栈的数据包,所以它主要反映“协议栈层面及之后”的问题,比如重传、乱序、ACK延迟、窗口收缩等。
明确抓包位置与时机
性能损耗往往具有瞬时性或周期性,盲目抓包容易错过关键窗口。建议:
- 先用 netstat -s | grep -i "retransmit\|outoforder" 或 ss -i 快速查看是否有明显重传或 RTT 异常
- 确认业务高峰期或问题复现时刻再启动抓包,避免长时捕获导致磁盘满或性能干扰
- 优先指定网卡(如 -i eth0),避免 -i any 引入虚拟设备或 lo 流量干扰分析
- 使用 -s 1500 截断包长(足够覆盖典型 TCP/IP 头部),减少 I/O 和文件体积
聚焦性能相关字段的过滤与观察
不看全量包,只盯关键指标能大幅提升分析效率:
- 查重传:tcpdump -r capture.pcap 'tcp[tcpflags] & tcp-rst == 0 and (tcp[tcpflags] & tcp-ack != 0 and tcp[tcpflags] & tcp-syn == 0)' | awk '{print $1,$2,$3,$4,$5,$6,$7}' | sort | uniq -c | sort -nr | head -10(配合 Wireshark 的 tcp.analysis.retransmission 更直观)
- 查零窗口通告:tcpdump -r capture.pcap 'tcp[20:2] == 0'(第20字节起为窗口大小字段,2字节为0表示接收方窗口关闭)
- 查大延迟 ACK:tshark -r capture.pcap -Y "tcp.analysis.ack_rtt > 100" -T fields -e frame.time_epoch -e ip.src -e tcp.srcport -e ip.dst -e tcp.dstport -e tcp.analysis.ack_rtt | sort -k6 -n(需 tshark 支持,或用 Wireshark 统计→TCP流图)
- 查 SACK 块缺失或重复:tcpdump -r capture.pcap 'tcp[tcpflags] & tcp-push != 0' | grep -A2 -B2 "sack"(配合 Wireshark 过滤 tcp.options.sack)
关联内核与网卡指标交叉验证
tcpdump 看到的是“协议栈视角”,必须对照底层指标才能判断损耗源头:
- 对比 ethtool -S eth0 | grep -E "(drop|rx_|tx_|overrun)" 和 netstat -i 中 RX-DRP/RX-OVR:若网卡层已有大量 RX-OVR(环形缓冲区溢出),说明丢包发生在 DMA 之前,tcpdump 根本抓不到这些包——此时优化方向是调大 ring buffer(ethtool -G eth0 rx 4096)或启用 RPS/RFS
- 检查 cat /proc/net/snmp | grep -A1 Tcp 中 TCPSegsRetrans 与 tcpdump 统计是否匹配,不一致说明部分重传未被完整捕获(如 SYN 重传可能被 -i eth0 漏掉)
- 观察 ss -i 输出中的 rtt、qloss(套接字队列丢包)、cwnd(拥塞窗口)值,与抓包中序列号推进节奏比对,可判断是网络层拥塞还是应用读取慢导致接收队列堆积
用时间戳定位处理延迟节点
tcpdump 默认时间戳精度为微秒级(-tttt 可看完整时间),配合内核日志能定位软中断或协议栈处理延迟:
- 加 -ttt 抓包,看相邻数据包时间差是否突增(如从 0.1ms 跳到 50ms),提示 NAPI 轮询或软中断被抢占
- 在抓包同时运行 perf record -e irq:softirq_entry -g -a sleep 30,然后 perf report 查看 net_rx_action 占用 CPU 情况
- 若发现大量包在某个时间点后集中出现(burst),但应用 recv() 调用间隔很长,说明 socket 接收队列有积压,需检查应用是否及时 read() 或调整 net.core.rmem_max









