记一次TCP连接异常故障解决

为什么80%的码农都做不了架构师?>>>   hot3.png

一.情况表现为

    1.在公司内网对站点的http访问:

        linux主机出现故障:curl以及抓包分析,发现服务端不响应linux客户端的请求,无法建立TCP连接,浏览器返回“无法连接到服务器”

        windows主机正常

    2.http访问质量下降:

        基调显示,新架构上线后,访问质量下滑,主要表现为

        2.1.访问提示“无法连接到服务器”

        2.2.仅少数人遇到这种故障,并且一天中不是每次访问都会遇到,而是出现时好时坏的现象

二.处理过程

    直接上google搜索关键字“服务器无法建立TCP连接”。

    翻了几页后,发现这篇博文:“http://www.sunchis.com/html/os/linux/2012/0518/413.html”。

    看了一下,和我们公司内网的表现一模一样,但各种问题(1为这方面基础知识薄弱,2为没有时间验证此配置)

    然后这种问题持续了n久…一直以为是内部设备问题

    后期搞不定了,大胆在线上启用这个参数“net.ipv4.tcp_timestamps = 0”,做了下测试后,发现故障解除,原故障机每次访问都正常了!

    不过还是不明其中原理,只是大意了解,同样处于NAT上网方式的用户里(与别人共用出口IP地址),如果你的时间戳小于别人的,那么服务器不会响应你的TCP请求,要忽略此项,将net.ipv4.tcp_timestamps = 0(/etc/sysctl.conf)

三.总结

    后期学习时,看见了一个更加详细的博客,讲的很详细,也引入了新的问题:http://huoding.com/2012/01/19/142

    ====== 小抄 ======

    其实,linux服务器原本对时间戳(timestamps)默认是不开启的,Linux是否启用这种行为取决于tcp_timestamps和tcp_tw_recycle,因为tcp_timestamps缺省就是开启的,所以当tcp_tw_recycle被开启后,实际上这种行为就被激活了。

    net.ipv4.tcp_tw_recycle又是啥呢,搜索了一下基本上是TIME_WAIT连接的回收参数

    当 net.ipv4.tcp_timestamps 没有设置(缺省为开启),并且 net.ipv4.tcp_tw_recycle 也开启时,这个坑爹的错误就出现了,但是注意,只表现在NAT网络环境中。而且,大多数博客,以及一些大牛们,都有说过要开启 net.ipv4.tcp_tw_recycle …

    ====== 小抄 ======

四.未完成的事项

    上文 http://huoding.com/2012/01/19/142 中提到的:

    1.(未验证)关闭timestamps后,tw_recycle功能是失效的问题

    2.(未验证)新的解决TIME_WAIT连接过多的方法:net.ipv4.tcp_max_tw_buckets = 10000 设置一个最大值,不过坏处是系统日志会提示:TCP: time wait bucket table overflow

===============================================================

针对有些用户能ping通我们的网站,但是连接时超时服务器没有任何响应,怀疑问题处在了了http的三次握手环节,这是决定通过抓包进行分析:

1、有问题机器的截图:

2、正常机器的截图:

3、发现问题

从抓包数据发现,web服务器对出问题机器和正常机器系统的tcp syn包都返回ACK包,但存在问题发出的tcp syn包有时候响应,有时候不响应。不响应时,终端与web服务器之间的tcp连接无法正常建立,导致页面不能打开。对比这两种数据包,就在时间戳上有差异,存在问题的机器发出的tcp syn包带有时间戳,因此怀疑时间戳问题导致的故障。

4、解决问题

既然怀疑是时间戳导致的,那我们就着手分析如果将出现问题的机器的时间戳去掉会不会解决问题。针对带有时间戳的tcp syn包不响应的问题,查阅了相关资料得知产生问题的原因是出问题系统中的注册表中有Tcp1323opts这个选项,会导致其在发包时加入时间戳,经过nat之后,如果前面相同的端口被使用过,且时间戳大于这个链接发出的syn中的时间戳,服务器上就会忽略掉这个syn,不返会syn-ack消息,表现为用户无法正常完成tcp3次握手,从而不能打开web页面。在业务闲时,如果用户nat的端口没有被使用过时,就可以正常打开;业务忙时,nat端口重复使用的频率高,很难分到没有被使用的端口,从而产生这种问题。

