首页/网络/网络排障速查/RST 判读:谁复位了连接、为什么

RST 判读:谁复位了连接、为什么

RST 是连接被强杀的信号:先看是谁发的(ip.src)、在哪个阶段发的(握手/传输中)、以及是否来自中间设备,再对应到端口未开、应用 abort、设备清理会话等根因。

网络排障速查网络更新于 2026-10-13

RST 判读是什么

复位报文是连接被强制中断的信号,也是排障中最容易被误读的一类报文。判读要回答三个问题:是谁发出的、发生在哪个阶段、有没有可能是中间设备伪造。响应建连请求的复位通常意味着端口没有监听或被策略拒绝;传输过程中出现的复位多是应用异常退出或主动中断;长时间空闲之后出现的复位,往往来自中间设备清理会话表。先分清这三种情形,再去找对应的责任方。

基本信息

适用平台图形化抓包工具及其命令行版本
过滤字段复位标志等于 1,可再叠加地址与端口条件限定范围
判读三要素发出方地址、发生阶段、是否伴随确认标志
常见来源服务端应用、客户端应用、负载均衡与防火墙等中间设备
留证要点记录复位报文的帧号、时间与前后文,便于与对方核对

典型使用场景

  • 连接刚建立就被中断,判断是端口没监听还是策略拒绝
  • 传输中途连接突然断开,确认是应用异常还是链路问题
  • 长连接空闲一段时间后断开,排查中间设备的会话老化
  • 用户报「连接被重置」但服务端日志没有记录,用抓包确认复位来自哪一侧
  • 验证修复:调整会话保持或超时参数后,重新抓包确认复位消失

定位与判读

定位与判读
tcp.flags.reset == 1                            # 全部复位报文
tcp.flags.reset == 1 && ip.src == 10.0.0.5      # 指定发出方
tcp.flags.reset == 1 && tcp.flags.ack == 1      # 带确认的复位,多为进程主动中断
tcp.flags.syn == 1 && tcp.flags.reset == 1      # 对建连请求直接复位
tcp.flags.reset == 1 && tcp.time_delta > 60     # 长时间空闲后出现的复位
tcp.stream eq 12 && tcp.flags.reset == 1        # 单条会话内的复位

形态与根因

形态含义常见根因
响应建连请求的复位端口不可用端口无监听、被策略拒绝或服务未就绪
传输中段的复位连接被强行中断应用崩溃或主动中止、连接被对端清理
长时间空闲后复位会话过期中间设备会话老化或保活探测失败
序号异常的复位不是正常协议行为多为中间设备注入或伪造
复位后立刻重连客户端重试行为属正常重试逻辑,重点看第一次复位原因
判读复位报文要结合前后文:只看单帧只能知道「被断了」,把复位帧与它之前的最后几帧一起看,才能判断触发条件。报文详情里的序列号分析面板会标注该复位对应的是哪一帧。
不要看到复位就归咎对端服务:复位报文可能由链路上任意一台设备发出,源地址也不一定可信。先确认发出方与链路位置,再去找对应责任方,否则沟通方向从一开始就是错的。

易错点

  • 看到复位就归咎对端:复位可能由链路上任意中间设备伪造
  • 忽略时间上下文:空闲很久后的复位与刚建立就复位,根因完全不同
  • 只看单帧不看前后文,无法判断触发条件与责任方
  • 把客户端重试时的第二次复位当成新问题,重复排查同一根因

数据来源与参考

  • RFC 9293:Reset 处理规则
  • Wireshark 文档:tcp.flags.reset

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