tcpdump需配合高精度时间戳(-ttt/-tttt)、针对性过滤(大包、TCP数据段、业务端口)及离线统计分析(10ms窗口计数、尖峰识别),才能准确识别微突发;须排除工具假象,结合网卡与交换机指标验证。

tcpdump 本身不直接“记录突发流量特征”,而是捕获原始数据包并附带高精度时间戳,后续通过分析包间间隔、速率分布和协议行为,才能识别微突发(microburst)等瞬时流量特征。关键在于抓包配置合理、时间精度足够、过滤聚焦,并配合离线统计分析。
确保时间戳精度达到微秒级
微突发持续常在毫秒甚至微秒量级,普通时间戳无法分辨。必须启用 tcpdump 的高精度时间选项:
- -ttt:显示每个包相对于前一个包的增量时间(单位为秒,含微秒小数),便于快速观察包间隔突变
- -tttt:显示绝对时间(格式为年-月-日 小时:分钟:秒.微秒),适合与系统日志或监控指标对齐
- 避免仅用 -t 或默认时间格式,它们会丢失关键精度
聚焦抓取易触发缓冲区溢出的流量类型
不是所有突发都影响交换机——只有短时高密度、大包长、无流控的流量才易造成微突发丢包。建议针对性过滤:
- 只抓 TCP 数据段(排除 ACK/SYN 等控制包干扰):
tcp[tcpflags] & tcp-push != 0 or tcp[tcpflags] & tcp-ack == 0 and tcp[12:1] & 0xf0 > 0 - 限制包长(如 ≥ 1200 字节),避开小包噪声:
greater 1200 - 按业务端口聚焦(如数据中心常用 RDMA、RoCE、iSCSI 流量):
port 4791 or port 50000 - 避免 -s 截断:务必加 -s 0,否则无法准确判断包长和负载特征
用离线方式量化突发强度与持续时间
实时输出难以发现微突发,需导出后做时间序列分析:
- 提取微秒级时间戳:
tcpdump -r microburst.pcap -ttt -n | awk '{print $1}' > intervals.txt - 计算每 10ms 窗口内包数量(典型交换机缓存响应粒度):
awk '{t=int($1*100); c[t]++} END{for (i in c) print i, c[i]}' intervals.txt | sort -n - 识别尖峰:若某 10ms 窗口包数超均值 5 倍且持续 ≤ 3 个窗口,即为典型微突发
- 结合 ifconfig 查看 tx_dropped 数值变化,确认是否与尖峰时段吻合
区分真实微突发与工具假象
某些现象看似突发,实为 tcpdump 自身瓶颈或系统调度导致:
- 若 -w 写入磁盘慢(如机械盘 + 高速流量),会出现“伪突发”——实际是写入延迟堆积后集中 flush
- 使用 -U(packet-buffered)可缓解,但不能替代高速存储
- 检查 CPU 使用率及 softirq 负载(
cat /proc/net/softnet_stat),若 drop 列增长,说明内核收包队列已溢出,此时 tcpdump 抓到的已是残缺视图 - 真正微突发应同时体现在网卡计数器(ethtool -S)、交换机 buffer utilization 和 tcpdump 包间隔上

















