IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 关于TCP中服务端接收数据包无响应问题 -> 正文阅读

[网络协议]关于TCP中服务端接收数据包无响应问题

原因是公司换了一套VPN现在为NAT网络模式,然后生产出现偶发性的页面无法连接问题,下面是排查处理结果

??????

1.访问流程

?

2.问题现象

在旧版切换为新Vpn之后用户访问堡垒机首页,偶发性出现连接异常提示连接超时,没有规律日志没有报错,然后和vpn那边沟通他们也没有明确回复vpn的旧版新版差异性问题导致走了一堆弯路

?

3.排查思路

(1)网络排查

开始以为网络问题测试本地连接Vpn可以Ping和Telnet通Nginx但是访问不到时候Telnet端口不通(Telnet为应用层协议)

(2)前端日志排查

然后排查应用Nginx日志报错为:根据报错没有有用信息报错端口是图形化桌面端口

?

(3)后端应用排查

然后直接不通过Nginx代理直接访问后端IP进行访问应用来测试看看是否是应用

问题,发现直接访问应用不会出现断开连接丢包现象

(4)前端应用排查

在想是不是Nginx代理转发出了问题然后直接访问前端Nginx真实IP进行测试、也是一直可以打开页面没有出现断开连接超时情况。

(5)资源排查

Top看了资源占用情况发现剩余资源都在百分95以上不存在资源不够情况,又看Nginx连接数量和Tcp连接数远远没有达到最大标准。

(6)抓包测试

进行抓包测试当页面出现不能访问情况时服务端可以收到客户端发来数据包、但是服务端没有响应

www.baidu.com服务端接收数据包不回复原因,查询到两个Linux进程参数

tcp_tw_recycle
Enable fast recycling of TIME-WAIT sockets. Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation).
启用TIME-WAIT状态sockets的快速回收,这个选项不推荐启用。在NAT(Network Address Translation)网络下,会导致大量的TCP连接建立错误。
tcp_timestamps

?????????? 1发送方在发送数据时,将一个timestamp(表示发送时间)放在包里面

????? 2接收方在收到数据包后,在对应的ACK包中将收到的timestamp返回给发送方(echo back)

????? 3发送发收到ACK包后,用当前时刻now - ACK包中的timestamp就能得到准确的RTT


当tcp_tw_recycle和tcp_timestamps同时打开时会激活TCP的一种隐藏属性:缓存连接的时间戳。
60秒内,同一源IP的后续请求的时间戳小于缓存中的时间戳,此时linux内核就会认为这个数据包异常的,因此就会丢掉这个包,并发送rst。
在NAT的环境下,由于公网ip是一样的,就很有可能出现请求连接被断开的现象。

?

均为开启状态,了解到tcp_timestamps为时间戳tcp_tw_recycle是快速回收处理TIME_WAIT状态的socket,当tcp_tw_recycle为1是开启状态,然后修改为0就可以了
echo "0" > /proc/sys/net/ipv4/tcp_tw_recycle

?

4 . 总结

(以下为个人理解,如有不对欢迎大佬补充讨论)

大概意思就是当网络模式为NAT(可能旧版VPN不是大家共用一个IP所以没出现这个情况)连接用户都为一个IP发送到服务端数据包源IP一致,但是时间戳不同但是用户访问时候每个人有每个人对应的访问时间戳,当其中一个用户断开了连接之后他会短暂处于一个TIME_WATI状态,然后开启了tcp_tw_recycle之后系统会在一个RTO的极短时间内回收处于TIME_WAIT状态的socket但是同时他还会接收到之前连接了此页面的用户发来的数据包,然后就会进行判断时间戳如果是老报文,则丢弃且不回复。

5.处理方法

netstat -s |grep reject 查询到被动拒绝的连接数

当tcp_tw_recycle为1时在不断增长被动拒绝连接数

然后修改为0就可以了
echo "0" > /proc/sys/net/ipv4/tcp_tw_recycle

?

?

?

?

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:51:07  更:2021-07-24 11:52:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:37:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码