首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

被微信面麻了,问的太细节了。。。

因为开启 tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接时,相当于缩短了 TIME_WAIT 状态的持续时间。...为什么 tcp_tw_reuse 默认是关闭的? 通过前面这么多铺垫,终于可以说这个问题了。 开启 tcp_tw_reuse 会有什么风险呢?我觉得会有 2 个问题。...第一个问题 我们知道开启 tcp_tw_reuse 的同时,也需要开启 tcp_timestamps,意味着可以用时间戳的方式有效的判断回绕序列号的历史报文。...因为客户端开启了 tcp_tw_reuse,于是快速复用 TIME_WAIT 状态的端口,又与服务端建立了一个与刚才相同的四元组的连接。...第二个问题 开启 tcp_tw_reuse 来快速复用 TIME_WAIT 状态的连接,如果第四次挥手的 ACK 报文丢失了,有可能会导致被动关闭连接的一方不能被正常的关闭,如下图: 总结 tcp_tw_reuse

68620

再叙TIME_WAIT

tcp_tw_reuse:顾名思义就是复用TIME_WAIT连接。当创建新连接的时候,如果可能的话会考虑复用相应的TIME_WAIT连接。...通常认为「tcp_tw_reuse」比「tcp_tw_recycle」安全一些,这是因为一来TIME_WAIT创建时间必须超过一秒才可能会被复用;二来只有连接的时间戳是递增的时候才会被复用。...举例来说:客户端向服务端发起HTTP请求,服务端响应后主动关闭连接,于是TIME_WAIT便留在了服务端,此类情况使用「tcp_tw_reuse」是无效的,因为服务端是被连接方,所以不存在复用连接一说。...让我们延伸一点来看,比如说服务端是PHP,它查询另一个MySQL服务端,然后主动断开连接,于是TIME_WAIT就落在了PHP一侧,此类情况下使用「tcp_tw_reuse」是有效的,因为此时PHP相对于...说明:如果使用tcp_tw_reuse,请激活tcp_timestamps,否则无效。 tcp_max_tw_buckets:顾名思义就是控制TIME_WAIT总数。

31930

解Bug之路-Nginx 502 Bad Gateway

proc/sys/net/ipv4/ip_local_port_range 22768 61000 cat /proc/sys/net/ipv4/tcp_max_tw_buckets 20000 开启tcp_tw_reuse...这个问题Linux其实早就有了解决方案,那就是tcp_tw_reuse这个参数。...echo '1' > /proc/sys/net/ipv4/tcp_tw_reuse 事实上TIME_WAIT过多的原因是其回收时间竟然需要1min,这个1min其实是TCP协议中规定的2MSL时间,而...return 1; } return 0; } 上面这段代码逻辑如下所示: 在开启了tcp_timestamp以及tcp_tw_reuse的情况下,在Connect搜索port时只要比之前用这个...多配几台Backend/开启tcp_tw_reuse或许是不错的选择。 总结 应用再强大也还是承载在内核之上,始终逃不出Linux内核的樊笼。所以对于Linux内核本身参数的调优还是非常有意义的。

2.1K20

解Bug之路-Nginx 502 Bad Gateway

proc/sys/net/ipv4/ip_local_port_range 22768 61000 cat /proc/sys/net/ipv4/tcp_max_tw_buckets 20000 开启tcp_tw_reuse...这个问题Linux其实早就有了解决方案,那就是tcp_tw_reuse这个参数。...echo '1' > /proc/sys/net/ipv4/tcp_tw_reuse 事实上TIME_WAIT过多的原因是其回收时间竟然需要1min,这个1min其实是TCP协议中规定的2MSL时间,而...在开启了tcp_timestamp以及tcp_tw_reuse的情况下,在Connect搜索port时只要比之前用这个port的TIME_WAIT状态的Socket记录的最近时间戳>1s,就可以重用此port...多配几台Backend/开启tcp_tw_reuse或许是不错的选择。 总结 应用再强大也还是承载在内核之上,始终逃不出Linux内核的樊笼。所以对于Linux内核本身参数的调优还是非常有意义的。

1.5K20

如何提升TCP四次挥手的性能?

有一种方式可以在建立新连接时,复用处于 TIME_WAIT 状态的连接,那就是打开 tcp_tw_reuse 参数。...tcp_tw_reuse 从协议角度理解是安全可控的,可以复用处于 TIME_WAIT 的端口为新的连接所用。 什么是协议角度理解的安全可控呢?...我们来看看开启了 tcp_tw_reuse 功能,如果四次挥手中的最后一次 ACK 在网络中丢失了,会发生什么?...上图的流程: 四次挥手中的最后一次 ACK 在网络中丢失了,服务端一直处于 LAST_ACK 状态; 客户端由于开启了 tcp_tw_reuse 功能,客户端再次发起新连接的时候,会复用超过 1 秒后的...所以大家都会说开启了 tcp_tw_reuse,可以在复用了 time_wait 状态的 1 秒过后成功建立连接,这 1 秒主要是花费在 SYN 包重传。

78240

TIME_WAIT过多的解决办法

但只能缓解问题,不能根本解决问题; 3)客户端程序中设置socket的SO_LINGER选项; 4)客户端机器打开tcp_tw_recycle和tcp_timestamps选项; 5)客户端机器打开tcp_tw_reuse...p=416 方法5: tcp_tw_reuse选项的含义如下(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt): tcp_tw_reuse...we fall back to VJ’s scheme and use initial timestamp retrieved from peer table. */ //从代码来看,tcp_tw_reuse...选项和tcp_timestamps选项也必须同时打开;否则tcp_tw_reuse就不起作用 //另外,所谓的“协议安全”,从代码来看应该是收到最后一个包后超过1s if (tcptw->tw_ts_recent_stamp...rx_opt.ts_recent_stamp = tcptw->tw_ts_recent_stamp; sock_hold(sktw); return 1; } return 0; } 总结一下: 1)tcp_tw_reuse

92020
领券