打开tcp_tw_recycle引起的一次投诉分析

背景:

我们有个基于oauth2.0协议给第三方授权以及信息的业务,年前对接入层、业务层做了次迁移。业务架构简单介绍下:

lvs接入---> nginx ---> tomcat

问题:

迁移完第1天,接到好几个合作商的投诉,其中有家说在他们业务集群中,有20%左右的失败率,日志显示连接被拒绝。


定位:

和开发商调试,telnet我方端口正常。curl发测试请求也正常。没办法,请开发商的运维同学tcpdump抓了几分钟的数据,
发过来分析。如下图

打开一看全是灰色...怪吓人的。从抓包看被server端rst的数据包也不少,这个就是为啥有20%左右连接被拒绝了。看这些
请求基本就是发出syn后server没回包。看到这个就有点怀疑server端是不是开启了tcp_tw_recycle和tcp_timestamps,马
上登录RS nginx机器查看,果然是打开的。把tcp_tw_recycle关闭,再联系开发商观察日志。ok了!

原因:
在TCPIP的标准RFC 1323里有这样的定义:
  An additional mechanism could be added to the TCP, a per-host
  cache of the last timestamp received from any connection.
  This value could then be used in the PAWS mechanism to reject
  old duplicate segments from earlier incarnations of the
  connection, if the timestamp clock can be guaranteed to have
  ticked at least once since the old connection was open.  This
  would require that the TIME-WAIT delay plus the RTT together
  must be at least one tick of the sender‘s timestamp clock.
  Such an extension is not part of the proposal of this RFC.
大概的中文意思就是:TCP协议中有一种机制,缓存了每个主机(即ip)过来的连接最新的timestamp值。这个缓存的值
可以用于PAWS(Protect Against Wrapped Sequence numbers,是一个简单的防止重复报文的机制)中,来丢弃当前连
接中可能的旧的重复报文。而Linux实现这个机制的方法就是同时启用net.ipv4.tcp_timestamps和net.ipv4.tcp_tw_recycle
这两个选项。

这种机制在 客户端-服务器 一对一的时候,没有任何问题,但是当服务器在负载均衡器后面时,由于负载均衡器不会修改
包内部的timestamp值,而互联网上的机器又不可能保持时间的一致性,再加上负载均衡是会重复多次使用同一个tcp端口
向内部服务器发起连接的,就会导致什么情况呢:

负载均衡通过某个端口向内部的某台服务器发起连接,源地址为负载均衡的内部地址——同一ip
假如恰巧先后两次连接源端口相同,这台服务器先后收到两个包,第一个包的timestamp被服务器保存着,第二个包又来了,
一对比,发现第二个包的timestamp比第一个还老——客户端时间不一致。服务器基于PAWS,判断第二个包是重复报文,
丢弃之
反映出来的情况就是在服务器上抓包,发现有SYN包,但服务器就是不回ACK包,因为SYN包已经被丢弃了。为了验证这
一结果,可以执行netstat -s | grep timestamp 命令,看输出里面passive connections rejected by timestamp 一项的数字变化。

参考:
1. http://saview.wordpress.com/2011/09/27/tcp_tw_recycle%E5%92%8Cnat%E9%80%A0%E6%88%90syn_ack%E9%97%AE%E9%A2%98/

时间: 2024-08-30 10:23:47

打开tcp_tw_recycle引起的一次投诉分析的相关文章

打开tcp_tw_recycle引起的一个问题

今天普空说了一个问题就是如果设置了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. 源码之前了无秘密

一个“文本文件”打开并且保存多元化的程序细节分析

实验目标:1)提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容.      2)当用户点击"OK"按钮的时候,比较当前文件是否被修改过,如果修改过,则提示"覆盖保存"."放弃保存"或"另存为"并实现其功能. import easygui as g import os file_path = g.fileopenbox(default="e:/pathonaaa/a/") with op

c++反汇编与逆向分析 小结

第一章  熟悉工作环境和相关工具1.1 熟悉OllyDBG  操作技巧1.2 反汇编静态分析工具 IDA(最专业的逆向工具)    快捷键    功能     Enter     跟进函数实现     Esc       返回跟进处    A         解释光标处的地址为一个字符串的首地址     B         十六进制数与二进制数转换    C         解释光标处的地址为一条指令     D         解释光标处的地址为数据,没按一次将会转换这个地址的数据长度   

数据库join方式分析

前言    不管是博客园还是CSDN,看到很多朋友对数据库的理解.认识还是没有突破一个瓶颈 ,而这个瓶颈往往只是一层窗纸,越过了你将看到一个新世界.    04.05年做项目的时候,用SQL Server 2000,核心表(大部分使用频繁的关键功能每 次都要用到)达到了800万数据量,很早以前查过一些相关表,有的达到了3000多万,磁 盘使用的光纤盘,100G空间,每周必须备份转移数据,否则100G空间一周会满掉,这个 系统几年来,目前仍然保持非常良好的性能.还听说过朋友的SQL Server

net.ipv4.tcp_tw_recycle

原创 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对原文理解后,进行了调整,增加了相关论点论据,跟原文稍有不同.翻译的目的,是为了加深自己知识点的记忆,以及分享给其他朋友,或许对他们也有

LR实战之Discuz开源论坛——网页细分图结果分析(Web Page Diagnostics)

续LR实战之Discuz开源论坛项目,之前一直是创建虚拟用户脚本(Virtual User Generator)和场景(Controller),现在,终于到了LoadRunner性能测试结果分析(Analysis)这部分了. LoadRunner结果分析图表功能中最重要图表分析之一,就是网页诊断细分图,在Controller场景设计运行之前,需要在菜单栏中设置启用网页诊断功能(诊断-网页诊断-启动),如图: 网页细分图,是显示每个页面及其组件的相关下载时间和大小,主要用来评估页面内容是否影响事务

Android布局分析工具HierarchyView

Android SDK中有一个工具HierarchyView.bat,可以分析出模拟器中运行程序的界面设计层次:我们可以用此工具来分析自己的应用布局是否有优化的空间,也可以分析别人优秀的布局进行借鉴和学习. 使用HierarchyView.bat 非常简单: 1.启动模拟器: 2.运行要分析的程序: 3.在SDK目录下(如D:\AndroidHome\android-sdk-windows\tools)打开HierarchyView.bat: 4.选中要分析的程序名,点击Load View Hi

Android应用开发性能优化完全分析

 应用UI性能问题分析 UI可谓是一个应用的脸,所以每一款应用在开发阶段我们的交互.视觉.动画工程师都拼命的想让它变得自然大方美丽,可是现实总是不尽人意,动画和交互总会觉得开发做出来的应用用上去感觉不自然,没有达到他们心目中的自然流畅细节:这种情况之下就更别提发布给终端用户使用了,用户要是能够感觉出来,少则影响心情,多则卸载应用:所以一个应用的UI显示性能问题就不得不被开发人员重视. 2-1 应用UI卡顿原理 人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然

Android 应用开发性能优化完全分析

1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也还是有很多的,譬如Google官方都已经推出了优化专题,我这里只是总结下自的感悟而已,若有得罪欢迎拍砖,我