文章总结: 文章解析服务端在四次挥手后仍发RST的原因:高并发场景下TIME_WAIT堆积会耗尽内存,启用LingerTimer可在2秒内强制Reset释放连接,但可能丢数据;timeout=0则直接RST,实现先优雅后暴力快速回收资源。 综合评分: 82 文章分类: 网络安全,安全建设,解决方案,网络协议
服务端主动关闭连接,经历了[FIN,ACK],[ACK], [FIN,ACK],[ACK],接着服务端报[RST,ACK], 这是啥情况呢?
原创
车小胖谈网络
车小胖谈网络
2026年1月6日 16:32 上海
第一包服务端主动关闭连接[FIN,ACK], 第4包服务端确认,第4包和第5包时间差为几毫秒。
题主的意思是,既然已经使用了”4-way handshake”完成了断开TCP连接,Server端的TCP为何还要发送Reset报文,将已经断开的TCP连接Reset?
Server主动(active)关闭连接,而Client处于被动(Passive)关闭连接。
依据TCP状态机,当Server发出自己的ACK(图片4th)时,它的状态是什么?
TIME_WAIT
大约多久能够完全释放该TCP连接的所有内存?
60秒-120秒不等。
如果有成千上万的Client,都需要Server端来主动关闭连接,在繁忙的Server上可能会有成千上万的TCP连接处于TIME_WAIT状态,无法得到及时释放。这将严重消耗Server端的内存资源。
可否有一个既能让Server主动关闭连接,但是又能在可控(1-2秒)时间内将TIME_WAIT状态的TCP连接完全释放的解决方案?
有的,它的名字是“Linger Timer”。
linger timer = enabled,timeout=2秒。
当Server主动关闭连接时,依然是标准的”4-way handshake”,但是会在发出FIN的时刻,启动linger timer,timeout=2秒。
如果在2秒之内完成正常的关闭连接,自然是最好的,因为Client已经确保收到所有的data。
然后到达2秒时定时器超时,Server端的TCP发出Reset报文。
一方面,Server端的TCP将TIME_WAIT的连接完全释放。
另一方面,Server端的TCP将Reset报文发出。
这个Reset报文就是图片中的5th packet。它由linger timer触发并发出。
值得庆幸的是,由于Reset报文到达Client时,TCP连接已经完全释放(closed),故Client端的TCP,用五元组match,结果为NULL,故默默丢弃,丝毫不受影响。
如果不是那么幸运,在linger timer超时并发出Reset报文时,”4-way handshake”没有完成,当Reset报文到达client时,会发成什么?
Client用五元组,matched到该TCP连接,无论socket receive/send queue有没有data,都会清空。这样就会造成数据的丢失。
当然还有更暴力的,linger timer = enabled,timeout=0秒。
当Server主动关闭连接时,直接发Reset报文,不仅释放自己的内存,还释放Client的内存。如果Client还有待Receive/send的数据,这些数据将会丢失。
综述
Linger timer是一种先软(graceful)后硬(rude)关闭TCP连接的方法。其最终目标是尽快释放掉处于TIME_WAIT状态的TCP连接,或者直接Reset。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:车小胖谈网络 车小胖谈网络《服务端主动关闭连接,经历了[FIN,ACK],[ACK], [FIN,ACK],[ACK],接着服务端报[RST,ACK], 这是啥情况呢?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![服务端主动关闭连接,经历了[FIN,ACK],[ACK],[FIN,ACK],[ACK],接着服务端报[RST,ACK], 这是啥情况呢?](/images/random/titlepic/3.jpg)







评论