3075
0
9264
超级版主
摘要:浏览网页关闭标签页,网络连接并不会瞬间消失。TCP 作为可靠传输协议,断开连接需要一套完整协商流程,也就是我们常说的四次挥手。本文结合浏览器访问网页的真实场景,讲解 FIN、ACK 报文交互逻辑,解析CLOSE_WAIT、TIME_WAIT等 TCP 状态成因,帮你理解 TCP 如何安全释放连接,同时掌握线上网络问题排查思路。
前言 我们每天打开浏览器访问网页,浏览器与 Web 服务器之间会建立 TCP 连接,用来传输 HTML 页面、图片、接口返回数据等各类内容。TCP 的核心特性是可靠传输:保证数据包按顺序送达,丢包自动重传,乱序报文重新排序。既然建立连接要保证可靠,关闭连接同样不能粗暴直接切断。如果直接一刀切断连接,很容易出现一种情况:一方认为数据已经全部发送完成,而另一方缓冲区中还有未传输完毕的数据,强制断开就会直接造成业务数据丢失CSDN博...。 TCP 是全双工通信协议:同一条连接当中,客户端可以向服务器发送数据,服务器也可以向客户端回传数据,两个数据传输方向相互独立。关闭连接不等于拨动一个总开关,而是需要分别关闭两个方向的发送通道,这就是四次挥手产生的根本原因。 下面以日常场景举例:用户浏览网页,关闭浏览器标签页,浏览器作为客户端,成为主动关闭连接的一方,完整走完四次挥手流程。
概念说明: FIN 报文:Finish,代表本方数据发送完毕,请求关闭本方发送通道ACK 报文:Acknowledge,确认收到对方报文
这里会出现时间间隔:第二步和第三步不一定紧挨着。服务器可能需要处理业务逻辑、读完缓冲区剩余数据、等待上层应用程序执行关闭操作,之后才会发起自己的关闭请求。
特殊优化场景:如果服务器此时恰好没有任何剩余数据需要发送,第二步的 ACK 报文和第三步 FIN 报文可以合并为一次报文发送,看上去只有三次交互。但是逻辑层面依旧是两个独立动作,依然属于四次挥手的逻辑范畴。
核心逻辑:双方各自关闭自己的发送方向,并且每一次关闭请求,都需要对方给出确认回执,保障数据完整传输。
只有被动关闭方没有剩余数据,ACK+FIN 才可以合并,实现三次报文交互,但逻辑依旧是四次挥手逻辑CSDN博...。
注意:TIME_WAIT本身不是 BUG,是 TCP 正常保护机制。优化方向:开启 HTTP Keep‑Alive 长连接,使用连接池复用 TCP 连接,减少频繁创建销毁短连接;内核参数谨慎调整 tw_reuse 等参数,避免带来报文错乱风险。
总结:我们讨论的四次挥手,针对的是传统 TCP 协议的连接释放流程。
举报
本版积分规则 发表回复 回帖后跳转到最后一页
相关侵权、举报、投诉及建议等,请发 E-mail:2026@typc.net
Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|晋ICP备2026008270号-1|晋公网安备14010602111293号