目前看有两种方法解决:

(1)    是在服务器上修改变量

首先我们先查看一下我们服务器net.ipv4.tcp_timestamps的默认值,如果该值为0测说名不是该问题导致,如果是1我们需要将该值设置为1。

查看默认值的方法:[root@localhost ~]# cat /proc/sys/net/ipv4/tcp_timestamps

修改该值的方法:vim /etc/sysctl.conf  添加 net.ipv4.tcp_timestamps=0

(2)修改客户端的注册表Tcp1323Opts设置为0。

 

备注:

Tcp1323Opts

说明:该参数控制 RFC 1323 时间戳与窗口缩放选项。默认情况下,启用时间戳与

窗口缩放,但是可以使用标志位进行控制。0 位控制窗口缩放,1 位控制时间戳。

值为0(禁用 RFC 1323 选项)

值为1(仅启用窗口缩放)

值为2(仅启用时间戳)

值为3(两个选项均启用)

 

net.ipv4.tcp_timestamps=0

说明:时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。

值为0(禁用时间戳)

值为1(启用时间戳)

 

只有客户端和服务端都开启时间戳的情况下,才会出现能ping通不能建立tcp三次握手的情况,所以做为提供服务的公司,不可能保证所有的用户都关闭时间戳,这个功能,所以我们必须关闭时间戳,这样才能给所用用户提供正常的服务。

转载于:https://my.oschina.net/tsh/blog/1335116

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码) 基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着…

微软官方pe工具_微软官方下载工具

二、进入官网下载百度搜索“win10下载”进入微软官网win10下载地址,点击“立即下载工具”开始下载;三、运行软件下载完成后,右键以“管理员身份”打开,点击“接受”。四、选择用途选择第一个升级自己的电脑;选择第二个…

编程之美3——N!末尾有多少个0

因为n!是一个非常大的数,所以不能通过常规的方法,求出n!的值之后,再判断它的末尾有多少个0.这里的关键就是,n!的末尾有多少个0,取决于n!中,质因数 5 的个数。如:12!479001600 ,其…

Git之添加公钥之后git clone ****提示sign_and_send_pubkey: signing failed: agent refused operation

1 问题 在GitlLab上面添加了公钥之后,然后执行git clone *****提示下面的错误 sign_and_send_pubkey: signing failed: agent refused operation 2 解决办法 执行下面2个命令即可 eval "$(ssh-agent -s)" ssh-add ssh-agent是一种控制用来保存公钥身份验证所使…

mysql老是自动停止_ecs云服务器 mysql经常自动停止挂掉重启问题分析

我的ecs服务器为1g内存的配置,在部署了nginx,mysql,redis,node服务后跑起项目来,(mysql使用默认配置),每过几天便发现了经常会出现数据库自动停止挂掉,然后几分钟后重启的现象,与此同时ecs无法登陆,当然,网站也是无法访…

C#遍历指定文件夹中的所有文件

C#遍历指定文件夹中的所有文件 DirectoryInfo TheFolder=new DirectoryInfo(folderFullName); //遍历文件夹 foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories()) this.listBox1.Items.Add(NextFolder.Name); //遍历文件 foreach(FileInfo NextFile in TheFo…

Task.Factory.StartNewTResult 和 Task.RunTResult 到底有什么区别?

前言这不是和《Task.Factory.StartNew 和 Task.Run 到底有什么区别?》一样吗,怎么又写一篇?起先我也是这么觉得的,但实际发现并非如此。实现代码查看这 2 个方法的内部实现,其内部实现逻辑其实是一样的,只是…

大数据服务社会的一个有益实践

自从有了微信,很多人的生活习惯就发生了不同以往的变化。比如,早上起床后的第一件事,可能就是把积压的未读微信信息快速浏览一遍,该发的发、该转的转。笔者虽离开工作岗位,却依然总有时间不够用的感觉,所以…

