You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从解密后的QUIC pcap文件被动计算ACK包的RTT?

被动计算QUIC协议ACK包RTT的方法

核心逻辑

QUIC的包编号按包编号空间(初始化空间、握手空间、应用数据空间)独立维护,并非全局统一序列。因此计算ACK的RTT时,需先匹配ACK帧所属的编号空间,再定位对应空间内被确认的数据包,最终计算时间差。

具体操作步骤

  • 第一步:识别ACK帧及所属编号空间
    在解密后的pcap中,筛选出包含ACK帧的QUIC包(Wireshark中可通过quic.frame_type == 0x02过滤),同时记录该包的quic.packet_number_space字段值——ACK帧仅会确认同一编号空间内的数据包。

  • 第二步:定位被确认的最大编号数据包
    提取ACK帧中的quic.ack.largest_acknowledged值,在反向流量中(比如服务器端收到的ACK,对应客户端此前发送的数据包),筛选出相同编号空间且包编号等于该最大确认值的数据包。

    注:同一编号空间内的QUIC包编号是单调递增的,不会出现重复编号。

  • 第三步:计算RTT
    用ACK帧所在数据包的捕获时间,减去被确认数据包的捕获时间,所得差值即为该ACK对应的RTT。

工具层面的实现技巧

  • Wireshark手动分析

    1. 过滤出所有ACK帧:quic.frame_type == 0x02
    2. 选中目标ACK包,查看quic.packet_number_space和quic.ack.largest_acknowledged参数
    3. 用过滤器反向查找对应数据包:quic.packet_number_space == [对应空间值] && quic.packet_number == [最大确认编号]
    4. 对比两个包的frame.time_epoch字段计算时间差
  • tshark批量处理
    先导出关键字段到文本,再用脚本关联计算:

    # 导出包时间、编号空间、包编号、帧类型字段
    tshark -r your_decrypted.pcapng -T fields -e frame.time_epoch -e quic.packet_number_space -e quic.packet_number -e quic.frame_type > quic_rtt_data.txt
    

    编写Python/Shell脚本遍历文本,对每条ACK记录匹配对应编号空间的目标数据包,自动计算RTT。

注意事项

  • 必须确保pcap已完全解密,否则无法正确解析QUIC帧和包编号字段
  • 针对批量ACK(确认多个包),通常取最大确认编号对应的数据包计算RTT,这是QUIC标准的RTT采样方式
  • 若存在丢包或重传,需排除重传包干扰,仅匹配首次发送的数据包

内容的提问来源于stack exchange,提问作者Ankit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:52:08