重传标注在说什么
tcp.analysis.retransmission 是 Wireshark 的分析引擎自动给出的标注,表示这一包的序列号范围与之前已经出现过的内容重复,也就是重传。它不是协议里的字段,而是基于抓包上下文计算出来的结论,可信度取决于抓包是否完整。配合 tcp.analysis.flags 可以把重传、重复确认、零窗口、乱序、丢段等标注一次性筛出来。重传分两类:超时重传说明发送方等了整整一个重传超时,快速重传说明收到了三个重复确认后立即补发。
基本信息
| 重传 | tcp.analysis.retransmission |
|---|---|
| 快速重传 | tcp.analysis.fast_retransmission |
| 重复确认 | tcp.analysis.duplicate_ack |
| 丢段提示 | tcp.analysis.lost_segment |
| 全部异常标注 | tcp.analysis.flags |
| 前提 | 分析结果依赖已经抓到的那部分报文 |
典型使用场景
- 判断链路是否存在丢包:看重传比例,而不是看某一次是否出现
- 区分丢包发生在哪个方向:按客户端侧与服务端侧分别统计再比较
- 定位慢请求:同一条流里大量重传说明数据被反复重发
- 验证网络改造效果:对比改造前后的重传比例与超时次数
- 识别虚假重传:抓包点看到重复报文但实际并非重传造成的重复
常用示例
常用示例
tcp.analysis.retransmission # 全部重传
tcp.analysis.retransmission && tcp.stream == 5 # 只看某条流的重传
tcp.analysis.fast_retransmission # 只看快速重传
tcp.analysis.flags && !tcp.analysis.window_update # 异常里排除窗口更新
tcp.analysis.lost_segment # 检测到丢段的报文
tcp.analysis.retransmission && ip.src == 10.0.0.9 # 只看该主机发出的重传tcp.analysis 常用标注
| 标注 | 含义 | 判读要点 |
|---|---|---|
| retransmission | 序列号范围与之前重复 | 真实重传,注意区分上行与下行方向 |
| fast_retransmission | 收到重复确认后立即重发 | 轻量丢包,链路质量有波动但恢复快 |
| duplicate_ack | 同一确认号反复出现 | 快速重传的前兆,单独出现通常不必紧张 |
| lost_segment | 此处检测到报文段缺失 | 提示少了一段,常由重传或乱序引起 |
| out_of_order | 到达顺序颠倒 | 未必丢包,也可能存在多路径或抓包点重复 |
| window_update | 窗口更新报文 | 正常流量,做异常统计时应当排除 |
| zero_window | 接收窗口为零 | 接收方处理不过来,问题多出在应用侧 |
判读重传要同时看方向与间隔:发送侧重传说明对端没有确认收到,接收侧看到同一段数据出现两次说明对方重发了。配上相对时间戳能直接看出两次之间是否接近一个重传超时。
从流中途开始抓的文件缺少前文,会把正常首包误标成重传。排查重传问题尽量从建连开始抓,或者先把抓包点固定在同一位置。
命令行统计
命令行统计
tshark -r a.pcap -Y 'tcp.analysis.retransmission' -T fields -e frame.time_relative -e ip.src -e ip.dst -e tcp.seq | head -20
tshark -r a.pcap -q -z io,stat,1,'COUNT(tcp.analysis.retransmission)tcp.analysis.retransmission' # 按秒统计重传次数
tshark -r a.pcap -Y 'tcp.analysis.retransmission' | wc -l # 总重传条数判读要点
- 少量重传是公网环境的常态,评估健康度要看比例与趋势而不是单次出现
- 重传集中在某一方向说明该方向链路或中间设备有问题,方向信息比总数更有价值
- 重传同时伴随零窗口提示时,问题多半在接收方处理速度,而不是链路丢包
- 小包与大包重传比例差异明显时,考虑链路上是否存在分片或大包策略问题
- 重传的时间间隔呈现成倍递增,是超时重传的典型特征,说明确认根本没回来
- 同一流里重复确认成群出现而随后补发,说明是对端收到乱序后的快速恢复