0

0

tcpdump 抓到大量 Dup ACK / Retransmission 但业务日志无超时的根因

冰川箭仙

冰川箭仙

发布时间:2026-01-29 19:19:02

|

200人浏览过

|

来源于php中文网

原创

根本原因是TCP重传与应用层超时分属不同层级,内核重传常在应用感知前完成;业务无超时仅说明系统调用最终返回,不反映中间是否经历重传或乱序。

tcpdump 抓到大量 dup ack / retransmission 但业务日志无超时的根因

为什么 Dup ACK 和 Retransmission 不一定触发业务超时

根本原因是 TCP 重传和应用层超时属于不同层级的机制,且重传常在应用层感知前就完成了。业务日志没报超时,不代表网络没问题;它只说明 read()write() 系统调用最终返回了,哪怕中间经历了重传、乱序、延迟确认等过程。

常见误解是把「TCP 层重传」等同于「应用层请求失败」,但实际中:
- 应用层超时(如 HTTP client 的 timeout=5s)从发起请求那一刻开始计时,而 TCP 重传发生在内核协议,只要重传后数据最终送达,应用读写就能完成
- 内核 TCP 栈默认启用快速重传(tcp_fastretrans)、SACK、时间戳等优化,很多丢包在几十毫秒内就恢复了,远低于应用层超时阈值
- 如果服务端处理快、客户端不校验响应完整性(比如没校验 HTTP Content-Length 或分块边界),即使部分重传导致响应体错乱,也可能被静默接受

如何确认 Dup ACK / Retransmission 是真丢包还是误判

tcpdump 显示大量 Dup ACKRetransmission 可能是真实丢包,也可能是抓包位置不当造成的“假象”。关键看抓包点是否在路径关键节点:

  • 如果在客户端机器抓包,看到自己发的包被重传 → 很可能客户端到服务端之间有丢包(防火墙限速、网卡驱动 bug、交换机 buffer 溢出)
  • 如果在服务端机器抓包,看到客户端重传 → 需结合服务端 netstat -s | grep -i "retran" 确认是否收到原始包:若服务端 TcpExtTCPDupAck 高但 TcpInSegs 正常,说明 Dup ACK 是服务端发出的(即客户端丢响应),不是客户端丢请求
  • 如果在中间设备(如负载均衡器)抓包,看到大量 Dup ACK 但无对应重传包 → 很可能是该设备未开启 SACK 或窗口缩放,导致接收端反复发送重复 ACK,触发发送端误重传

一个快速验证方式:

ss -i src_ip:src_port dst_ip:dst_port

查看当前连接的 cwndssthreshrttretrans 计数。如果 retrans 持续增长但 cwnd 没明显下降,大概率是瞬时拥塞而非持续丢包。

哪些场景下业务完全无感但 tcpdump 异常明显

以下情况会导致 tcpdump 抓到高频重传/Dup ACK,但业务日志干净:

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载
  • 服务端启用了 TCP_NODELAY 但客户端未启用,小包频繁触发 Nagle 算法与 Delayed ACK 协同失效,造成“伪重传”(实际是 ACK 延迟引发的快速重传误触发)
  • 网络路径存在微突发(microburst),交换机队列瞬间打满丢包,但平均带宽正常 → ping 测不出丢包,tcpdump 却能看到局部重传
  • 客户端或服务端 TCP 时间戳(tcp_timestamps)关闭,导致 RTT 估算失真,RTO 设置过小,轻微延迟就被判定为丢包并重传
  • 使用 TLS 1.3 + 0-RTT,首次请求在 handshake 完成前就发出了,若 handshake 包丢失,重传的是 handshake 而非业务数据,业务层只看到连接建立稍慢

下一步排查该盯什么,而不是继续看 tcpdump

tcpdump 是现象入口,不是根因终点。当看到大量 Dup ACK/Retransmission 但业务无异常时,优先检查这些:

  • 确认两端 /proc/sys/net/ipv4/tcp_reordering 是否一致(默认 3)。若一端设为 1,另一端为 6,容易因乱序误判重传
  • 查服务端 netstat -sTcpExtTCPDeliveredTcpOutSegs 的比值:若显著低于 1,说明大量数据被重传后才交付,虽未超时但有效吞吐已受损
  • ethtool -S eth0 查网卡收发队列丢包(rx_missed_errorstx_aborted_errors),比 tcpdump 更接近物理层真相
  • 检查 BPF 过滤器或 eBPF 工具(如 bpftrace -e 'kprobe:tcp_retransmit_skb { printf("retrans %s:%d -> %s:%d\\n", args->sk->__sk_common.skc_rcv_saddr, ntohs(args->sk->__sk_common.skc_num), args->sk->__sk_common.skc_daddr, ntohs(args->sk->__sk_common.skc_dport)); }')定位具体哪个连接、哪个 socket 在反复重传

真正难定位的,往往是那些重传后立刻恢复、不触发 RTO、也不影响单次请求耗时的微抖动 —— 它们不会出现在业务日志里,却在悄悄抬高 P99 延迟、降低连接复用率。这时候,tcpdump 是起点,不是答案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

75

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

286

2023.11.28

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

397

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

927

2023.09.19

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

409

2023.08.14

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

422

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

418

2023.11.14

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.8万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 19.1万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号