[转帖]关于TIME_WAIT优化

关于,time,wait,优化 · 浏览次数 : 0

小编点评

## 理解TIME_WAIT详解 **4次挥手过程的理解:** 1. 客户端主动发送4次挥手的ACK。 2. 服务器收到所有ACK后,将连接状态从LISTEN状态改为TIME_WAIT状态。 3. 客户端收到服务器的TIME_WAIT状态后,停止发送数据并等待服务器回复。 4. 服务器收到客户端的ACK后,关闭TIME_WAIT状态,释放连接资源。 **TIME_WAIT的作用:** * 保护可靠连接:当网络拥塞或网络错误导致连接中断时,服务器会通过TIME_WAIT状态等待对方回复的ACK,确保连接能及时恢复。 * 减少连接失败:设置合适的TIME_WAIT值可以减少客户端频繁发送ACK的次数,降低连接失败的概率。 * 优化网络性能:TIME_WAIT状态占用少量内存资源,可以降低网络带宽占用量。 **TIME_WAIT的危害:** * 当网络拥塞时,如果没有TIME_WAIT等待,服务器会关闭连接后,再次打开新的连接,可能会导致连接失败。 * 当网络拥塞且没有TIME_WAIT等待时,当被动方重传或延迟的FIN包过来后,会给被动方回一个RST包,可能会影响被动方其它的服务连接。 **相关参数优化:** * `tcp_max_tw_buckets`:设置TIME_WAIT bucket数量,默认值为`256000`,建议根据实际情况设置。 * `TIME_WAIT_2`:设置TIME_WAIT 2s超时时间,默认值为`60s`,可以根据需求调整。 * `tcp_fin_timeout`:设置FIN包发送超时时间,默认值为`30s`,可以根据需求调整。 **总结:** TIME_WAIT是一个重要的系统优化参数,可以提高网络性能和连接可靠性。建议根据实际情况设置合适的参数,以优化系统性能。

正文

我们先看一下四次挥手过程

#   netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

# netstat -tan | awk '{print $6}' | sort | uniq -c

通过此图先说明几个概念:

TIME_WAIT的产生条件:主动关闭方在发送四次挥手的最后一个ACK会变为TIME_WAIT状态,保留次状态的时间为两个MSL(Linux里一个MSL为30s,是不可配置的,除非重新编译内核)

TIME_WAIT两个MSL的作用:可靠安全地关闭TCP连接。比如网络拥塞,主动方最后一个ACK被动方没收到,这时被动方会对FIN开启TCP重传,发送多个FIN包,在这时尚未关闭的TIME_WAIT就会把这些尾巴问题处理掉,不至于对新连接及其它服务产生影响。

TIME_WAIT占用的资源:少量内存(查资料大概4k)和一个fd。

TIME_WAIT关闭的危害:

1、 网络情况不好时,如果主动方无TIME_WAIT等待,关闭前个连接后,主动方与被动方又建立起新的TCP连接,这时被动方重传或延时过来的FIN包过来后会直接影响新的TCP连接;

2、 同样网络情况不好并且无TIME_WAIT等待,关闭连接后无新连接,当接收到被动方重传或延迟的FIN包后,会给被动方回一个RST包,可能会影响被动方其它的服务连接。

TCP: time wait bucket table overflow产生原因及影响:原因是超过了Linux系统tw数量的阀值。危害是超过阀值后﹐系统会把多余的time-wait socket 删除掉,并且显示警告信息,如果是NAT网络环境又存在大量访问,会产生各种连接不稳定断开的情况。

相关参数优化调整

当然得根据服务器的实际情况配置,这里着重讲参数意义。

 既然知道了TIME_WAIT的用意了,尽量按照TCP的协议规定来调整,对于tw的reuse、recycle其实是违反TCP协议规定的,服务器资源允许、负载不大的条件下,尽量不要打开,当出现TCP: time wait bucket table overflow,尽量调大下面参数:

tcp_max_tw_buckets = 256000

调整次参数的同时,要调整TIME_WAIT_2到TIME_WAIT的超时时间,默认是60s,优化到30s:

