首页/网络/协议速查/FIN 与 RST 对比:正常关闭 vs 异常终止
TCP 与 UDP54 条

FIN 与 RST 对比:正常关闭 vs 异常终止

FIN 是礼貌分手(等对方处理完),RST 是当场掀桌(立即释放缓冲);负载均衡与代理场景尤其要分清两者影响。

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

两种结束方式的区别

正常关闭用结束标志,含义是「我不再发数据了,但仍然可以收」,对端读到结尾后可以优雅收尾;重置则直接放弃连接,未读数据可能被丢弃,对端的读操作会立刻报错(RFC 9293 §3.5)。抓包里看到哪一种,往往直接决定排查方向。

谁更容易遇到重置

重置常见于端口没有监听、进程崩溃、连接被中间设备清理等场景。负载均衡与代理转发中尤其要分清:后端提前关闭连接(请求体还没读完)会发出重置,前端若没读到响应结束就断开,用户侧就会看到间歇性的响应截断。

基本信息

结束标志表示不再发送数据,连接进入半关闭
重置立即放弃连接,缓冲数据可能被丢弃
对端表现读到结尾可优雅收尾,或立刻收到连接被重置的错误
常见重置来源端口未监听、进程崩溃、中间设备清理连接

典型使用场景

  • 排查「偶发响应截断」:看是否出现重置
  • 区分端口未监听与进程崩溃导致的连接失败
  • 负载均衡与代理的连接管理调优
  • 分析连接被中间设备清理的现象

抓包区分

抓包区分
tcpdump -nn 'tcp[tcpflags] & (tcp-fin|tcp-rst) != 0' -c 20   # 同时抓两种结束方式
ss -tan state fin-wait-1 | wc -l                              # 主动关闭后等待对端结束的连接
ss -s                                                          # 各类状态汇总

对比项

对比项正常关闭重置终止
语义我不再发数据,仍可接收立即放弃这条连接
对端表现读到结尾,可以优雅收尾读操作报错,未读数据丢失
缓冲数据正常发送完毕可能被直接丢弃
典型场景应用主动关闭连接端口拒绝、进程崩溃、连接被清理
客户端收到重置会丢失尚未读完的响应体,这是「偶发响应截断」最常见的来源之一,且往往只在特定并发条件下出现。
代理转发时,如果后端在请求体没读完就关闭连接,会发出重置;正确的改动方向是让转发侧保持连接、读到响应结束再关闭。
抓包是判断谁先发起关闭的唯一可靠手段:只看两端日志时,关闭方往往被记成「对端异常断开」。

易错点

  • 代理在后端未读完请求体时提前关闭:触发重置,导致响应偶发截断
  • 把重置一律当攻击:多数重置来自端口未监听或进程崩溃
  • 只看一端日志判断关闭方:抓包才能看清谁先发出结束标志或重置
  • 忽略等待关闭状态的堆积:文件描述符耗尽的速度会比预期快得多
  • 把正常关闭当成连接异常:半关闭是标准行为,不应计入错误统计

数据来源与参考

  • RFC 9293 §3.5
  • man 7 socket

相关工具

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