时间戳引起的网站访问不了的问题

原创 2012年09月20日 15:48:36

针对有些用户能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三次握手的情况,所以做为提供服务的公司,不可能保证所有的用户都关闭时间戳,这个功能,所以我们必须关闭时间戳,这样才能给所用用户提供正常的服务。



使用该命令使其立马生效:/sbin/sysctl-p

 


时间戳引起的网站访问不了的问题(net.ipv4.tcp_timestamps)

针对有些用户能ping通我们的网站,但是连接时超时服务器没有任何响应,怀疑问题处在了了http的三次握手环节,这是决定通过抓包进行分析: 1、有问题机器的截图: 2、正常机器的截图: ...
  • jueshengtianya
  • jueshengtianya
  • 2015年12月31日 11:42
  • 4799

tcp_tw_recycle和tcp_timestamps的文章汇总

临近年关,人会变得浮躁,期间写的代码可谓乱七八糟。不过出来混始终是要还的,这不最近就发现一个PHP脚本时常连不上服务器。 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: shell...
  • caianye
  • caianye
  • 2014年08月13日 18:38
  • 13795

TCP timestamp

http://perthcharles.github.io/2015/08/27/timestamp-intro/ tcp_timestamps是在RFC 1323中定义的一个TCP选项。这篇w...
  • scdxmoe
  • scdxmoe
  • 2017年11月17日 11:19
  • 92

TCP/IP详解--TCP首部选项中时间戳选项的作用

在TCP选项字段中为TCP预留有时间戳功能,不管在网络层面还是应用层面,TCP时间戳往往被大家认为是一个系统行为,并忽略其存在。其实在某些环境下,TCP时间戳同样可以成为大家在时延问题troubles...
  • yusiguyuan
  • yusiguyuan
  • 2014年10月14日 11:40
  • 7880

TCP/IP详解--TCP首部的TimeStamp时间戳选项

TCP应该是以太网协议族中被应用最为广泛的协议之一,这里就聊一聊TCP协议中的TimeStamp选项。这个选项是由RFC 1323引入的,该C建议提交于1992年,到今天已经足足有20个年头。不过相信...
  • yusiguyuan
  • yusiguyuan
  • 2014年10月07日 12:35
  • 4653

从TCP三次握手说起——浅析TCP协议中的疑难杂症(真心不错)

【引言】 说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。那...
  • changyourmind
  • changyourmind
  • 2016年11月11日 11:15
  • 5691

NAT网关自动去掉TCP syn包的时间戳

猛士设计了Netfilter,在失眠的时候就有事做了,安息日应守为圣日,否则会激怒神,因此双休日我一般不学习和工作,相反,我会在午夜玩一些自己喜欢的东西。我没有受过洗,不是因为不是笃信者,没有安息夜....
  • dog250
  • dog250
  • 2014年02月07日 11:05
  • 8683

浅析TCP中时间戳选项timestamp

在TCP可选项字段中为TCP预留有时间戳功能。 1、TCP可选项格式: 关于TCP可选项字段的详细内容可以查看我的另一篇博客:浅析TCP头部可选项 时间戳选项占10个字节= kind(1字节) ...
  • Mary19920410
  • Mary19920410
  • 2017年08月16日 17:59
  • 492

tcp_tw_recycle检查tcp_timestamps的内核代码

注意:本文档中的内核代码的版本:linux-4.0.5两者的关系net.ipv4.tcp_tw_recycle是与net.ipv4.tcp_timestamps是密切相关的,而net.ipv4.tcp...
  • yygydjkthh
  • yygydjkthh
  • 2015年07月15日 02:08
  • 1259

linux地址重用 net.ipv4.tcp_tw_reuse

http://blog.csdn.net/caianye/article/details/38540867 http://www.cnblogs.com/lulu/p/4149312.html
  • pzqingchong
  • pzqingchong
  • 2016年12月12日 11:19
  • 2459
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:时间戳引起的网站访问不了的问题
举报原因:
原因补充:

(最多只允许输入30个字)