企业网站建设及运营现状分析,如何做网页游戏,个人网站要不要备案,做一个公司网址多少钱工作中无论是开发环境还是线上环境#xff0c;我们都出现过大量的 timewait 状态的连接#xff0c;例如下面这个例子
服务端简单的开辟一个 web server 监听 9966 端口 客户端进行疯狂的请求服务端 瞬间就可以看到咱们服务端的出现大量的 TIME_WAIT 状态的连接 这个时候我们都出现过大量的 timewait 状态的连接例如下面这个例子
服务端简单的开辟一个 web server 监听 9966 端口 客户端进行疯狂的请求服务端 瞬间就可以看到咱们服务端的出现大量的 TIME_WAIT 状态的连接 这个时候如果客户端再不停的请求服务端的话我们就可以看到会出现这样的一个错误 address already in use : connect
这个时候是表示咱们已经没有可以使用的端口 地址都在被使用中
那我们来看一下为什么会出现上述这种情况以及我们如何去解决他呢
为什么会出现这么多的 TIME_WAIT 状态
上面其实咱们也看到了出现大量 TIME_WAIT 状态一般是出现在高并发场景同时有多个请求进来 如果基本都是短连接那么服务端处理完毕请求之后就会关闭连接那么服务端就会出现大量的 TIME_WAIT 状态的连接需要等待 2 MSL 的报文最大存活时间才会被系统释放回收回收哦又空余出连接数来进行服务
简单的咱们可以使用如下命令来查看我们的 TIME_WAIT 状态的连接数
netstat -antp|grep TIME_WAIT |wc -l 上述这种情况在并发的时候我们的某些请求可能没有办法得到处理这是为什么呢
有一点网络基本知识的我们知道咱们的 TCP 结构是这样的 对于目的端口和源端口在 tcp 包头上都是占用 16 bit 那么就是分别 65535 个端口此处客户端请求服务端那么源端口最多也就是 65535 个连接
而当我们请求服务端时报错地址正在被使用咱们就需要等待最大 2MSL 的时间才能正常连接服务端了 我们如何处理 TIME_WAIT 大量存在的情况
我们如何处理 TIME_WAIT 大量存在的情况呢前提是我们先知道这个 TIME_WAIT 是产生在哪一边的一般情况下多数是发生在服务端
对于 TCP 的三次握手和四次挥手就不在此处做详细阐述了对于基本 TCP 原理中客户端和服务端哪一端先发起关闭连接那么 TIME_WAIT 就会出现在哪一端例如下面这个简图 那么我们可以知道上述例子TIME_WAIT 是出现在服务端的这是为什么呢
因此客户端的请求连接头部中 connection 设置的一般是 close 字段此时服务端的处理是一个短连接服务端处理完毕之后就会主动关闭连接
TIME_WAIT 含义是我这边主动关闭连接 我不会主动发送信息给你了但是你发送的信息我是可以正常接收的
其实咱们一般是可以这样来解决上述大量 TIME_WAIT 存在的情况的
咱们简单思考一下解决这个问题要么是不产生这么多 TIME_WAIT 状态的连接要么就是这个 TIME_WAIT 状态的连接能够更快的被释放掉好空出闲置的端口来进行使用
对于这个思路的第一点
客户端请求服务端的时候头部的 connection 设置为 keep-alive和服务端保持长连接的特性保持存活一段时间
那么对于思路的第二点
那么是长连接也是会有断开的时候那么如果是服务端这边主动断开的话仍然会在服务端上出现 TIME_WAIT我们是否可以考虑能够将这个TIME_WAIT 的时间缩短一点就是去对 2MSL 做文章了
这个时间可以根据咱们自身的设计来调整成 例如 1MSL 也是可以的这并不完全是死的
注意哦一般 1 个 MSL 是 120 秒也就是 2 分钟
今天就是这样下一次分享一波为什么需要 TIME_WAIT 状态
感谢阅读欢迎交流点个赞关注一波 再走吧
欢迎点赞关注收藏
朋友们你的支持和鼓励是我坚持分享提高质量的动力 好了本次就到这里
技术是开放的我们的心态更应是开放的。拥抱变化向阳而生努力向前行。
我是阿兵云原生欢迎点赞关注收藏下次见~
可以进入地址进行体验和学习https://xxetb.xet.tech/s/3lucCI