面试中常问的问题
很多面试中,特别是后端岗位,特别是和服务器相关岗位的面试中喜欢问这两个状态,首先回忆下这两个状态出现的时间,下面是三次握手和四次挥手的状态图
TIME_WAIT是出现在主动关闭的一端,一般是客户端,在收到服务端发来的FIN报文之后进入TIME_WAIT,TIME_WAIT的时间一般是2MSL,1MSL是30秒,主要是等待某些在网络延迟的报文到达,从而正确关闭
那如果服务器这时候出现大量的TIME_WAIT状态,会是什么原因呢
首先出现TIME_WAIT状态是正常的,如果是在服务器出现,那么一般可能是有以下两个原因,
第一种情况就是连接时长很短,导致连接关闭后进入TIME_WAIT状态,并且大量的短连接同时进行
第二种情况就是像某些爬虫服务器可能会主动断开连接,那这时候服务器会进入TIME_WAIT状态
第三种就是请求不是一个长连接,如果客户端挂机后,服务器超时会主动断开
所以针对以上情况,有以下解决方法:
大量的TIME_WAIT状态会导致新连接创建失败,因为端口只有65535个,端口不够用了会报错
CLOSE_WAIT是服务端收到FIN报文后,发出最后一个FIN报文前的状态,所以出现CLOSE_WAIT有很大可能是服务端没有及时发送出FIN报文,也就是没有主动close或者shutdown,这种一般是代码写得有问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有