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

tcp_tw_recycle和tcp_timestamps导致connect失败问题

://blog.sina.com.cn/s/blog_781b0c850100znjd.html 近来线上陆续出现了一些connect失败的问题,经过分析试验,最终确认和proc参数tcp_tw_recycle...分析 根据现象上述问题明显和tcp timestmap有关;查看linux 2.6.32内核源码,发现tcp_tw_recycle/tcp_timestamps都开启的条件下,60s内同一源...client2通过NAT网关(1个ip地址)访问serverN,由于timestamp时间为系统启动到当前的时间,因此,client1和client2的timestamp不相同;根据上述syn包处理源码,在tcp_tw_recycle...解决方法 echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle; tcp_tw_recycle默认是关闭的,有不少服务器,为了提高性能,开启了该选项; 为了解决上述问题,...个人建议关闭tcp_tw_recycle选项,而不是timestamp;因为 在tcp timestamp关闭的条件下,开启tcp_tw_recycle是不起作用的;而tcp timestamp可以独立开启并起作用

1.5K40

linux开启tcp_timestamps和tcp_tw_recycle引发的问题研究

环境:centos7.4 内核版本3.10 最近看内核参数tcp_tw_recycle(该参数在内核 4.12 之后被移除),它用于快速回收处理TIME_WAIT状态的socket。...POSTROUTING -d 10.85.3.111 -p tcp -m tcp --dport 19090 -j SNAT --to 10.85.3.51 首先开启tcp_timestamps,关闭tcp_tw_recycle...当启用tcp_tw_recycle后,系统会在一个RTO的极短时间内回收处于TIME_WAIT状态的socket,但仍然无法杜绝接收到上一个连接在链路上滞留的报文。...进而可以得出: 在NAT场景下一定不能启用tcp_tw_recycle; NAT场景下单独启动tcp_timestamps不会影响正常使用,连接断链后会在2MSL过后回收socket; 生产中不要使用...tcp_tw_recycle,即使没有使用到NAT设备,但当前虚拟化环境下用到NAT的地方很多,如kubernetes的service等 TIPS: 为了复现如上问题,曾尝试过使用1.17.0版本的nginx

2.1K20

缓存服务器syns to listen sockets drop导致创建socket失败

发送http请求); 于是我们的重点是解决用户给or的syn包丢失的问题; 我们从网上查找原因,查到了最有可能的原因: :因为2.6内核以上中tcp_timestamps默认是打开的,所以当打开 tcp_tw_recycle...时会导致部分通过NAT上网client无法正确连接服务器,故障表现为client发出SYN后无法收到server返回 的SYN+ACK,推荐的解决方法是关闭tcp_tw_recycle,打开tcp_tw_reuse...我们将/proc/sys/net/ipv4/tcp_tw_recycle修改为0,drop情况就不发生了; 然后查看tw个数: netstat -n | awk '/^tcp/ {++S[$NF]}...下面我们总结一下: tcp_tw_recycle 设置为 1 会开启系统对 TIME_WAIT 状态的 socket 的快速回收。...tcp_tw_reuse和tcp_tw_recycle区别: 1. tw_reuse,tw_recycle 必须在客户端和服务端timestamps 开启时才管用(默认打开) 2. tw_reuse

2.6K60

靓仔! 能跳出TIME-WAIT的坑吗

本文只做简单学习测试, 不保证内容的全面性及正确性, 不要轻易修改正式环境内核配置 今天主要对两个 Linux 内核的配置 tcp_tw_reuse 和 tcp_tw_recycle 进行测试讲解 2....开启 tcp_tw_recycle 开启 tcp_tw_recycle echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle 进行测试 ?...值为 rto, 这是一个非常短的一个时间, 否则为 TCP_TIMEWAIT_LEN , 还记得文章开头提到的宏定义的时间吗, 没错, 这里指的就是那个60s. 5. tcp_tw_reuse 与 tcp_tw_recycle...参数 功能 tcp_tw_reuse 复用(reuse),不改变 TIMEWAIT 状态 tcp_tw_recycle 回收(recycle),最快时间回收 net.ipv4.tcp_timestamps...是怎么工作的 如果开启了 tcp_tw_recycle, 则内核会记住客户端上次发来数据包的时间戳, 如果发来的数据包时间戳小于内核记录的最后发来的数据包时间戳, 那么将会丢弃此数据包, 这种情况在

1.3K20

解Bug之路-记一次调用外网服务概率性失败问题的排查

查了下资料发现这是由于设置了 tcp_timestamps == 1 && tcp_tw_recycle == 1 在NAT情况下将会导致这个被动拒绝连接的问题。...而为解决上面的dmesg日志,网上给出的解决方案就是设置tcp_tw_recycle=1而tcp_timestamps默认就是1,同时我们的客户端调用也是从NAT出去的,符合了这个问题的所有特征。...为什么nginx2调用其它服务是正常的 因为其它外部服务所在服务器并没有开启tcp_tw_recycle。这个问题事实上将tcp_tw_recycle置为0也可以解决。...另外,高版本的linux内核已经去掉了tcp_tw_recycle这个参数。...总结 由于当前ip地址紧缺和DNS报文大小的限制(512字节),大部分网络架构都是采用NAT的方式去和外部交互,所以设置了tcp_tw_recycle为1基本都会出现问题。

