两类重传要分开看
TCP 重传分快速重传与 RTO 超时两种:前者由重复 ACK 触发,说明发生了丢包或乱序,但拥塞窗口里还有数据在途,恢复较快;后者是重传定时器到期后才重发,通常意味着较严重的丢包或对端长时间无响应,对吞吐影响大得多。诊断的关键是把重传按连接和时间窗拆开,而不是只看系统累计计数。
基本信息
| 系统级统计 | netstat -s 的重传段数,或 /proc/net/snmp 的 RetransSegs |
|---|---|
| 单连接观察 | ss -tin 输出里的 retrans、cwnd、rtt |
| 区分依据 | ss -i 中的重传计数与 timer 状态 |
| 采样口径 | 累计值做区间差值,对应故障时段 |
| 配套工具 | nstat 观察差值,tcpdump 抓包核实 |
典型使用场景
- 接口变慢但服务端 CPU 空闲,确认是否由丢包重传引起吞吐下降
- 跨机房调用延迟抖动,区分链路丢包与应用处理慢
- 定位少数问题连接:按对端地址筛选,把重传集中在哪几条连接上看清楚
- 评估链路质量:用重传占比而非绝对次数衡量
- 变更验证:调整 MTU 或拥塞控制算法后对比重传趋势
统计与抽样
统计与抽样
netstat -s | grep -i retrans # 系统级重传计数
ss -tin dst :443 | head -20 # 单连接:retrans、cwnd、rtt、timer
ss -tinn state established | grep -c retrans # 粗略统计有重传的连接数
nstat -az | grep -i retrans # 差值口径的持续观察现象与归因
| 现象 | 含义 | 下一步 |
|---|---|---|
| 快速重传为主且能恢复 | 链路存在丢包或乱序,但带宽仍可用 | 确认丢包位置:本端、链路还是对端 |
| RTO 超时频繁 | 定时器到期才重发,链路质量差或对端无响应 | 检查两端链路计数与设备告警 |
| 重传集中在少数连接 | 这些连接的双向路径存在问题 | 按对端地址过滤后抓包核实 |
| 重传统计抬升但吞吐正常 | 少量随机丢包,被拥塞控制吸收 | 记录基线即可,不必立即处置 |
判断重传是否异常要用占比:重传段数除以总发送段数,或与业务请求量对照。绝对次数高但流量基数很大时,可能只是正常随机丢包。
ss -ti 的 retrans 是累计值,只有用两次采样的差值才能对应到故障时段;单看一个数字无法判断当时是否在丢包。