Linux同时开启tcp_tw_recycle和tcp_timestamps导致TCP syn有时不响应故障排查
问题描述
前几天,同事反馈从公司连接线上一台服务器有时候会失败,经过抓包发现,TCP握手过程失败。查了相关资料,发现是跟net.ipv4.tcp_tw_recycle
和net.ipv4.tcp_timestamps
两个参数有关,将net.ipv4.tcp_tw_recycle
改为0,问题解决。
排查过程
在PC上通过wireshark抓包发现,失败的时候,TCP syn包是一直在重传的。在server端通过tcpdump抓包发现,PC侧发的syn包是已经到达,所以基本排除网络问题。tcpdump抓包中确实看不到server端响应的syn-ack,所以基本判定问题出在server段,接下来就是分析为啥server端不响应。
当net.ipv4.tcp_tw_recycle = 1
和net.ipv4.tcp_timestamps = 1
同时间开启,当多个PC经过NAT设备访问同一server的时候,受TCP PAWS(Protect Against Wrapped Sequence Numbers)影响,后发起连接的PC可能因为tcp options中的timestamp比前面PC的timestamp小,而导致syn不被响应。
linux服务器上可以通过netstat -s
查看是否存在该问题。如果多次执行下面的命令,发现数字再增加,说明存在该问题,而且现在还在发生。
[root@anonymous ~]# netstat -s | grep "connections rejected because of time stamp"26 passive connections rejected because of time stamp
[root@anonymous ~]#
关于PAWS的检查机制,是对于处于TIME_WAIT状态的tcp连接的对端IP,为了防止来自同一IP的延迟数据的干扰,需要在60秒(#define TCP_PAWS_MSL 60)内新来的syn报文TCP options中的timestamp是递增的。详细解释可以参考RFC1323。
注意
排查过程中发现,windows系统和linux系统TCP syn options中timestamp是单调递增的,所以刚才描述的问题通常在多个PC经过NAT访问同一server的时候才容易复现。而测试中发现Mac系统本身syn报文options中的timestamp波动比较大,所以此问题很容易用Mac复现,只需要对着开启recycle和tcp_timestamps的server连续发起几次请求就可以。
总结
该问题将net.ipv4.tcp_tw_recycle
或net.ipv4.tcp_timestamps
改为0都可以解决,不建议将net.ipv4.tcp_timestamps
改为0,因为它对精准计算RTT(Round-Trip Time))有用。此外,tcp_tw_recycle
从4.12版本内核开始被移除了。我找了一个5.14版本的测试了下,确实不支持该配置了。
[root@test ~]# sysctl -p
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory
[root@test ~]#
Linux同时开启tcp_tw_recycle和tcp_timestamps导致TCP syn有时不响应故障排查相关推荐
- tcp_tw_recycle和tcp_timestamps导致connect失败问题
近来线上陆续出现了一些connect失败的问题,经过分析试验,最终确认和 proc参数tcp_tw_recycle/tcp_timestamps相关: 1. 现象 第一个现象 模块A通过NAT网关访问 ...
- Java进程CPU占用高导致的网页请求超时的故障排查
作者:荣书 来源:https://blog.51cto.com/rongshu/2426712 一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load a ...
- 记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程
环境描述 某公司有一套系统,2台Windows2003系统,采用自带的群集管理器功能实现双机热备功能,正常情况下,服务器10.1.1.1承载中间件应用服务,服务器10.1.1.2承载数据库服务,仅当其 ...
- mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查
一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多.  二.定位故障 根据这 ...
- Linux C/C++编程:netstat分析tcp状态转移(socket通信)
TCP 服务器 #include <stdlib.h> #include <stdio.h> #include <sys/socket.h> #include &l ...
- Linux内存耗尽宕机6,转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案...
原文链接: https://blog.csdn.net/u014740338/article/details/66975550 问题描述 Linux内存使用量超过阈值,使得Java应用程序无可用内存, ...
- Linux TCP SYN包不返回问题解析
http://www.saview.net/archives/93 Linux TCP SYN包不返回问题解析 现象描述及排查过程: 最早是在网站图片cache集群中出现监控系统偶尔报告vip连接超时 ...
- Linux 网络编程学习笔记——三、TCP 协议详解
目录 一.TCP 服务的特点 传输层协议主要有 TCP 协议和 UDP 协议,前者相对于后者的特点是:面向连接.字节流和可靠传输. 使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写. ...
- 如何起Linux服务器的21端口,linux下开启ftp的21号端口
linux下开启ftp的21号端口 1.先运行vsftpd服务: #service vsftpd start 2.通过iptables开放21号端口 (1) 先查看iptables设置: #iptab ...
最新文章
- 雪碧图工具sprity(20151201更新修复了同时合并多张图的bug)
- 数组去重是面试中经常问到的问题
- Web Hacking 101 中文版 九、应用逻辑漏洞(一)
- python读取坐标文本文件_使用python读取txt坐标文件生成挖空矿山_探矿批量
- 这儿有一个使你网页性能提升10倍的工具
- ant vue 树形菜单横向显示_丝滑般 Vue 拖拽排序树形表格组件Vue-DragTreeTable
- Synchronized的底层实现原理(看这篇就够了)
- 有道词典Chrome划词插件
- 【第9篇】Python爬虫实战-银行卡归属地查询
- 思科交换机配置【串口初始配置】
- 语义分割CCNet-Criss Cross Network论文中注意力机制Criss Cross Attention模块的tensorflow代码实现
- python如何抓取网页里面的文字_python如何爬取网页中的文字
- 一位美国教授给研究生的怎样记读书笔记的建议(中文总结)
- 《算法笔记》——基础篇习题选择结构
- php加粉网源码,PHP独角发卡网源码
- 智能算法---蚁群算法介绍
- 正圆锥体空间方程_电路原理中三相缺相保护器是如何工作的,正负序与它有什么关系...
- C++的继承(一): 让蟋蟀继承蚱蜢
- 西安翻译学院东区计算机教室,西安翻译学院:200间教室跨进智慧时代
- 如果我们失联了,怎么办?
热门文章
- 从MapGIS K9到MapGIS 10到MapGIS 10.3 Server
- cobar mysql5.6_Cobar介绍及配置
- 创建Java Web工程
- Carla 使用神经网络训练自动驾驶车辆---数据采集部分
- 编写一程序,输入月份号,输出该月的英文月名。例如,输入3,则输出“March“,要求用指针数值处理。
- 使用PCA9685控制多个舵机
- TCP协议的RST标志
- Java基于nfs-client包实现NFS协议连接linux服务器进行文件上传与下载操作源码
- matlab如何将三维转为二维_matlab 三维矩阵转二维矩阵(转)
- 安装黑群晖找不到局域网电脑_简单几招,教你如何隐藏电脑上的文件,保证让其他人找不到!...