前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TCP 队列溢出了

TCP 队列溢出了

作者头像
WindWant
发布于 2020-11-12 02:25:55
发布于 2020-11-12 02:25:55
1.6K0
举报
文章被收录于专栏:后端码事后端码事

一、TCP 队列

1、syns queue:半连接队列

TCP 三次握手(参考:TCP建立连接之三次握手),第一步,服务端接收到客户端发送的 syn 消息后,将连接信息放入 syns queue,此时,双方连接尚未建立,称之为半连接。

2、accept queue:全连接队列

TCP 三次握手,第三步,客户端接收到服务端发送的 syn + ack 消息后,向服务端发送 ack 消息,服务端接收到此消息后,将连接信息从 syns queue 拿出,放入 accept queue,此时,经过三次握手,连接已经建立,称之为全连接。

二、队列溢出

既然是队列,那就会存在队列被填满的情况,我们称之为队列溢出。

1、syns queue 满

假如某一时间段内,有大量的 syn 请求连接信息到达,如果后续连接建立处理不及时,或者有客户端方面恶意不处理后续连接,那么就会快速占满 syns queue,从而导致无法建立新的连接。

2、accept queue 满

完成三次握手,则会触发连接信息的队列转移,假如此时,accept queue 队列满,则会导致新建立的连接得不到维护保持,系统会根据设定的策略(tcp_abort_on_overflow)进行连接的直接抛弃(0)或者发送 RST 消息给客户端终止连接(1)(Connection reset by peer)。

3、查看队列溢出

命令:netstat -s | egrep "listen|LISTEN"

结果:

全连接队列溢出次数:

6 times the listen queue of a socket overflowed

半连接队列溢出次数:

6 SYNs to LISTEN sockets dropped

4、查看队列使用情况

命令:ss -lnt

结果:

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 *:22 *:*

LISTEN 0 50 *:9090 *:*

Send-Q:监听端口上全连接队列最大大小

Recv-Q:全连接队列当前使用量

三、关于连接错误

connection reset:已关闭的连接上执行读操作触发。

connection reset by peer:已关闭的连接上执行写操作触发。

四、关于 RST 消息

连接重置消息,用于连接的【异常关闭】。

下面简单罗列集中可能触发 RST 连接关闭的情景:

1、服务端接收到自身不存在端口的连接请求

2、主动使用 RST 关闭,替代正常的四次挥手 FIN 消息关闭(参考:TCP连接性能指标之TCP关闭过程(四次挥手)),主要用于特殊优化提升效率使用。

3、客户端或者服务端异常,无法继续正常的连接处理,发送 RST 终止连接操作。

4、处理 TCP 游离包信息。

