TCP 流分析82 条

TCP 段与报文重组

TCP 把应用数据切成段发送,抓包看到的是段;Wireshark 会尝试重组(Preferences → Protocols → TCP → Allow subdissector reassembly)供上层解析。

TCP 段与报文重组

TCP 把应用数据切分成报文段发送,抓包看到的是一段一段的报文,而 Wireshark 会尝试把它们重新拼成完整的应用层消息供上层解析。重组开关在 TCP 协议首选项里,关闭之后应用层解析可能直接失败,长响应体也会显示为零散的片段。

基本信息

适用平台Wireshark(TCP 协议首选项中的重组开关)
相关设置允许下层协议重组,控制按流拼接的行为
显示表现重组成功的报文会带上重组标记
物理事实文件里保存的仍然是原始报文段

典型使用场景

  • 看懂长响应:大响应会拆成多个段,重组后才能看到完整内容
  • 排查解析失败:应用层字段缺失时先确认重组是否开启
  • 分析分段行为:关注段大小是否接近上限
  • 控制内存占用:超长会话的重组会消耗大量内存
  • 丢包场景判断:缺段会导致重组不完整,需先解决底层丢包

观察与设置

观察与设置
# 长响应会显示为多个报文段
# 上层的响应体会带重组标记
# 关闭重组后应用层解析可能失败
# 文件里保存的仍是原始报文段

常见现象

现象含义处理方向
应用层字段缺失重组未开启或不完整确认重组设置与丢包情况
提示无法完整重组超出内存限制或存在缺段缩小分析范围或先解决丢包
响应体显示为多个片段正常的分段传输开启重组后看完整内容
重组消耗大量内存超长会话或高速抓包按会话或时间切片分析
重组只作用于解析视图,抓包文件里保存的仍然是原始的报文段。把文件交给别人时,对方看到的内容取决于他自己的重组设置。
丢包会导致重组不完整,进而让上层的解析大面积失败。遇到大量应用层字段缺失时,先看底层的丢包与重传,而不是先怀疑解析设置。
高速抓包加上超长会话会让重组占用大量内存,必要时应先按会话或时间切片,只加载需要分析的那一部分。

易错点

  • 超长会话重组会吃内存,超限时 Wireshark 提示无法完整重组
  • 丢段时重组不完整,HTTP 大面积失败先查底层丢包
  • 关掉重组后上层字段消失,容易误判成「协议没发」,先确认设置
  • 把重组后的视图当成网络上实际传输的形态,会错判分段与包长行为

数据来源与参考

  • Wireshark User's Guide(重组)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