首页/网络/协议速查/RST 复位连接的原因
TCP 与 UDP54 条

RST 复位连接的原因

RST 表示「立即终止」:端口未监听、连接不存在、半开连接上收到数据、防火墙 REJECT、应用设置 SO_LINGER=0 都会触发。

协议速查网络更新于 2026-10-13

RST 是明确的拒绝信号

RST 的意思是立即终止连接,它不带任何协商余地,收到就说明这条连接无法继续。常见触发场景包括目标端口没有监听、收到不属于任何已有连接的报文、在已经半开的连接上收到数据、防火墙用拒绝策略回应,以及应用把 SO_LINGER 设为 0 主动关闭。收到 RST 与完全没有响应是完全不同的信号,前者说明对端或中间设备明确拒绝,后者更像被静默丢弃。

基本信息

端口没人监听本机内核直接回 RST,客户端表现为 Connection refused
连接已不存在收到无法归属到任何连接的报文时回 RST
半开连接对端进程已消失,本地继续发数据会招来 RST
防火墙拒绝拒绝策略常回 RST;丢弃策略则表现为超时
应用主动关闭SO_LINGER 置 0 时关闭连接会直接发 RST 并丢弃发送缓冲
规范依据RFC 9293 第 3.5.2 节定义了 RST 的生成规则

抓 RST 并定位

抓 RST 并定位
tcpdump -nn 'tcp[tcpflags] & tcp-rst != 0' -c 20          # 只看带 RST 标志的包
tcpdump -nn -i any 'tcp port 8080 and (tcp[tcpflags] & tcp-rst != 0)' -c 10   # 只看某个端口上的 RST
ss -tan | awk '{print $1}' | sort | uniq -c                # 先看各状态分布
ss -tanp state established | head                           # 对照当前活跃连接,判断是谁在拒绝
nc -vz -w 3 10.0.0.9 8080                                  # 快速判断是 refused 还是 timeout

现象与含义对照

现象网络层含义处置方向
Connection refused收到 RST检查端口监听、绑定地址与防火墙拒绝策略
timeout 超时报文被静默丢弃查安全组、路由与丢弃类规则
Connection reset by peer建连后收到 RST查对端进程是否崩溃或重启、LB 是否摘除后端
批量短连接大量 RST健康检查或连接快速关闭属于可预期行为,结合连接数曲线判断
RST 只出现在某个上游该上游节点异常逐个上游验证,必要时先摘除异常节点

典型使用场景

  • 客户端报连接被重置,需要判断是对端崩溃还是中间设备干预
  • 发布重启期间出现成批 refused,确认后端是否完成了监听恢复
  • 负载均衡健康检查造成大量短连接与 RST,评估是否属于正常现象
  • 容器环境里偶发 reset,排查是否由连接数限制或内核参数引起
  • 排查 TLS 握手阶段被打断,判断是否由中间设备重置连接
RST 与 DROP 的区别决定了排查方向:refused 说明对端明确拒绝,要查端口与策略;timeout 说明报文被丢弃,要查安全组、路由与中间设备,两者不能按同一套思路处理。
用命令行的 -vz 探测端口时,refused 与 timeout 的提示就是 RST 与丢弃两种结果的直接映射,先用它把问题分层再去抓包,效率更高。

易错点

  • 把 Connection refused 当成网络不通,去反复检查链路与安全组,实际服务根本没在监听或者监听在了另一个地址上
  • 看到大量 RST 就断言链路被攻击,负载均衡健康检查与短连接探测本身就会产生大量正常 RST
  • 用 SO_LINGER 置 0 来规避 TIME_WAIT,代价是发送缓冲被丢弃,对端可能收到不完整数据
  • 只抓单侧包判断原因,缺少对端视角时无法区分是对端主动重置还是中间设备插入 RST

数据来源与参考

  • RFC 9293 §3.5.2(RST 生成规则)
  • man 7 socket(SO_LINGER)

相关工具

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