TCP 队列溢出了
一、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 终止连接。
TCP 队列溢出了的更多相关文章
- Linux TCP队列相关参数的总结 转
在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过 ...
- Linux TCP队列相关参数的总结
作者:阿里技术保障锋寒 原文:https://yq.aliyun.com/articles/4252 摘要: 本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记 ...
- uWSGI listen queue 队列溢出的问题
如果没有设置uwsgi的--listen,如果sysctl -a | grep net.core.somaxconn发现net.core.somaxconn=128. 那你使用uwsgi启动的服务,单 ...
- 记一次惊心的网站 TCP 队列问题排查经历
https://blog.csdn.net/chenlycly/article/details/80868990 http://www.mytju.com/classcode/news_readnew ...
- JAVA 线上故障排查套路,从 CPU、磁盘、内存、网络到GC 一条龙!
线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍. 同时例如jstack.jmap等工具也是不囿于一个方面的问题的, ...
- 分享一次排查CLOSE_WAIT过多的经验
关键词:TCP.CLOSE_WAIT 问题背景 某日下午有测试人员急匆匆的跑来跟我反馈:"有客户反馈供应商附件预览不了,流程阻塞,需要紧急处理",我立马精神起来,毕竟都是付费客户( ...
- JAVA线上故障排查手册-(推荐)
参考:https://fredal.xin/java-error-check?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=tout ...
- JAVA 线上问题排查方法
CPU 磁盘 内存 GC问题 网络 线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍. 同时例如jstack.jma ...
- TCP握手过程中建连接的流程和队列
这里有两个队列:syns queue(半连接队列):accept queue(全连接队列). 三次握手过程中: 第一步: server 收到 client 的 syn 后,把这个连接信息放到半连接队列 ...
随机推荐
- 详细分析 Java 中启动线程的正确和错误方式
目录 启动线程的正确和错误方式 前文回顾 start 方法和 run 方法的比较 start 方法分析 start 方法的含义以及注意事项 start 方法源码分析 源码 源码中的流程 run 方法分 ...
- 如何让百度网盘下载速度达60MB/s!
(软件下载方式在文末) 自从 PanDownload 被处理之后 一直没有超越它的可替代的应用出来 但是最近,竟然有人接盘了!重新制作上线 推出了更加强劲的复活版! 放张图,大家先感受下 60MB/s ...
- GUI应用编程初体验
不同平台的GUI实现原理是一样的. 本实验基于 windos平台. 先捋一捋概念 什么是消息队列(Message Queue)假 设一个场景:系统正在处理WM_PAINT消息,就在这时用户在键盘上敲击 ...
- 6个LED的控制
控制任务和要求 让6个LED按要求工作 电路设计 程序设计 1 int Led1 = 1; //各LED与实验板的联接引脚 2 int Led2 = 2; 3 int Led3 = 3; 4 int ...
- 使用Appium进行iOS的真机自动化测试
windows不支持appium连接ios,只适用于mac 使用Appium进行iOS的真机自动化测试 安装类库 Homebrew 如果没有安装过Homebrew,先安装[ homebrew ] np ...
- API可视化管理平台YApi
Yapi是什么 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互 ...
- ansible-playbook-jinja2管理nginx配置文件
1. 案例1:创建jinja2的nginx的主配置文件 1) 编写jinja2的nginx的主配置文件 1 [root@test-1 jinja2]# vim /ansible/jinja2/tes ...
- kafka配置文件详解
kafka的配置分为 broker.producter.consumer三个不同的配置 一 .BROKER 的全局配置最为核心的三个配置 broker.id.log.dir.zookeeper.con ...
- 代码格式化工具:clang-format
IDE: Visual Studio Code Language: C/C++ 格式化工具: clang-format 安装 vscode安装扩展C/C++,扩展程序将自动安装clang-format ...
- vue 项目打包后静态资源加载不到
1, 2,