5、长期未收到对方确认报文,经过一定时间或者重传尝试后,发送 RST 终止连接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
五分钟带你读懂 TCP全连接队列(图文并茂)
今天有个小伙伴跑过来告诉我有个奇怪的问题需要协助下,问题确实也很奇怪。客户端调用RT比较高并伴随着间歇性异常Connection reset出现,而服务端CPU 、线程栈等看起来貌似都很正常,而且服务端的RT很短。
鲁大猿
2020/09/18
3.1K0
关于TCP 半连接队列和全连接队列
最近碰到一个client端连接异常问题,然后定位分析并查阅各种资料文章,对TCP连接队列有个深入的理解 查资料过程中发现没有文章把这两个队列以及怎么观察他们的指标说清楚,希望通过这篇文章能把他们说清楚一点 问题描述 JAVA的client和server,使用socket通信。server使用NIO。 间歇性的出现client向server建立连接三次握手已经完成,但server的selector没有响应到这连接。 出问题的时间点,会同时有很多连接出现这个问题。 selector没有销毁重建,一直用的都是一
用户1263954
2018/01/30
2.4K0
关于TCP 半连接队列和全连接队列
TCP 三次握手,给我长脸了噢
之前有个小伙伴在技术交流群里咨询过一个问题,我当时还给提供了点排查思路,是个典型的八股文转实战分析的案例,我觉得挺有意思,趁着中午休息简单整理出来和大家分享下,有不严谨的地方欢迎大家指出。
程序员小富
2023/03/16
7960
TCP 三次握手,给我长脸了噢
动图图解!没有accept,能建立TCP连接吗?
其实只要在执行accept() 之前执行一个 sleep(20),然后立刻执行客户端相关的方法,同时抓个包,就能得出结论。
moon聊技术
2021/10/20
1.5K0
动图图解!没有accept,能建立TCP连接吗?
一文带你搞定TCP连接队列
服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报文给客户端。
shysh95
2021/12/21
1.3K0
一文带你搞定TCP连接队列
linux中TCP三次握手与四次挥手介绍及调优
TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。
没有故事的陈师傅
2021/08/13
8850
从源码与实战分析TCP全连接队列溢出故障
wrk是一个基于C语言编写的HTTP性能测试工具,由GitHub用户wg/wrk开发。它能够通过生成大量的HTTP请求,对服务器进行压力测试,并实时输出测试结果,包括请求速率、传输速率、连接数等关键性能指标。wrk的设计初衷是为了提供一个简单易用的性能测试工具,同时保证测试结果的准确性和可靠性。
五分钟学SRE
2024/04/29
6011
TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?
很简单呀,因为我做了实验和看了 TCP 协议栈的内核源码,发现要增大这两个队列长度,不是简简单单增大某一个参数就可以的。
帅地
2020/06/03
4.6K0
TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?
Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这篇文章就来聊下 Tomcat 调优,重点介绍下线程池调优及 TCP 半连接、全连接队列调优。
yanhom
2022/10/19
3K1
Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
再聊 TCP backlog
关于三次握手,还有很多细节之前的文章没有详细介绍,这篇文章我们以 backlog 参数来深入研究一下建连的过程。通过阅读这篇文章,你会了解到下面这些知识:
挖坑的张师傅
2022/05/13
1.1K0
再聊 TCP backlog
性能分析之TCP全连接队列占满问题分析及优化过程
在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的。
高楼Zee
2019/12/24
4.8K0
TCP(二)
如上图所示,关键部分:syns queue(半连接队列)和accept queue(全连接队列)
在周末
2019/08/26
4670
从源码与实战分析TCP半连接队列溢出故障
hping3是一个基于C语言编写的网络性能测试工具,由Salvatore Sanfilippo开发。它能够模拟各种类型的网络包,对服务器进行压力测试,并提供丰富的选项来定制测试。hping3不仅适用于HTTP协议,还支持TCP、UDP、ICMP等多种协议,使其成为一个多功能的网络性能测试工具。
五分钟学SRE
2024/05/01
3970
记一次惊心的网站TCP队列问题排查经历
此时问题已经影响到整个网站的正常业务,我的那个心惊的呀,最主要报警系统没有任何报警,服务运行一切正常,瞬时背上的汗已经出来了。但还是要静心,来仔细寻找蛛丝马迹,来一步一步找问题。
顶级程序员
2018/07/23
1.1K0
记一次惊心的网站TCP队列问题排查经历
作者:刘晓明,互联网公司运维技术负责人,拥有10年的互联网开发和运维经验。一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能。
Python中文社区
2018/07/26
5800
TCP 三次握手应该这么学 《深入解析TCP连接管理:三次握手与队列溢出应对策略》
TCP三次握手是建立一个可靠的连接的基础。在这个过程中,有两个重要的队列:半连接队列(SYN queue)和全连接队列(ACCEPT queue)。
五分钟学SRE
2024/04/16
7070
TCP 三次握手应该这么学  《深入解析TCP连接管理:三次握手与队列溢出应对策略》
TCP三次握手详解-深入浅出(有图实例演示)[通俗易懂]
TCP是属于网络分层中的运输层(有的书也翻译为传输层),因为OSI分为7层,感觉太麻烦了,所以分为四层就好了,简单。 分层以及每层的协议,TCP是属于运输层(有的书也翻译为传输层),如下两张图:
全栈程序员站长
2022/09/07
3.7K0
TCP三次握手详解-深入浅出(有图实例演示)[通俗易懂]
记一次惊心的网站 TCP 队列问题排查经历
来源:高效运维 ID:greatops 问题描述 监控系统发现电商网站主页及其它页面间歇性的无法访问; 查看安全防护和网络流量、应用系统负载均正常; 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现。 此时问题已影响到整个网站的正常业务,我那个心惊呀,最主要是报警系统没有任何报警,服务运行一切正常,瞬时背上的汗已经出来了。但还是要静心,来仔细寻找蛛丝马迹,来一步一步找问题。 问题初步判断 检查dev 和 网卡设备层,是否有error和drop ,分析在硬件和系统层是否异常 ----- 命令
小小科
2018/06/20
6950
全连接队列和半连接队列
大家对于 TCP 的三次握手应该都比较熟悉了,对于服务端,收到 SYN 包后该怎么处理,收到 Establish 之后又该怎么处理,或者说这些连接放在哪里,其实这也是之前面试问过的问题
opencode
2022/12/26
7220
全连接队列和半连接队列
tcp详解 netstat理解
为了深入理解TCP协议, 我们需要了解TCP客户端/服务端的状态转移和正确性保持. 建议阅读Unix网络编程卷1第二章和第三章, 原书笔记
平凡的学生族
2019/12/20
9000
tcp详解 netstat理解
推荐阅读
相关推荐
五分钟带你读懂 TCP全连接队列(图文并茂)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档