tcp_timestamps和tcp_tw_recycle】的更多相关文章

不同时开启tcp_timestamps和tcp_tw_recycle的场景描述 FULL NAT下 FULL NAT  在client请求VIP 时,不仅替换了package 的dst ip,还替换了package的 src ip:但VIP 返回给client时也替换了src ip lvs后端为web服务器. 假如web服务器开启了tcp的tcp_timestamps和tcp_tw_recycle这两个参数.那么存在下面这种情况 RFC1323中有如下一段描述: An additional me…
环境:centos7.4 内核版本3.10 最近看内核参数tcp_tw_recycle(该参数在内核 4.12 之后被移除),它用于快速回收处理TIME_WAIT状态的socket.搜索该参数相关的资料,发现同时启用该参数和tcp_timestamps后有可能在NAT环境下导致客户端始连接失败,抓包表现为:客户端一直发送SYN报文,但服务端不响应.但这些文章中只给出了如何解决问题,并没有给出如何复现问题.特别怪异的是,服务端是被动关闭的,并不会进入TIME_WAIT状态,到底怎么产生的呢? 先使…
文章转载自:https://segmentfault.com/a/1190000022264813…
    临近年关,人会变得浮躁,期间写的代码可谓乱七八糟.不过出来混始终是要还的,这不最近就发现一个PHP脚本时常连不上服务器. 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: shell> strace php /path/to/file EADDRNOTAVAIL (Cannot assign requested address) 从字面结果看似乎是网络资源相关问题.这里顺便介绍一点小技巧:在调试的时候一般是从后往前看strace命令的结果,这样更容易找到有价值的信息. 查看一下…
