TCP 分析标注在做什么
分析工具会在解析每条 TCP 会话时自动标注异常:重传、快速重传、乱序、重复确认、丢段、窗口更新、零窗口等,这些标注统一挂在 tcp.analysis 字段下。用总标注字段可以一次筛出所有异常,再用具体子字段细分类型。要记住它们是启发式判断,依赖抓包文件的完整性:从流中途开始抓的文件缺少前文,标注可能出现偏差,最终结论仍要回到序列号与确认号上核对。
基本信息
| 总标注 | tcp.analysis.flags |
|---|---|
| 重传类 | 重传与快速重传两个子字段 |
| 乱序与丢段 | 乱序与丢段提示 |
| 流量控制类 | 窗口更新与零窗口 |
| 可信度 | 依赖抓包完整性,属于启发式结果 |
典型使用场景
- 快速掌握一份文件的传输质量:先看总标注的数量级
- 区分异常类型:是重传多、还是乱序多、还是窗口受限
- 核对应用侧观测:把标注与应用日志的超时时间对照
- 评估链路改造效果:对比改造前后各类标注的数量
- 逐条流分析:锁定单条流后查看它包含哪些标注
常用示例
常用示例
tcp.analysis.flags # 全部异常标注
tcp.analysis.retransmission # 重传
tcp.analysis.fast_retransmission # 快速重传
tcp.analysis.duplicate_ack # 重复确认
tcp.analysis.out_of_order # 乱序
tcp.analysis.lost_segment # 丢段提示
tcp.analysis.zero_window # 零窗口
tcp.analysis.flags && !tcp.analysis.window_update # 排除窗口更新后的异常标注含义与可信度
| 标注 | 含义 | 判读注意 |
|---|---|---|
| 重传 | 序列号范围重复出现 | 区分发送侧与接收侧视角 |
| 快速重传 | 重复确认后立即补发 | 轻量丢包,恢复较快 |
| 重复确认 | 同一确认号反复出现 | 乱序或丢包的前兆信号 |
| 乱序 | 到达顺序颠倒 | 未必丢包,多路径与抓包点重复也会出现 |
| 丢段 | 检测到缺失的报文段 | 常与重传或乱序同时出现 |
| 零窗口 | 接收窗口为零 | 指向接收方处理能力,多与应用有关 |
| 窗口更新 | 通知新窗口 | 正常流量,统计异常时应排除 |
标注集中出现在少数几条流时,问题与那几个对端或路径相关;均匀分布在大量流上时,更可能是链路整体质量或抓包点能力问题。
从流中途开始抓的文件缺少前文,正常报文会被误标成重传。做异常统计前,尽量选择从建连开始记录的抓包文件。
统计与核对
统计与核对
tshark -r a.pcap -Y 'tcp.analysis.flags' | wc -l # 异常报文总数
tshark -r a.pcap -Y 'tcp.analysis.retransmission' -T fields -e tcp.stream | sort | uniq -c | sort -rn | head # 异常集中在哪些流
tshark -r a.pcap -q -z io,stat,1,'COUNT(tcp.analysis.retransmission)tcp.analysis.retransmission' | head -15 # 按秒趋势判读要点
- 先看类型分布再看数量,集中在一类时排查方向更明确
- 异常数量要与文件时长和会话数一起看,绝对值没有可比性
- 乱序严格来说不等于丢包,需要结合确认号推进情况判断
- 零窗口提示出现时优先查接收侧应用,而不是链路