54130

记一次调用外网服务概率性失败问题的排查

查了下资料发现这是由于设置了 tcp_timestamps == 1 && tcp_tw_recycle == 1 在NAT情况下将会导致这个被动拒绝连接的问题。...而为解决上面的dmesg日志,网上给出的解决方案就是设置tcp_tw_recycle=1而tcp_timestamps默认就是1,同时我们的客户端调用也是从NAT出去的,符合了这个问题的所有特征。...为什么nginx2调用其它服务是正常的 因为其它外部服务所在服务器并没有开启tcp_tw_recycle。这个问题事实上将tcp_tw_recycle置为0也可以解决。...另外,高版本的linux内核已经去掉了tcp_tw_recycle这个参数。...总结 由于当前ip地址紧缺和DNS报文大小的限制(512字节),大部分网络架构都是采用NAT的方式去和外部交互,所以设置了tcp_tw_recycle为1基本都会出现问题。

57230

可恶,又被小林装到了!

我当时就怀疑是因为服务端开启了 tcp_tw_recycle 参数,导致服务端的 TIME_WAIT 状态被快速回收了,并没有经过完整的 2MSL (60秒)时长的 TIME_WAIT 状态。...所以, 我就让读者去确认下,服务端是否开启了 tcp_tw_recycle 参数。 好家伙,经过读者的确认后,发现服务端真的开启了 tcp_tw_recycle 参数。...那么抓包图的现象就可以很好解释了,就是因为服务端开启了 tcp_tw_recycle 这个参数,导致服务端的 TIME_WAIT 状态被快速回收了,可能经过不到几秒,服务端就进入到 CLOSED 状态了...最终,经过读者确认后,发现服务端确实开启 tcp_tw_recycle 参数。...不过,tcp_tw_recycle 状态还是不建议大家开启的,因为在 NAT 的网络下是不安全的,在 Linux 4.12 版本后,直接取消了这一参数。

22820

Linux上TCP的几个内核参数调优

sys/net/core/somaxconn 2048 1.3 /proc/sys/net/ipv4/tcp_abort_on_overflow 1 2.1 /proc/sys/net/ipv4/tcp_tw_recycle...tcp_tw_recycle tcp_tw_recycle这个参数一般是用来抑制TIME_WAIT数量的,但是它有一个副作用。...即在tcp_timestamps开启(Linux默认开启),tcp_tw_recycle会经常导致下面这种现象。 ?...也即,如果你的Server开启了tcp_tw_recycle,那么别人如果通过NAT之类的调用你的Server的话,NAT后面的机器只有一台机器能正常工作,其它情况大概率失败。...在tcp_tw_recycle=1同时tcp_timestamps(默认开启的情况下),对同一个IP的连接会做这样的限制,也即之前后建立的连接的时间戳必须要大于之前建立连接的最后时间戳,但是经过NAT的一个

5.9K294

解Bug之路-记一次调用外网服务概率性失败问题的排查

查了下资料发现这是由于设置了 tcp_timestamps == 1 && tcp_tw_recycle == 1 在NAT情况下将会导致这个被动拒绝连接的问题。...而为解决上面的dmesg日志,网上给出的解决方案就是设置tcp_tw_recycle=1而tcp_timestamps默认就是1,同时我们的客户端调用也是从NAT出去的,符合了这个问题的所有特征。...为什么nginx2调用其它服务是正常的 因为其它外部服务所在服务器并没有开启tcp_tw_recycle。这个问题事实上将tcp_tw_recycle置为0也可以解决。...另外,高版本的linux内核已经去掉了tcp_tw_recycle这个参数。...总结 由于当前ip地址紧缺和DNS报文大小的限制(512字节),大部分网络架构都是采用NAT的方式去和外部交互,所以设置了tcp_tw_recycle为1基本都会出现问题。

1.7K20

业务经过CLB出现概率性timeout

grep passive 查看因为时间戳导致的被动拒绝会话; 0.png 通过上述现象基本确认是因为时间戳问题导致连接无法建立导致业务超时,通过系统内命令cat /proc/sys/net/ipv4/tcp_tw_recycle...0.png 开启时间戳和快速回收机制后,根据现象上述问题明显和tcp timestmap有关;查看linux 2.6.32内核源码,发现tcp_tw_recycle/tcp_timestamps都开启的条件下...(Linux 从4.12内核版本开始移除了 tcp_tw_recycle 配置),60s内同一源ip主机的socket connect请求中的timestamp必须是递增的。...大于本次tcp; 问题现象1总结:client通过两个LB访问同一个RS,由于timestamp时间为系统启动到当前的时间,经过LB1和LB2的timestamp不相同;根据上述syn包处理源码,在tcp_tw_recycle...提示:Linux 从4.12内核版本开始移除了 tcp_tw_recycle 配置,因为这个系统参数开启带来的未知风险太大。觉得有用请帮忙点赞,谢谢!

1.6K93
领券