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

问题现象:

访问一个我们新接入的业务接口,能ping通他们的站点,第一次telnet对端接口会通,第二次、第三次... 一直做下去就不通了,但是连接时超时服务器没有任何响应,怀疑问题出在了http的三次握手环节。

现象截图:

抓包的情况:

从抓包数据发现,出现问题的服务端的数据包来看 存在发出的tcpsyn包有时候响应,有时候不响应。不响应时,客户端与服务端之间的tcp连接无法正常建立,导致页面不能打开。从客户端抓包图里可以看到,发出去syn没有收到syn/ack,说明服务端就没有发ack,服务端是对端抓包,他们在网络入口也没有收到syn/ack,经过对比时间戳上有差异,发出的tcpsyn包带有时间戳,因此怀疑时间戳问题导致的故障

解决问题

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

解决问题的方式有两种:

1、优化内核参数net.ipv4.tcp_timestamps,首先我们先查看一下我们服务器net.ipv4.tcp_timestamps的默认值,如果该值为0则说明不是该问题导致,如果是1我们需要将该值设置为0。

查看方法:

cat /proc/sys/net/ipv4/tcp_timestamps

解决办法:

echo "net.ipv4.tcp_timestamps = 0" >>/etc/sysctl.conf  && sysctl  -p

0表示:禁用时间戳

1表示:禁用时间戳

TCP时间戳说明:

TCP时间戳选项会在TCP包头增加12个字节,以一种比重发超时更精确的方法来启用对RTT 的计算。

作用:

1、TCP时间戳位于TCP选项中,kind=8;lenth=10;data由timestamp和timestamp echo两个值组成,各4个字节的长度。
2、TCP时间戳理论作用有3个:序列号回绕,乱序的时间判断依据,避免确认二义性,以及计算RTT。

工作原理:

1、双方各自维护自己的时间戳,时间戳的值随时间单调递增(规定为1ms-1s/次,常见值为1ms、10ms)。
2、本端发送timesstamp值,对方收到后在后续的ACK的timestamp echo回应本端的值,并在timestamp中发送自己的时间戳。
3、TCP记录发送时间戳和收到回应的时间, 从而获得RTT。

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

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

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

值为0(禁用 RFC 1323 选项)

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

值为2(仅启用时间戳)

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

什么情况下出现这个问题:

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

通过这次报错分析分享大家几个不错的博客:

http://www.udpwork.com/item/6909.html

http://www.cnblogs.com/tolimit/p/5065761.html

http://www.cnblogs.com/lulu/p/4149312.html

时间: 2025-01-12 23:29:48

时间戳引起的网站访问不了问题的相关文章

雅虎十四条 - 14个优化网站性能提高网站访问速度的技巧

14个优化网站性能提高网站访问速度的技巧 又叫“雅虎十四条”,想起一年前那个懵懂的我,大四傻乎乎的跑到大学城面试前端,那个时候以为寒暑假看了两套CSS的视频,就很牛B了,出发先还把视频温了一下,嗯嗯,这是滑动门,嗯嗯这是绝对定位,嗯嗯这是浮动清除…… 当时是彪叔面试我的,当时我还不知道那个人,全身黑漆漆的,黑色T-shirt,黑色皮肤,黑色帽子,黑色墨镜,还有点黑色胡渣的人,就是彪叔,补做了试题后支支吾吾的跟他谈了一下,发现完全不行,第一个问题是“雅虎十四条”是什么?然后我蒙了,pardon?

一个简单的网站访问过程

对于我们一个简单的网站访问,涉及到的技术: 1.用户访问浏览器时,浏览器会向服务器发出一个 HTTP 请求: 2.服务器接收到 HTTP 请求,Web Server 进行相应的初步处理,使用服务器脚本生成页面: 3.服务器脚本(利用Web Framework)调用本地和客户端传来的数据,生成页面: 4.Web Server 将生成的页面作为 HTTP 响应的 body,根据不同的处理结果生成 HTTP header,发回给客户端: 5.客户端(浏览器)接收到 HTTP 响应,通常第一个请求得到的

