网络异常案例五_SYN被丢弃

问题现象

公司同事使用的时候,反馈系统不稳定,访问的时候,有时候会出现白屏(连接超时),或者系统页面点击没有响应,过一会之后刷新系统又可以正常展示了。之前未收到过类似反馈,一直都是正常的。
在这里插入图片描述

浏览器控制台信息如下
在这里插入图片描述

可疑点

所有请求,request header显示的是临时报文头

在这里插入图片描述

chrome.devtools上面的介绍
在这里插入图片描述

按网上资料,可能和chrome浏览器插件有关系

前面几个请求耗时很久,均卡在Stalled这个状态

在这里插入图片描述

问题排查

查看异常附近时段的监控。服务器cpu、内存、带宽、网络连接数无明显变化,未发现异常。
查看服务端应用、入口nginx组件的日志,未看到异常信息,没有看到请求处理超时。

客户端抓包,发现SYN请求建立连接,服务端没有回SYN+ACK。
在这里插入图片描述

服务器抓包,未针对SYN包进行响应。
在这里插入图片描述

基于这个信息查询,定位系统开启了TCP连接复用参数(tcp_tw_recyle)。和运维沟通,近期针对tcp连接参数进行过调整。恢复了调整参数,然后反馈服务正常。

为什么会丢弃SYN包

服务器任务该数据包是无效的包,故丢弃了。
启用了tcp_tw_recyle之后,开启了per-host的PAWS检查。但数据包里面的时间戳比上一次小,忽略该数据包。

相关知识串联

TCP基础知识点

  • TCP/IP的职能定位
    • IP,提供的是端到端的传输。从源IP传输到目标IP,选择合适的传输路线,但不保证可靠性。尽力而为。
    • TCP,在IP的基础上,提供点到点的服务。从源IP的源端口传输到目标IP的目标端口,保证同一个连接下传输的有序、可靠。
  • 如何识别同一个TCP连接
    • 通过四元组识别,四元组:源IP、源端口、目标IP、目标端口(还有一个隐性条件:协议类型)。这四个信息一样的即认为同一个TCP连接。
  • TCP有序性保障
    • 在每个传输的报文段里面添加了sequence信息,接收方接收到数据后进行应答,告知发送方已收到相应的sequence数据。由于网络的不可靠性,可能会出现丢包,或者延时的情况。如接收方已接收到sequence 10000及之前所有的数据包并进行了处理,此时如果收到该sequence之前的包,会丢弃掉不进行处理。(此处为理解问题进行了简化,实际上也会回ack应答)
    • sequence标识的是传输内容字节的顺序,而非报文的序号。sequence有长度限制(32bit),最大为4G(2^32),当超过上限后会循环开始。

PAWS+时间戳选项的起因

  • 高速带宽+接收方接收能力提升导致sequence不够用,为了解决sequence不够用的场景,增加时间戳用于辅助识别数据包的有效性
    • 见下面截图介绍(来源于TCP/IP详解*卷一)
      在这里插入图片描述

TCP挥手过程

见下图。主动发起断开方最后需要等待2MSL时间
在这里插入图片描述

TCP连接复用+快速回收

tcp_tw_recycle:快速回收TIME_WAIT状态的连接;不推荐在NAT模式下使用;
tcp_tw_reuse:快速复用TIME_WAIT状态的连接;
在这里插入图片描述

NAT联网介绍

在这里插入图片描述
图片来源于《计算机网络*自顶向下方法》

per-host PAWS机制

当开启了tcp_tw_recycle和tcp_timestamps之后,会开启per-host的PAWS机制,tcp识别由连接的识别由四元组(源IP、源端口、目标ip、目标端口)变为三元组(源IP、目标ip、目标端口)。
在这里插入图片描述

问题产生过程

server端是linux系统,默认开始了tcp_timestamps机制。现在又开启了tcp_tw_recycle。
客户端电脑,一般都是NAT联网。不同电脑的时间戳是不一样的。
当A电脑和server端交互完成后,B电脑马上和server端交互,且时间戳比A小。server端会认为是一个无效的包,丢弃它。

验证的部分场景截图

server端主动断开(相同的四元组),syn包被忽略。第二次请时间戳<第一次时间戳
在这里插入图片描述

client主动断开(不同的四元组),syn包没有应答。一台client关闭了timestamp选项
在这里插入图片描述

相同的四元组,server端主动断开,有应答。第二次请时间戳>第一次时间戳
在这里插入图片描述

不同的四元组,server端主动断开,有应答。第二次请时间戳>第一次时间戳(第一台的client关闭了timestamp)
在这里插入图片描述

参考资料

syn丢弃场景介绍
tcp_tw_recycle引发的问题
TCP时间戳介绍

