首页/网络/抓包与流量分析速查/Wireshark 用 ack_rtt 观察响应时间
Wireshark 技巧75 条

Wireshark 用 ack_rtt 观察响应时间

tcp.analysis.ack_rtt 记录"从发出数据到收到对应确认"的耗时,可作为网络 RTT 的近似值直接统计与过滤。

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 各出一份,能同时看到常态水平与最坏情况。

易错点

  • 把 ack_rtt 当成应用响应时间:它只覆盖传输确认环节,不含服务端排队与处理,二层以上的耗时要看 HTTP、DNS 自己的 time 字段
  • 抓包从会话中途开始:缺少被确认的数据段时该字段为空,用过滤条件筛选会静默漏掉这些包
  • 只看最大值下结论:单个高值多由瞬时排队造成,应看中位数与分布形态

数据来源与参考

  • Wireshark User's Guide(TCP 分析)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