现象定义
响应截断指客户端收到的实体字节数少于 Content-Length 声明值,或分块传输没有出现结尾的 0 块,且此后该流再无数据。它有两个来源:一是真实发生(发送方进程中断、中间设备重置连接、上游超时切断),二是观测假象(抓包提前停止、环形缓冲覆盖尾部帧、磁盘写满后静默停写)。先把这两类分开再谈归因,否则容易把采集工具的问题当成网络故障。
基本信息
| 适用平台 | Wireshark 4.x / tshark,Linux 与 Windows 通用 |
|---|---|
| 关注字段 | tcp.len、http.content_length、http.response.code |
| 判定线索 | 流末尾是 RST 还是 FIN;抓包会话是否仍在运行 |
| 前置条件 | 至少一侧完整抓包,两端对照结论最稳 |
典型使用场景
- 下载到一半失败的投诉,需要在网络层确认实际收到了多少字节
- 接口侧报 JSON 解析失败,怀疑响应体不完整
- 大文件传输周期性中断,判断是链路重置还是服务端主动关闭
- 验证网关或代理是否对响应长度做了限制或改写
- 排查 CDN 回源中断类故障,区分边缘节点截断与源站中断
- 为应用日志里的 EOF 报错找到网络侧的对应证据
核对步骤
核对步骤
tcp.stream == N # 先按五元组过滤再 Follow 流
tcp.flags.reset == 1 # 末尾出现 RST 说明有主动重置方
tcp.flags.fin == 1 # 末尾为 FIN 说明是正常关闭但数据不足
# 逐帧累加 tcp.len 与 Content-Length 声明值比较
# 服务端侧同流抓包:若服务端完整,则问题在路径或对端读取
# 核验抓包会话:未停止、未覆盖的抓包才能作为证据画面逐项读法
| 观察项 | 含义 | 正常与异常 |
|---|---|---|
| tcp.len 累加值 | 本端实际收到的实体字节数 | 等于声明长度为正常,明显偏小即截断 |
| 末尾帧为 RST | 连接被强制重置 | 出现即存在主动中断方,需定位发送者 |
| 末尾帧为 FIN | 四次挥手正常关闭 | 数据仍不足说明发送方提前关闭 |
| 之后无后续数据 | 该流再无帧 | 需与抓包停止时间点核对再下结论 |
无线环境或高丢包链路也会呈现「看起来截断」:TCP 仍在重传时片段未必全部到达,先看链路质量再下应用层结论。
HTTP/2 与 HTTP/3 没有 HTTP/1.1 那样的 Content-Length 完整性语义,流级结束要看 END_STREAM 或 RST_STREAM,口径不能照搬。