流编号过滤在做什么
tcp.stream == N 锁定编号为 N 的那条 TCP 会话,把一条连接的全部报文单独拎出来,是与会话相关的一切分析的起点。编号由 Wireshark 按解析顺序分配,会话列表里可以对照查看五元组。锁定一条流之后再叠加条件,就能回答「这条连接里重传了几次」「这条连接上有没有出现过错误响应」这类具体问题。换文件或重新扫描后编号可能变化,所以分享结论时同时给出五元组更稳妥。
基本信息
| 语法 | tcp.stream == 12 |
|---|---|
| 获取方式 | 右键报文 → 会话过滤器 → TCP,或从会话统计里应用 |
| 对应关系 | 一个五元组从建立到关闭通常对应一条流 |
| 重连情况 | 同一五元组重新连接会产生新的编号 |
| 注意 | 编号依赖解析顺序,换文件后会变化 |
典型使用场景
- 逐条分析可疑连接:先按流锁定,再看它的完整生命周期
- 确认某条连接内的重传次数与分布,判断是否集中在同一条会话
- 核对某次请求的完整交互,包括请求头、响应与关闭过程
- 对比多条同类会话:同一个接口的多条流逐条比对,找出异常的那条
- 配合 Follow 使用:锁定流后再重组内容,避免看错会话
常用示例
常用示例
tcp.stream == 12 # 锁定单条流
tcp.stream == 12 && tcp.analysis.retransmission # 该流内的重传
tcp.stream == 12 && tcp.len > 0 # 该流的载荷报文
tcp.stream == 12 && http.response.code >= 500 # 该流的错误响应
tcp.stream == 12 && tcp.flags.rst == 1 # 该流是否被重置
tcp.stream != 12 # 排除该流,看其他连接与其他条件叠加
| 叠加条件 | 回答的问题 | 说明 |
|---|---|---|
| tcp.analysis.flags | 这条连接是否有传输异常 | 重传、乱序、零窗口一目了然 |
| tcp.len > 0 | 真正承载数据的报文有哪些 | 排除纯确认与保活报文 |
| http.response.code | 这条连接上的应用层结果 | 只对明文 HTTP 有效 |
| tcp.flags.rst == 1 | 是否被强制重置 | 区分正常关闭与异常中断 |
| frame.time_relative | 该连接在时间轴上的位置 | 与业务日志对齐时间点 |
右键报文选会话过滤器是获取流编号最快的办法,既不用手工拼条件,也不会把端口或地址写错。udp.stream 的用法完全对称。
流编号依赖当前文件的解析顺序,换文件、重新扫描或使用不同版本都可能变化。写报告时同时给出源地址、目的地址与端口,才能让别人准确定位到同一条连接。
命令行等价写法
命令行等价写法
tshark -r a.pcap -Y 'tcp.stream==12' | head -20 # 与显示过滤器同名
# 只认五元组时用地址加端口组合,跨文件也能对应
tshark -r a.pcap -Y 'ip.addr==10.0.0.9 && ip.addr==10.0.0.20 && tcp.port==443'判读要点
- 同一五元组重连会产生新编号,长周期问题要逐条流分别检查
- 一条流内出现多次同样的异常,说明模式性问题而非偶发
- 流编号在会话统计里可以对照字节数与时长,快速挑出值得深入的那条
- 排除某条流(用不等于)可以避免正常的健康检查干扰对业务的观察