Administrator
Published on 2025-03-12 / 3 Visits
0
0

TCP 中 RST 报文触发场景总结

TCP 中的 RST(Reset)报文 用于立即强制关闭连接,通常在异常或错误情况下触发。以下是常见场景:


1. 连接请求被拒绝

  • 端口未监听:当客户端尝试连接服务器未监听的端口时,服务器会回复 RST(而非 SYN-ACK)。
  • 防火墙拦截:防火墙可能直接发送 RST 阻断连接请求。

2. 异常终止连接

  • 进程崩溃或强制关闭:若一端进程异常终止(如崩溃),操作系统会发送 RST 通知对方,而非正常四次挥手。
  • 应用层主动重置:如调用 socket.close() 强制关闭(如设置 SO_LINGER 选项超时为 0)。

3. 处理半开连接(Half-Open Connection)

  • 一方意外断开:例如服务器重启后,客户端仍发送数据,服务器因无对应连接信息而回复 RST。
  • 非正常关闭:如一方直接断电,另一方发送数据时会收到 RST。

4. 协议状态不一致

  • 接收非法报文:在非预期状态收到报文(如 ESTABLISHED 状态下收到 SYN 包)。
  • 序列号无效:若报文序列号不在接收窗口范围内,可能触发 RST(取决于实现)。

5. 安全或策略干预

  • 防御攻击:如检测到 SYN Flood 攻击,服务器可能发送 RST 拒绝连接。
  • 中间设备阻断:代理或防火墙可能主动发送 RST 终止可疑连接。

6. 关闭已关闭的连接

  • 重复 FIN 或数据:在连接已关闭后收到数据或 FIN,会回复 RST。

总结

RST 报文的本质是 强制终止连接,常见于协议错误、资源不可达或安全策略场景。与正常关闭(FIN)不同,RST 不保证数据完整性,可能导致数据丢失。


Comment