TCP 重传追踪
实时打印发生重传的连接:发起进程、源目的地址与连接状态。内核的重传计数只能告诉你「发生了多少次」,这个工具能进一步指出「谁在重传、对端是谁、在哪个状态重传」。应用偶发超时、连接质量参差的问题,多数都要靠它落到具体对端上。
基本信息
| 适用平台 | Linux,需要内核 eBPF 支持与较高权限 |
|---|---|
| 输出内容 | 时间、进程、源目地址与连接状态 |
| 配合指标 | 系统级重传计数与连接级重传次数 |
| 输出量 | 与重传频率成正比 |
| 使用建议 | 先看总量级,再点名具体连接 |
典型使用场景
- 应用偶发超时,确认是否伴随重传。
- 判断重传集中在少数对端还是普遍存在。
- 网络链路或参数调整后验证效果。
- 区分偶发重传与持续重传,避免把正常行为当故障。
- 与连接级重传计数对照,确认采样口径一致。
留档与归一
留档与归一
tcpretrans-bpfcc # 实时打印重传事件
tcpretrans-bpfcc -t # 带时间戳,便于与日志对齐
timeout 60 tcpretrans-bpfcc > retrans.log # 限时留档
head -3 retrans.log # 先确认列序,再做字段统计
nstat -az TcpRetransSegs TcpOutSegs # 计算重传率基线
ss -ti state established | grep -c retrans # 连接级重传计数
awk '{print $6}' retrans.log | sort | uniq -c | sort -rn | head # 按目的地址统计连接状态与含义
| 状态 | 含义 | 排查方向 |
|---|---|---|
| 已建立状态重传 | 数据传输阶段丢包或超时 | 链路质量、拥塞与中间设备 |
| 握手阶段重传 | 建连困难 | 对端回包慢或链路丢包 |
| 关闭阶段重传 | 结束过程异常 | 对端提前消失或策略拦截 |
判断严重程度要用重传率而不是绝对次数:绝对次数随流量增长而增长,只有按发送总量归一后才能与其它时间或其它机器比较。
重传与丢包不是同一件事:重传说明数据最终被重新发送过,链路丢包计数只反映被丢弃的报文。两者对不上时,先确认采样窗口与统计口径是否一致,再判断链路质量。
高重传量下输出会持续刷屏,可能拖慢排查并影响终端;需要长时间观察时重定向到文件并限制时长,事后分析。