首页/网络/抓包与流量分析速查/响应截断现象判读
应用层报文判读71 条

响应截断现象判读

客户端收到的字节数少于 Content-Length 且无后续数据:可能是发送方中断、中间设备重置或抓包被提前停止,三者要分开验证。

现象定义

响应截断指客户端收到的实体字节数少于 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,口径不能照搬。

易错点

  • 只在一侧抓包就断言截断:抓包点自身丢包或提前停止会把工具问题写成网络故障,结论前后必须核对抓包运行状态
  • 把 RST 与 FIN 混为一谈:RST 是异常重置、FIN 是有序关闭,两者指向的排查方向完全不同
  • 长任务用环形缓冲写盘:缓冲覆盖会丢掉尾部帧,抓包文件时长与业务窗口必须对齐
  • 忽略压缩与分块编码:压缩态长度与解压后长度不同,判断截断要以传输层字节为准

数据来源与参考

  • Wireshark User's Guide
  • RFC 9112
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