net.ipv4.tcp_fin_timeout = 30

其它TCP本身的配合参数类似与synack重传次数、syn重传次数等以后介绍,优化后也是有所益处的。

说一下Linux里TIME_WAIT专有的优化参数reuse、recycle,默认也都是关闭的,这两个参数必须在timestamps打开的前提下才能生效使用:

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_tw_reuse = 1

机器作为客户端时起作用,开启后time_wait在一秒内回收。

net.ipv4.tcp_tw_recycle = 0(不要开启,现在互联网NAT结构很多,可能直接无法三次握手

开启后在3.5*RTO(RTO时间是根据RTT时间计算而来)内回收TIME_WAIT,并60s内同一源ip主机的socket connect请求中的timestamp必须是递增的,对于服务端,同一个源ip可能会是NAT后很多机器,这些机器timestamp递增性无可保证,服务器会拒绝非递增请求连接,直接导致不能三次握手。

参考

弄清TIME_WAIT彻底解决TCP:time wait bucket table overflow

http://www.net-add.com/devops/sre/linux/22.html

关于TIME_WAIT问题简述与优化

https://yuerblog.cc/2020/03/09/%E5%85%B3%E4%BA%8Etime_wait%E9%97%AE%E9%A2%98%E7%AE%80%E8%BF%B0%E4%B8%8E%E4%BC%98%E5%8C%96

time_wait的快速回收和重用

https://poppywan.readthedocs.io/en/latest/005-common_system_optimiz/001-linux_core_optimize/003-time_wait

如何优化高并发TCP链接中产生的大量的TIME_WAIT的状态

https://cloud.tencent.com/developer/article/1589962

Linux下解决time_wait连接过多

https://zhuanlan.zhihu.com/p/29334504

https://www.oschina.net/translate/optimising-nginx-node-js-and-networking-for-heavy-workloads?print

</article>

与[转帖]关于TIME_WAIT优化相似的内容:

[转帖]关于TIME_WAIT优化

我们先看一下四次挥手过程 # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' # netstat -tan | awk '{print $6}' | sort | uniq -c 通过此图先说明几个概念: TI

[转帖]性能案例-Linux下解决time_wait连接过多(Linux内核优化)

一、性能测试的主要概念和计算公式 系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。 单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

[转帖]关于线上环境CLOSE_WAIT和TIME_WAIT过高

https://www.cnblogs.com/Bozh/p/3752476.html 运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了。 首先是TIME_WAIT: 理解一

[转帖]tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT socket

[转帖]终于搞懂了服务器为啥产生大量的TIME_WAIT!

http://www.yunweipai.com/40430.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 写在开头,大概 4

[转帖]性能关键指标及模型分析-QPS,RT

一、RT(Response-time、响应时间) 响应时间是用户请求发出和服务器返回之间的时间差。 这个过程包括DNS解析、网络数据传输、服务器计算、网络数据返回,如下图例子: 期中,服务器计算时间又可细分为: 1. Web Server响应的时间; 2. App Server响应的时间; 3. C

[转帖]性能测试:关键性能指标与性能分析

关键指标 应用性能指标 响应时间(Response Time): 指从客户端发送一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的所有时间。响应时间组成:请求发送时间、网络传输时间和服务器处理时间三部分组成。响应时间越短越好,目前接受的时间是2/5/8秒。 吞吐量(Throughp

[转帖]PyCharm无法安装第三方模块,一直提示 updating list:time out 解决办法

Pycharm无法安装第三方模块解决办法: 1、打开pycharm的项目的venv文件夹 2、打开文件夹目录中的pyvenv文件 3、将文件中的include-system-site-packages 修改为true,完成后保存关闭文件 4、修改完成后将pycharm重启,这时候就可以调用这些第三方

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]关于统信UOS操作系统版本介绍

https://blog.csdn.net/qq43748322/article/details/120196200 当下信创产业发展的如火如荼,今天聊聊统信操作系统UOS 相比较于其它国内品牌操作系统,统信UOS的版本、分支比较多,下面为大家详细说说各UOS版本 目前统信UOS系统主要分为桌面版和