相关文章推荐
深情的鞭炮  ·  Install .NET Runtime ...·  1 月前    · 
爽快的绿豆  ·  linux kill命令__linux ...·  1 月前    · 
腼腆的烈马  ·  [Anaconda]——Linux下cond ...·  1 周前    · 
胆小的青椒  ·  linux报错 find: missing ...·  36 分钟前    · 
酷酷的毛巾  ·  Flink cep的初步使用 - ...·  1 年前    · 
有腹肌的竹笋  ·  Vulkan Samples 阅读 -- ...·  1 年前    · 
狂野的泡面  ·  状态报告 描述 ...·  1 年前    · 

今天在生产环境遇到了一个奇怪的网络现象,通过抓包发现,SYN包没有ACK。可以ping通,防火墙开放的情况下,基本确定对方服务器问题。
首先排除端口是否已经耗尽,发现仍有很多富余
那么可能就是linux内核网络参数tcp_tw_recycle捣鬼。登录对方主机发现这个参数的确被设置成1.

# sysctl -a|grep tcp_tw_recycle
net.ipv4.tcp_tw_recycle = 0

很多人对tcp_tw_recycle和tcp_tw_reuse区别不是很清楚。下面详细介绍一下。测试之前我们先将客户端的端口号范围限制一下

[root@server ~]# sysctl -w "net.ipv4.ip_local_port_range=32768 32768"
net.ipv4.ip_local_port_range = 32768 32768

只开放一个端口,然后访问任意一个服务,在tcp_tw_reuse和tcp_tw_recycle都关闭的情况下
在这里插入图片描述
可以看到服务只能访问一次,再次访问便报错。如果开启tcp_tw_reuse,那么便可以重复利用处于time_wait状态的连接。
在这里插入图片描述
即便是time_wait仍然可以复用。
而tcp_tw_recycle这个参数有点尴尬,4.x内核版本之后这个参数已经被废弃了,可见这个参数有点鸡肋甚至是危险。这个参数表明理解是time_wait回收,就是尽快的回收处于time_wait状态的连接,不用等两个MSL就关闭连接。但它的副作用是会拒绝所有比这个客户端时间戳更靠前的网络包。如果大家没有理解,我举个例子,如果服务器记录了10.10.10.10这个机器发过来最新的数据包是10:41那么如果从10.10.10.10过来数据包是这个时间之前是话,这个包将会被拒绝。那么好奇的读者又会问,这个包不应该是递增的吗?通常应该不会有问题,是这样,但如果是NAT的环境,你很难保障后端所有的机器的时钟是同步的,那么就会出现部分数据包被服务端拒绝的情况。所以这个参数请谨慎使用,不建议开启!!!

根据TCP/IP协议,连接断开之后,端口不会立刻被释放,而是处于TIME_WAIT状态,等待两分钟半后,才会被释放掉,才能被新连接使用。 而性能测试并发了3W连接,在3W连接因超时而关闭后,grinder又迅速请求3W连接,这时,已被占用的端口号未被释放,部分新建连接因为无法分配到端口号而失败。通过配置TCP_TW_REUSE参数,来释放TIME_WAIT状态的端口号给新连接使用 TCP_TW 浏览器打开 开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:   其一:连接超时   131148.00ms Tomcat Connection Pool   其二:连接耗时过长   DAL.getConnectionCost 64018ms 【问题分析】 通过监控数据汇总,出现此异常问题来自应用群集中的多台WE... 浏览器打开 <br /><br />tcp_tw_recycle参数引发的故障<br />By Eric <br />故障描述:<br />    2010年9月7日,新上线的手机游戏论坛有部分地区用户反应登陆游戏时出现不能登陆或登陆超时等情况,观察用户同时在线数量开始下降情况。<br /><br />排错过程:<br />    一、初步检查是否有变更导致的故障:  <br />        1、联系同事检查网络是否有问题或有对该机房网络是否有进行过调整,反回结果是没有变更操作。<br />        2、检查 浏览器打开 转载自:http://blog.sina.com.cn/s/blog_64e21d220102xb8m.html 如果在有大量并发的短链接情况下,服务器上的 TIME_WAIT 状态会很多,这会消耗很多系统资源。只要在网络上搜索一下,你就会发现,处理方式差不多都是设置两个参数:一个叫tcp_tw_reuse,另一个叫tcp_tw_recycle参数。本文主要讨论这两个参数带来的副作用。 浏览器打开 临近年关,人会变得浮躁,期间写的代码可谓乱七八糟。不过出来混始终是要还的,这不最近就发现一个PHP脚本时常连不上服务器。 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: shell> strace php /path/to/file EADDRNOTAVAIL (Cannot assign requested address) 从字面结果看似乎是网络资源相关问题。这里顺便 浏览器打开 linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 net.ipv4.tcp_fi... 浏览器打开 不要在linux上启用net.ipv4.tcp_tw_recycle参数发布于 2015/07/27莿鸟栖草堂本文为翻译英文BLOG《Coping with the TCP TIME-WAIT state on busy Linux servers》,但并非完整的翻译,译者CFC4N对原文理解后,进行了调整,增加了相关论点论据,跟原文稍有不同。翻译的目的,是为了... 浏览器打开   基本用途:如VPN、路由产品的利用;   出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包 浏览器打开 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。文章结构本文由以下三个部分组成1、讲解缓存更新策略2... 浏览器打开