时间戳口径必须先统一
分析时延、重传与先后顺序时,抓包时间戳的可信度决定了结论是否成立。tcpdump 提供不同粒度的时间格式:绝对时间、相对时间、与首包的间隔,还有纳秒精度选项。单个设备内部的时间差可以只依赖本机时钟,凡是涉及跨设备比对,就必须先确认各设备的时钟偏差在同一量级内,否则很容易把「后发的包」判成先发,得出完全相反的因果结论。
基本信息
| 适用平台 | Linux tcpdump(libpcap 4.99 及以上支持纳秒精度) |
|---|---|
| 常用格式 | -t 不打印、-tt 时间戳、-ttt 相对上一包、-tttt 带日期、-ttttt 相对首包 |
| 精度选项 | --time-stamp-precision=nano 纳秒精度 |
| 校验手段 | chronyc tracking 或 ntpq -p 看各设备时钟偏差 |
| 最可靠方案 | 同一台设备用双网卡同时抓取,天然共享时钟 |
典型使用场景
- 分析握手耗时:用相对时间格式看清每一次交互的间隔
- 跨设备比对丢包:先校时,再对齐时间窗逐包比对
- 排查抖动:纳秒精度下观察同一连接的到达间隔波动
- 长时抓包留档:带日期的绝对时间格式便于与其他日志对齐
- 复盘故障:把抓包时间与应用日志时间放在同一基准上
时间戳选项
时间戳选项
tcpdump -nn -i eth0 -tttt -c 5 port 443 # 日期加时间
tcpdump -nn -i eth0 -ttt -c 5 port 443 # 与上一包的间隔
tcpdump -nn -i eth0 -ttttt -c 5 port 443 # 与首包的间隔
tcpdump -nn -i eth0 --time-stamp-precision=nano -c 5 port 443
tcpdump -nn -i eth0 -tttt -c 5 port 443 -w /tmp/t.pcap # 落盘同样保留时间戳
# 校准各设备时钟:
chronyc tracking 2>/dev/null || ntpq -p时间格式对照
| 选项 | 输出含义 | 适用场景 |
|---|---|---|
| 默认(无选项) | 时分秒小数 | 快速浏览 |
| -t | 不打印时间戳 | 只看内容时减少噪声 |
| -tt | 自纪元起的秒数小数 | 脚本解析 |
| -ttt | 与上一包的间隔 | 看交互节奏与卡顿 |
| -tttt | 带日期的时间 | 与日志对齐、留档 |
| -ttttt | 与首包的间隔 | 看整体时序 |
| 纳秒精度选项 | 微秒升级为纳秒 | 高速链路与抖动分析 |
两端设备时钟差 500 毫秒时,从抓包时间推断谁先发出可能完全错误;需要判断因果时优先在同一台机器上双网卡抓包,或先确认 NTP 偏差在毫秒以内。
默认时间戳来自内核软件时钟,受中断与调度影响存在抖动;对精度敏感的时延分析可改用支持硬件时间戳的抓包方式,并确认网卡驱动支持该能力。