首页/网络/网络排障速查/重复 ACK 与快速重传判读

重复 ACK 与快速重传判读

重复 ACK 表示接收方缺了一段数据在催发端重发:连续 3 个 dup ACK 触发快速重传,是判断「丢在哪里」的经典依据。

网络排障速查网络更新于 2026-10-13

重复 ACK 说明了什么

接收方发现数据有空洞(收到乱序或缺失的段)时,会用相同的 ACK 号反复催促发送方。发送方收到 3 个连续重复 ACK 就立刻重传被怀疑丢失的段,不必等到重传超时,这就是快速重传。因此重复 ACK 是判断「丢包发生在哪一段、是谁先发现的」的经典依据:重复 ACK 里的 ACK 号就是接收方期望的下一个字节,缺口就在它之前。

基本信息

适用平台Wireshark / tshark 分析 pcap
关键过滤器tcp.analysis.duplicate_ack、tcp.analysis.duplicate_ack_num >= 3
阈值依据RFC 5681:3 个重复 ACK 触发快速重传与快速恢复
判读要素ACK 号、重复次数、是否随后出现重传帧
配套指标tcp.analysis.fast_retransmission、tcp.analysis.retransmission

典型使用场景

  • 判断丢包方向:接收方发 dup ACK,说明到达接收侧的数据有缺口
  • 区分超时重传与快速重传:前者前无 dup ACK,后者前有 3 个以上
  • 评估链路乱序程度:乱序会制造 dup ACK 但通常能自愈
  • 与 Wireshark 专家信息对照:快速定位重传集中发生在哪条流
  • 复盘应用层卡顿:确认是丢包补偿还是接收端处理慢

定位与分析

定位与分析
# 所有重复 ACK
tcp.analysis.duplicate_ack
# 达到快速重传阈值的那部分
tcp.analysis.duplicate_ack_num >= 3
# 指定方向的重复 ACK
ip.src == 10.0.0.20 && tcp.analysis.duplicate_ack
# 只看不带数据的纯 ACK
tcp.analysis.duplicate_ack && tcp.len == 0
# 配套观察重传类型
tcp.analysis.fast_retransmission || tcp.analysis.retransmission

视角与判读

视角现象结论
接收方相同 ACK 号反复出现数据有空洞,正在催促重发
发送方收到 3 个重复 ACK 后重传快速重传,说明不是超时导致
重复 ACK 数 < 3零星出现可能是轻微乱序,未达重传阈值
随后出现 RTO 重传前面无 dup ACK属于超时重传,链路问题更严重
重复 ACK 后自愈缺口被后续报文补齐属乱序而非真丢包
重复 ACK 也可能由链路乱序触发(后发的包先到):与真实丢包的区别在于乱序最终会自愈,且通常不伴随重传超时。

易错点

  • 把重复 ACK 直接等同于丢包:链路乱序同样会产生 dup ACK,不加区分会把乱序当丢包处理
  • 只看重传帧不看前置的重复 ACK:无法判断是快速重传还是超时重传,两者的根因完全不同
  • 忽略重复次数:不足 3 个的 dup ACK 不会触发快速重传,据此断言丢包不成立
  • 孤立看单条流:应结合专家信息看重传是否集中在某条流或某个方向,否则定位不到瓶颈点

数据来源与参考

  • RFC 5681:快速重传与快速恢复算法
  • Wireshark 文档:tcp.analysis.duplicate_ack

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