标志位过滤在做什么
Wireshark 把 TCP 标志位拆成独立字段:tcp.flags.syn、tcp.flags.ack、tcp.flags.fin、tcp.flags.rst 等,取值 0 或 1,用布尔组合就能表达任意标志组合,比在命令行里做位运算直观得多。需要精确匹配整套组合时,也可以用 tcp.flags 直接比较十六进制数值。它的典型用途是描述连接的生命周期:只看建连请求、只看复位、只看关闭确认,每种都对应一类明确的排查问题。
基本信息
| 建连请求 | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
|---|---|
| 建连应答 | tcp.flags.syn == 1 && tcp.flags.ack == 1 |
| 复位 | tcp.flags.rst == 1 |
| 关闭确认 | tcp.flags.fin == 1 && tcp.flags.ack == 1 |
| 数值写法 | tcp.flags == 0x012 表示 SYN 与 ACK 同时置位 |
典型使用场景
- 统计建连请求:只看纯 SYN,数量反映连接尝试
- 定位连接被重置:只看复位标志,快速找到中断点
- 核对关闭流程:筛关闭确认报文看是谁先发起关闭
- 识别纯确认流量:排除带数据的报文,观察保活行为
- 按体积描述连接:只看带推送标志的数据报文,统计真实载荷量
常用示例
常用示例
tcp.flags.syn == 1 && tcp.flags.ack == 0 # 纯 SYN
tcp.flags.syn == 1 && tcp.flags.ack == 1 # 建连应答
tcp.flags.rst == 1 # 复位
tcp.flags.fin == 1 && tcp.flags.ack == 1 # 关闭确认
tcp.flags.ack == 1 && tcp.len == 0 # 纯确认,不带数据
tcp.flags == 0x012 # 数值写法:SYN 与 ACK
tcp.flags.push == 1 && tcp.len == 0 # 异常组合,值得看一眼标志组合与含义
| 组合 | 含义 | 排查方向 |
|---|---|---|
| 仅 SYN | 建连请求 | 服务是否可达、请求量是否异常 |
| SYN 加 ACK | 建连应答 | 与请求配对判断应答率 |
| 仅 ACK | 纯确认,不带数据 | 保活、心跳与空闲连接 |
| RST | 强制复位 | 端口未监听、进程退出或中间设备插手 |
| FIN 加 ACK | 关闭确认 | 正常关闭流程与主动关闭方判断 |
| 推送标志加零长度 | 无数据的推送 | 非典型组合,通常与应用实现有关 |
把标志位条件与流编号叠加,可以在一条连接内观察状态变化顺序:建连、传数据、关闭是否完整,比逐包阅读快得多。
只写 tcp.flags.syn == 1 会同时命中建连应答。只想看建连请求时必须补上 ACK 为零的条件,否则统计结果会偏大。
与其他条件组合
与其他条件组合
tcp.flags.syn == 1 && tcp.flags.ack == 0 && ip.dst == 10.0.0.20 # 发往某服务的建连请求
tcp.stream == 7 && tcp.flags.rst == 1 # 某条流是否被重置
tcp.flags.syn == 1 && tcp.analysis.retransmission # 握手是否出现重传
tcp.flags.fin == 1 && tcp.analysis.retransmission # 关闭报文是否被重传判读要点
- 建连请求多而建连应答少,说明存在未被应答的连接尝试
- 复位集中出现在建连阶段,优先查监听与策略;出现在传输阶段则查应用
- 纯确认流量持续存在但业务空闲,属于保活机制,不必当成异常
- 关闭报文数量与建连数量明显不匹配时,说明存在连接未正常关闭或被强制中断