企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
- TIME\_WAIT状态产生是在tcp连接主动关闭的一端产生的正常tcp状态,超过两个MSL之后,就会关闭,释放占用的端口。 基于以上的分析我们可以推断,在我们的应用中产生大量TIME\_WAIT状态的根本原因是**频繁创建断开连接TCP连接** - MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“***报文最大生存时间***”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分 --- - [为什么需要MSL](https://draveness.me/whys-the-design-tcp-time-wait/) * 如果接收端发送FIN连接释放,发送端接收后发送ACK,如果丢失,会导致接收端超时重传,而无法进入CLOSED状态 --- - 对一台服务器进行压测(模拟高并发场景),会发现大量 TIME\_WAIT 状态的 TCP连接,连接关闭后,这些TIME\_WAIT会被系统回收 ---- > 解决方案 - **使用长连接** keep-alive 是客户端和服务端的一个约定,如果开启 keep-alive,则服务端在返回 response 后不关闭 TCP 连接;同样的,在接收完响应报文后,客户端也不关闭连接,发送下一个 HTTP 请求时会重用该连接 - **允许将TIME\_WAIT状态的socket重新用于新的TCP连接**