现在很多公司都用LVS做负载均衡,通常是前面一台LVS,后面多台后端服务器,这其实就是NAT,当请求到达LVS后,它修改地址数据后便转发给后端服务器,但不会修改时间戳数据,对于后端服务器来说,请求的源地址就是LVS的地址,加上端口会复用,所以从后端服务器的角度看,原本不同客户端的请求经过LVS的转发,就可能会被认为是同一个连接,加之不同客户端的时间可能不一致,所以就会出现时间戳错乱的现象,于是后面的数据包就被丢弃了,具体的表现通常是是客户端明明发送的SYN,但服务端就是不响应ACK,还可以通过下…
ss -tan 反映出来的情况就是在服务器上抓包,发现有SYN包,但服务器就是不回ACK包,因为SYN包已经被丢弃了.为了验证这一结果,可以执行netstat -s | grep timestamp 命令,看输出里面passive connections rejected by timestamp 一项的数字变化. http://www.tuicool.com/articles/3eYRb2A tcp_tw_recycle和tcp_timestamps的文章汇总 问题分析到这里基本就清晰了,解决…
下面是我的理解,可能有误,仅供参考. 要调优,三次/四次握手必须烂熟于心. client                  server(SYN_SENT)      —>  (SYN_RECV)(ESTABLISHED)   <——>  (ESTABLISHED) client(主动)            server(FIN_WAIT_1)    —>    (CLOSE_WAIT)(FIN_WAIT_2)    <—(TIME_WAIT)     <—    (…
TCP四次挥手: Time_wait产生原因及作用: 1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态.MSL值得是数据包在网络中的最大生存时间.产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用. 2.time_wait状态产生的原因 1)为实现TCP全双工…
减少TIME_WAIT连接状态.网络上已经有不少相关的介绍,大多是建议: shell> sysctl net.ipv4.tcp_tw_reuse=1 shell> sysctl net.ipv4.tcp_tw_recycle=1 注:通过sysctl命令修改内核参数,重启后会还原,要想持久化可以参考前面的方法. 这两个选项在降低TIME_WAIT数量方面可以说是立竿见影,不过如果你觉得问题已经完美搞定那就错了,实际上这样可能会引入一个更复杂的网络故障. 关于内核参数的详细介绍,可以参考官方文档…
比如:客户端与服务端进行握手时,经常无法握手成功,收不到回复: 需要建立保活机制. 1. 服务端Linux服务器新增系统内核参数配置. 在/etc/sysctl.conf文件中再添加如: #允许的持续空闲时长,在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2h). net.ipv4.tcp_keepalive_time= #在tcp_keepalive_time之后,没有接收到对方确认,继续发…
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT问题. 短连接最大的优点是方便,特别是脚本语言,由于执行完毕后脚本语言的进程就结束了,基本上都是用短连接.但短连接最大的缺点是将占用大量的系统资源,例如:本地端口.socket句柄.导致这个问题的原因其实很简单:tcp协议层并没有长短连接的概念,因此不管长连接还是短连接,连接建立…
关于上面现象的分析如下 问题描述: 接口偶发性出现接口耗时过长的情况 根源: “sockets的快速回收”机制被启动 简单代码+数据分析: 1.      经简单分析,耗时主要出现在连接数据库的方法:mysql_connect 2.      耗时基本为3s(3.001s,2.999s,3.000s) 进一步分析: 由于耗时出现在php的mysql_connect函数上,从代码上基本上可以确认非业务逻辑问题: 可能情况: 1.Mysql_connect具体实现问题 经查看具体代码,未发现有异常.…
原文链接:Kubernetes 网络疑难杂症排查分享 大家好,我是 roc,来自腾讯云容器服务 (TKE) 团队,经常帮助用户解决各种 K8S 的疑难杂症,积累了比较丰富的经验,本文分享几个比较复杂的网络方面的问题排查和解决思路,深入分析并展开相关知识,信息量巨大,相关经验不足的同学可能需要细细品味才能消化,我建议收藏本文反复研读,当完全看懂后我相信你的功底会更加扎实,解决问题的能力会大大提升. 本文发现的问题是在使用 TKE 时遇到的,不同厂商的网络环境可能不一样,文中会对不同的问题的网络环境…
1.什么是proc目录proc是Linux系统下一个很重要的目录.它跟/etc, /home等这些系统目录不同,它不是一个真正的文件系统,而是一个虚拟的文件系统.它不存在于磁盘,而是存在于系统内存中,难怪文件夹的名字叫做proc进程.所以当你使用 ls -al /proc这条命令来查看proc目录时,会看到其下面的所有文件的大小都为0字节. proc以文件系统的方式为访问系统内核的操作提供接口.很多系统的信息,如内存使用情况, cpu使用情况,进程信息等等这些信息,都可以通过查看/proc下的对…
前言 和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题.笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题.在此将排查过程发出来,希望读者遇到此问题的时候,能够知道如何入手. 起因 笔者的新系统上线,需要PE执行操作.但是负责操作的PE确和另一个开发在互相纠缠,让笔者等了半个小时之久.本着加速系统上线的想法,就想着能不能帮他们快速处理掉问题,好让笔者早点发完回去coding.一打听,这个问题竟然扯了3个月之久,问题现象如下: 每个client都会以将近1/2的概率失败,而…
解Bug之路-NAT引发的性能瓶颈 笔者最近解决了一个非常曲折的问题,从抓包开始一路排查到不同内核版本间的细微差异,最后才完美解释了所有的现象.在这里将整个过程写成博文记录下来,希望能够对读者有所帮助.(篇幅可能会有点长,耐心看完,绝对物有所值~) 环境介绍 先来介绍一下出问题的环境吧,调用拓扑如下图所示: 调用拓扑图 合作方的多台机器用NAT将多个源ip映射成同一个出口ip 20.1.1.1,而我们内网将多个Nginx映射成同一个目的ip 30.1.1.1.这样,在防火墙和LVS之间,所有的请…
不同时开启tcp_timestamps和tcp_tw_recycle的场景描述 FULL NAT下 FULL NAT  在client请求VIP 时,不仅替换了package 的dst ip,还替换了package的 src ip:但VIP 返回给client时也替换了src ip lvs后端为web服务器. 假如web服务器开启了tcp的tcp_timestamps和tcp_tw_recycle这两个参数.那么存在下面这种情况 RFC1323中有如下一段描述: An additional me…
文章转载自:https://blog.csdn.net/jueshengtianya/article/details/52130667 最近在分析客户的一个问题时遇到了一种奇怪的情况,客户在服务端开启了某个端口,但是在客户端telnet确一直不通.通过在服务端抓包发现,客户端的syn分节已经到达,但是服务端并没有应答.查看了一下当前连接数,发现连接数也不大,所以排除是连接队列满造成的.后来忽然想起了net.ipv4.tcp_tw_recycle选项可能引起这个问题,于是关闭了这个选项,问题果然得…
把服务里面的net.ipv4.tcp_timestamps这个参数设置为0后已经可以正常telnet通了. 具体设置方法: 在/etc/sysctl.conf  里面加入 net.ipv4.tcp_timestamps =0 让后使用sysctl -p 生效就可以了.   原理是主机client1和client2通过NAT网关(1个ip地址)访问serverN,由于timestamp时间为系统启动到当前的时间,因此,client1和client2的timestamp不相同:根据上述syn包处理源…
(2012-02-01 18:40:32)     近来线上陆续出现了一些connect失败的问题,经过分析试验,最终确认和proc参数tcp_tw_recycle/tcp_timestamps相关:1. 现象    第一个现象:模块A通过NAT网关访问服务S成功,而模块B通过NAT网关访问服务S经常性出现connect失败,抓包发现:服务S端已经收到了syn包,但没有回复synack:另外,模块A关闭了tcp timestamp,而模块B开启了tcp timestamp:    第二个现象:不…
注意:本文档中的内核代码的版本号:linux-4.0.5 /************************************************* * Author : Samson * Date : 07/14/2015 * Test platform: * gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 * GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) * Nginx version: * Nginx 1…
linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 表示开启重用.允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 net.ipv4.tcp_fin_timeout = 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间(可改为30,一般来说FIN-WAI…
原创 2016-03-07 CFC4N 运维帮 本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,(http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html)但并非完整的翻译,译者CFC4N对原文理解后,进行了调整,增加了相关论点论据,跟原文稍有不同.翻译的目的,是为了加深自己知识点的记忆,以及分享给其他朋友,或许对他们也有…
不要在linux上启用net.ipv4.tcp_tw_recycle参数  2015/07/27  CFC4N 本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,但并非完整的翻译,译者CFC4N对原文理解后,进行了调整,增加了相关论点论据,跟原文稍有不同.翻译的目的,是为了加深自己知识点的记忆,以及分享给其他朋友,或许对他们也有帮助.文章比较长,没耐心请点关闭. 不要启用 net.ipv4.tcp_tw…
背景: 我们有个基于oauth2.0协议给第三方授权以及信息的业务,年前对接入层.业务层做了次迁移.业务架构简单介绍下: lvs接入---> nginx ---> tomcat   问题: 迁移完第1天,接到好几个合作商的投诉,其中有家说在他们业务集群中,有20%左右的失败率,日志显示连接被拒绝. 定位: 和开发商调试,telnet我方端口正常.curl发测试请求也正常.没办法,请开发商的运维同学tcpdump抓了几分钟的数据, 发过来分析.如下图打开一看全是灰色...怪吓人的.从抓包看被se…
今天普空说了一个问题就是如果设置了tcp_tw_recycle ,那么如果客户端是NAT出来的,那么就可能会出现连接被直接rst的情况.然后我google了下,在内核列表也有人说了这个问题 https://lkml.org/lkml/2008/11/15/67 The big problem is that both are incompatible with NAT. So if you ever talk to any NATed clients don’t use it. 源码之前了无秘密…
不要在linux上启用net.ipv4.tcp_tw_recycle参数 发布于 2015/07/27 莿鸟栖草堂 本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers>,但并非完整的翻译,译者CFC4N对原文理解后,进行了调整,增加了相关论点论据,跟原文稍有不同.翻译的目的,是为了加深自己知识点的记忆,以及分享给其他朋友,或许对他们也有帮助.文章比较长,没耐心请点关闭. 不要启用 net.ipv4.tcp_…
记录一次阿里云服务器故障排查思路 公司网络是nat 环境 问题: 同一个服务有两台服务器 172.19.19.252 172.19.19.187 两台服务器 要连node5 发现172.19.19.252 这台服务器连不通 思路: 1.两台服务器是同一个安全组 环境相同 所以排除安全组 防火墙的问题 2. ping node5 发现可以ping通 telnet 不通 tcpdump 抓包 尝试抓包,主机能收到,但是没有给出响应, 之后添加参数 在node5 机器上添加参数 vi /etc/sys…
被抛弃的tcp_recycle_小米云技术-CSDN博客_sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recy https://blog.csdn.net/pengzhouzhou/article/details/85229437 1.背景 最近准备搭建一个新的kubernetes集群,将内核从3.18更新到了4.14版本,并执行一些常规的优化操作.在执行sysctl -p操作时突然报错如下: sysctl: cannot stat /proc/s…
最近发现几个监控用的脚本在连接监控数据库的时候偶尔会连不上,报错: Couldn't connect to host:3306/tcp: IO::Socket::INET: connect: Cannot assign requested address查看了一下发现系统中存在大量处于TIME_WAIT状态的tcp端口$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 50013ESTABL…