TCP的TIME_WAIT连接数超过65536会怎样?tcp_max_tw_buckets作用?

(1)TCP的TIME_WAIT超过65536是否就不能再建立连接呢?
答案是否定的,只要四元组不一样,就可以利用本地同样的ip+端口建立连接,不管本地这个IP+端口是否已经有了其他状态的连接。

(2)net.ipv4.tcp_max_tw_buckets 是限制TIME_WAIT状态的数量的,默认是65536。
很多时候会把这个值改小,例如16384,那么在短连接情况下,TW状态的连接很容易达到这个阈值,那么超出部分的TW连接会怎么处理呢?
按个人测试结果来看是直接进入closed状态的,并且TCPTimeWaitOverflow有增加的。

netstat -s | grep TCPTimeWaitOverflow

(3)那么不经过time_wait的连接会不会产生某些问题呢?
那先看time_wait的作用是什么了,time_wait作用是保证TCP连接正常关闭的可靠性的,因为第三次挥手的FIN是可能会重传的(没收到第四次挥手的ACK就会重传),如果不经过time_wait,同样的四元组又新建了连接,那旧连接上重传的FIN就可能发到新连接上,这个时候会把新连接关掉了,从而造成影响。
但是事实确实如此吗?我理解是在net.ipv4.tcp_timestamps = 1 的情况下,新连接收到旧连接的报文包括FIN,会直接丢弃不管,因为从timestamps 能判断这个报文是在新连接建立之前的。所以结论是在tcp_timestamps =1 的情况下,不会造成问题。
类似于tcp_tw_reuse = 1 的情况,并不会造成问题。
另外说明一下tcp_tw_reuse 在TW连接没达到tcp_max_tw_buckets 阈值的时候也能发挥作用,当然tcp_timestamps要打开。

欢迎讨论、指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值