开源网站访问统计系统Piwik

http://www.piwik.cn/ http://www.piwik.org/ Piwik 是一套基于 Php+MySQL 技术构建,能够与 Google Analytics 相媲美的开源网站访问统计系统.Piwik 可以给你详细的统计信息,比如网页浏览人数, 访问最多的页面, 搜索引擎关键词等等,并且采用了大量的AJAX/Flash技术,使得在操作上更加便易. Piwik 可以安装在你的服务器上面,数据就保存在你自己的服务器上 面.你可以非常容易的插入统计图表到你的博客或是网站后台的控制

加速网站访问的一些实践体会

自己运营过几个小站,没有任何盈利,为了节省成本,选择的配置比较低,带宽就1M. 前段时间,在个人官网首页搞了几张轮播图,图片还比较大,展示变得更慢了. 因此呢,想总结下关于加速网站访问的一些体会. 1.文件压缩  JS和CSS等静态资源进行压缩,网上有很多压缩工具,建议把压缩做成"可编程"的.  也可以开启gzip压缩,目前还没有尝试过. 大图片,也有必要压缩,现在的手机像素都很高,一张照片就有3MB以上,挺吓人的.  用Freemarker等图片处理工具,压缩下,很有必要.一定程度上

如何有效减少网页加载时间?20个提高网站访问速度的方法

网友上网都不喜欢用太多的时间等待网页的打开,等待的越长,用户可能会直接关闭网页,这样就会损失很多流量!其次,关键字的排名与网页的打开速度也有关系,这个主要体现搜索引擎对用户体验度上,用户体验度好,排名相对其它网站就好些.因此我觉得我们有必要去提高网页的打开速度,这个不需要太多的成本投入,只需要平时多注意一些小技巧就行了!下面给出20种方法帮你提高网站访问速度缩短网页加载时间. 1.减少页面HTTP请求数量 比较直接的理解就是要减少调用其他页面.文件的数量. A.我们在使用css格式控制的时候,经

Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案

原文地址:Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案 启用REWRITE的伪静态功能的时候,首页可以访问,而访问内页的时候,就提示:"No input file specified." 原因在于使用的PHP是fast_cgi模式,而在某些情况下,不能正确识别path_info所造成的错误,Wordpress的伪静态也有一样的问题. Wordpress程序默认的.htaccess里面的规则: 1 HTML " data

网站访问慢-MySQL负载高(实战)

   今日发现网站访问慢,一次进行了排查,开始思路混乱,下面来梳理下 一.故障分析 首先,判断访问慢现象,是个人还是集体??? 个人现象排查:检查个人网络,pc,浏览器.中毒等,无需多说自己百度: 集体现象排查:检查核心路由交换,ISP运行商网络,ARP攻击,DNS服务,各服务器状态: 服务状态排查:zabbix监控:创建测试页面测试: 静态页面=>动态页面=>动态交互页面 通过上述排查,当测试php与mysql动态交互页面很慢,所以确定为mysql服务器异常,立刻登录mysql,通过top命

2-12-配置squid代理服务器加快网站访问速度

本节所讲内容: squid服务器常见概念 squid服务器安装及相关配置文件 实战:配置squid正向代理服务器 实战:配置透明squid代理提升访问速度 实战:配置squid反向代理加速度内网web服务器访问速度 squid服务概述: 全称: squid cache,是一个流行的自由软件(GNU通用公共许可证). 主要有连个功能:  代理服务器 和 为web服务器提供缓存 应用广泛: 1. 共享网络资源,缓存万维网; 2.为web服务器前置缓存提高web服务器的访问速度; 3. 域名和其他网络

解决openstack 的 dashboard 使用了google 字体, 导致网站访问速度慢

openstack 的 dashboard 使用了google 字体, 导致网站访问速度慢 解决方案有几种: 去掉google字体,直接删除google字体 使用local字体替代 使用360字体替代 字体使用代码在css中,以ubuntu为例: /usr/share/openstack-dashboard/static/dashboard/css/7ac7b118466e.css @font-face {   font-family: 'Ubuntu';   font-style: norma