ack_rtt 是什么
tcp.analysis.ack_rtt 是 Wireshark TCP 分析引擎算出的往返时延字段:记录「发出某个数据段」到「收到确认该数据段的 ACK」之间经过的秒数。中间设备与操作系统协议栈不会直接暴露 RTT,抓包后由分析引擎根据 seq/ack 的对应关系反推,因此它是排障中最常见的时延量化依据。
基本信息
| 适用工具 | Wireshark 3.x / 4.x 与 tshark |
|---|---|
| 字段名 | tcp.analysis.ack_rtt,单位秒 |
| 查看位置 | 报文详情里 TCP 协议树下的 [TCP Analysis] 段 |
| 取值前提 | 同一抓包文件内能找到被该 ACK 确认的数据段 |
| 可否统计 | 可,tshark 的 io,stat 支持 AVG/MAX 聚合 |
典型使用场景
- 区分「网络慢」与「服务慢」:RTT 正常时延迟多半出在服务端处理或排队
- 批量筛出高时延会话:过滤 ack_rtt > 0.2 快速定位跨地域链路
- 验证链路或运营商切换效果:改造前后取同接口的平均 RTT 对比
- 配合 TCP Stream Graphs 的 RTT 图观察时延随时间漂移
过滤与统计示例
过滤与统计示例
tcp.analysis.ack_rtt > 0.2 # 只看 RTT 超过 200ms 的确认包
ip.addr == 10.0.0.9 && tcp.analysis.ack_rtt # 限定与某台主机的交互
tcp.analysis.ack_rtt && tcp.stream == 3 # 只看某条流
tshark -r a.pcap -Y 'tcp.analysis.ack_rtt > 0.1' -T fields -e ip.dst -e tcp.analysis.ack_rtt | head
tshark -r a.pcap -q -z io,stat,0,"AVG(tcp.analysis.ack_rtt)tcp.analysis.ack_rtt"数值怎么读
| 观测值 | 含义 | 判读 |
|---|---|---|
| 小于 0.01 秒 | 同机房或同城互通 | 正常水平 |
| 0.02 到 0.1 秒 | 跨地域公网常见 | 结合业务 SLA 判断是否可接受 |
| 大于 0.2 秒 | 明显偏高 | 先排除延迟确认与抓包点位置再下结论 |
| 随时间递增 | 队列开始堆积 | 结合吞吐曲线看是否伴随丢包 |
延迟确认会让数值最多抬高约 200 毫秒,判读时看整体分布量级,不要盯单个最大值。
抓包点离服务端越远,看到的 RTT 越大;两端同时抓包可以分别得出两个方向的时延差异。
进阶判读要点
- 先取握手阶段的 RTT 作为基线,再比较数据阶段的 ack_rtt,两者差距说明路径队列是否稳定
- 同一会话内 ack_rtt 呈阶梯上升,通常意味着发送速率已接近或超过链路承载能力
- 高时延链路上窗口不足会直接限制吞吐,窗口除以 RTT 就是可达吞吐上限
- 把 ack_rtt 与重传标记叠加使用,可区分「时延大但不丢包」与「时延大且已经丢包」两种问题
- 换设备或换线路后重抓一份样本,用中位数对比比看峰值更有说服力
tshark 的 io,stat 支持自定义聚合,用 AVG 与 MAX 各出一份,能同时看到常态水平与最坏情况。