python pysnmp使用

SNMP标准引入一组ASN.1语言元素,称之为SMI(Structure of Management Information)。由SMI描述的相互关联的被管对象(Managed Objects)组成MIB(Management Information Base)模块。核心MIB中经常…

Git之checkout到别的分支提示Your local changes to the following files would be overwritten by checkout:

1 问题 在我自己的分支,然后切换到主分支,提示错误如下 Your local changes to the following files would be overwritten by checkout:****file****file 2 解决办法 先把这些文件进行add操作,然后再进行commit,就可以了, git add filegit commit -m commit message 然后你…

javaweb连接不上mysql怎么办_java web应用连接mysql会突然connection连接失败

tomcat6.0mysql5.1项目:java web项目问题:原本项目运行了好几天了,一直没发现问题,突然今天报数据库连接异常,进入看日志发现### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransien…

【遥感物候】C#遥感数据GIMMS 3G NDVI头文件批量生成器(几何校正)

长时间序列全球NDVI数据GIMMS 3g(点击下载),原数据无投影,格式为VI3g,IE浏览器下载的为.txt格式。GIS软件无法直接打开,Envi 5可以打开。 ENVI中点击File->Open File as->Binary会弹出填写元数据的窗口,填写基本信息: Envi5.1中打开二进制(Binary)数据是,需要…

Kuzzle,一种内部部署的文档后端

Kuzzle是一种可以内部部署或是在云中运行的文档后端。在近期的CES 2017上,提供该平台的公司公布了其企业版解决方案。 Kuzzle用NoSQL仓库对文档做持久保存,支持基于模式的或是无模式的文档。Kuzzle提供CRUD API,并使用了Elasticsearch提供高级…

分享一个基于.NET6包含DDD,ES,CQRS等概念的开源项目

当你在学习DDD、CQRS或时间溯源时,除了大量的学习资源(比如书籍和文章)之外,你还接触到了许多概念,这些资源只是在讨论理论问题。这很好,我们知道他们在说什么,但我们如何在一个真正的项目中使用…

React Native之通过createStackNavigator实现携带参数的页面与页面之间的跳转

1 实现的功能 在网上看React Native文档,我特码就想实现一个页面到另外一个页面的跳转,然后另外一个页面怎么获取参数,特么没找到一个说清楚的,要么太复杂,要么说了不理解,下面是我自己写的一个App.js文件,实现一个Home页面跳到另外Details页面,并且携带了参数怎么在Details页…

google浏览器插件 开发 获取页面指定数据_程序员必备的4款Chrome插件,编程神器...

一直有粉丝留言,想要大侠推荐几款程序员使用的插件,大侠特意去问了隔壁的程序员哥哥,终于被我问出了这4款编程神器!这4款插件不仅仅是提高效率那么简单哦,还可以让你的Chrome浏览器变得高端大气,一起来看看…

强制类型转换问题

在c中,当把一个表示范围更大的类型的数值a赋值给一个表示范围更小的类型时,会自动进行强制类型转换,转化为范围表示更大的类型。 转换的规律是,这里假定较小的类型表示的数值的个数为n。转化后的值为a模n后的余数。 对于整型数a&a…

MATLAB多元非线性回归

解释变量:商品价格(x1)人均月收入(x2),被解释变量:商品需求量(y),进行二元回归分析,并进行检验 商品价格(元/件) 月收入(元) 需求(件) 89 …

媒体应用大数据,先解决三大难题

在大数据时代,互联网是骨骼,大数据则是血液。大数据的核心在于数据,具有海量、高频、在线、实时等特点,但是对于传统媒体来说,在运用大数据的过程中,存在着数据资源不足、数据平台欠缺和缺乏有竞争力的数据…

mysql之主从复制 简书_MySQL主从复制(传统)

拓扑结构:(一主多从)Mysql-master01 (192.168.43.123)Mysql-slave01 (192.168.43.124)Mysql-slave02 (192.168.43.125)版本信息:OS版本 : CentOS release 6.10 最小化安装Mysql版本: mysql-5.7.31-1.el6.x86_64.rpm…