附*系列文章索引

整理起因
报文分析
报文格式解读
握手+挥手过程状态变化分析
滑动窗口介绍
可靠数据传输原理
拥塞控制
网络异常案例(1、2、3、4、5)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444016.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rp-bf:一款Windows下辅助进行ROP gadgets搜索的Rust库

关于rp-bf rp-bf是一款Windows下辅助进行ROP gadgets搜索的Rust库&#xff0c;该工具可以通过模拟Windows用户模式下的崩溃转储来爆破枚举ROP gadgets。 在很多系统安全测试场景中&#xff0c;研究人员成功劫持控制流后&#xff0c;通常需要将堆栈数据转移到他们所能够控制的…

Unity - 调节camera物理相机参数(HDRP)

在 “Hierarchy” 右键 -> Volume -> Global Volume new 一个 profile, 设置Mode为Pysical Camera 再点击camera组件&#xff0c;这时候设置 ISO、Shutter Speed、Aperture等参数值还会有效。

phpstudy安装并运行redis

对于一个菜鸟来说&#xff0c;任何一个小步骤都可能研究半天&#xff0c;比如“phpstudy安装并运行redis”这一问题&#xff0c;解决好后第一时间记录下来&#xff0c;方便日后查看&#xff0c;也为遇到同样困难的小伙伴提供个参考&#xff01; 一、phpstudy安装redis 1.打开…

中央空调的安装一

中央空调的安装 一般工程安装工序 1.工序内容划分 预埋管道工程……………要考虑排水管向下倾斜 室内机安装…………要确认机种名&#xff0c;避免装错 冷媒配管工程…………要注意干燥、清洁、密封 排水管工程…………向下倾斜 风管工程…………要确保足够的风量 保温绝热…

httprunnermanager接口平台二次开发(十一):实现平台套件支持模块搜索

文章目录 一、背景二、前后端实现2.1、先从前端页面入手suite_list.html2.2、顺藤摸瓜views.py-->suite_list-->get_pager_info方法2.3、后端加了字段&#xff0c;前端也需要同时考量两个方法 三、总结四、心得交流 一、背景 需求还是内置测试需求&#xff0c;就是说一个…

Altium Designer导入嘉立创EDA中的元器件原理图、封装图和3D模型

Altium Designer导入嘉立创EDA中的元器件原理图、封装图和3D模型 在立创商城找到需要使用的元器件&#xff0c;单击进入详情页。 立创商城_一站式电子元器件采购自营商城-嘉立创电子商城 进入详情页点击右侧【下载文件】。 点击【立即打开】。 在打开的立创EDA网页版中分别下…

大数据分析|从七个特征理解大数据分析

文献来源&#xff1a;Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1…

正则表达式补充以及sed

正则表达式&#xff1a; 下划线算 在单词里面 解释一下过程&#xff1a; 在第二行hello world当中&#xff0c;hello中的h 与后面第一个h相匹配&#xff0c;所以hello中的ello可以和abcde匹配 在world中&#xff0c;w先匹配h匹配不上&#xff0c;则在看0&#xff0c;r&#…

ML:2-2-3 多分类问题multicalss

文章目录 1. 多分类问题的定义2. softmax3. 神经网络的softmax输出 【吴恩达机器学习65-67】 1. 多分类问题的定义 classification问题可能的output大于2种。 multiclass的预测图像可能是右侧这样的。 2. softmax softmax regression算法是logistic regression的泛化&#x…

win11安装wsl作为linux子系统并当作服务器

wsl安装 打开控制面板&#xff0c;找到启用或关闭windows功能 开启windows虚拟机监控平台和适用于Linux的Windows子系统&#xff0c;重启电脑。 打开microsoft store搜索ubuntu&#xff0c;找到合适的版本下载安装 输入wsl -l如下所示&#xff0c;即为安装成功。 安装过程比较…

基于C++的面向对象程序设计:类与对象的深入剖析

面向对象程序设计的基本特点 面向对象程序设计的基本特点包括&#xff1a;抽象、封装、继承、多态。 抽象 抽象是指对具体问题或对象进行概括&#xff0c;抽出其公共性质并加以描述的过程。一般情况抽象分为数据抽象和行为抽象&#xff0c;其中数据抽象是指一个对象区别于另…

【lesson4】高并发内存池ThreadCache(线程缓存)层实现

文章目录 ThreadCache层的结构申请内存逻辑释放内存逻辑自由链表的实现自由链表的成员变量自由链表的成员函数自由链表的完整实现 ThreadCache申请内存过程的实现ThreadCache需要的成员变量ThreadCache需要的成员函数ThreadCache.h文件代码Allocate的实现Deallocate的实现 封装…