一、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 队列溢出了的更多相关文章

  1. Linux TCP队列相关参数的总结 转

        在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过 ...

  2. Linux TCP队列相关参数的总结

    作者:阿里技术保障锋寒 原文:https://yq.aliyun.com/articles/4252 摘要: 本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记 ...

  3. uWSGI listen queue 队列溢出的问题

    如果没有设置uwsgi的--listen,如果sysctl -a | grep net.core.somaxconn发现net.core.somaxconn=128. 那你使用uwsgi启动的服务,单 ...

  4. 记一次惊心的网站 TCP 队列问题排查经历

    https://blog.csdn.net/chenlycly/article/details/80868990 http://www.mytju.com/classcode/news_readnew ...

  5. JAVA 线上故障排查套路,从 CPU、磁盘、内存、网络到GC 一条龙!

    线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍. 同时例如jstack.jmap等工具也是不囿于一个方面的问题的, ...

  6. 分享一次排查CLOSE_WAIT过多的经验

    关键词:TCP.CLOSE_WAIT 问题背景 某日下午有测试人员急匆匆的跑来跟我反馈:"有客户反馈供应商附件预览不了,流程阻塞,需要紧急处理",我立马精神起来,毕竟都是付费客户( ...

  7. JAVA线上故障排查手册-(推荐)

    参考:https://fredal.xin/java-error-check?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=tout ...

  8. JAVA 线上问题排查方法

    CPU 磁盘 内存 GC问题 网络 线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍. 同时例如jstack.jma ...

  9. TCP握手过程中建连接的流程和队列

    这里有两个队列:syns queue(半连接队列):accept queue(全连接队列). 三次握手过程中: 第一步: server 收到 client 的 syn 后,把这个连接信息放到半连接队列 ...

随机推荐

  1. application x-www-form-urlencoded与JS的encodeURIComponent()

    application/x-www-form-urlencoded 表单的enctype属性表示在发送到服务器之前应该如何对表单数据进行编码,默认值是application/x-www-form-ur ...

  2. Centos-清屏命令-clear

    clear 清理屏幕输出 相关快捷键 ctrl + l

  3. 最全总结 | 聊聊 Python 数据处理全家桶(Memcached篇)

    1. 前言 本篇文章继续继续另外一种比较常用的数据存储方式:Memcached Memcached:一款高性能分布式内存对象缓存系统,通过 内存缓存,以减少数据库的读取,从而分担数据库的压力,进而提高 ...

  4. Android 自定义Vie 对勾CheckBox

    天在美团点外卖,有一个商品推荐的条目,上面的CheckBox是自定义的,虽然我们大部分都是用图片来自定义样式.但是还是可以自定义View来绘制的,只要画一个圆和对勾即可. 最终效果 最终效果.png ...

  5. IDEA配置jQuery,$符号不再显示黄色波浪线

    在使用IDEA搭建Maven的Web环境时,编写的JQuery入口函数时,遇到了未知符号的提示,并且在前端页面js的console里报错. 以下是错误信息:  解决方案:  继续看图: 配置成功生效: ...

  6. STM32CubeMX HAL库串口: 使用DMA数据发送、使用DMA不定长度数据接收

    转载自 https://blog.csdn.net/euxnijuoh/article/details/81638676

  7. uBuntu安装其他版本Python

    问题描述:阿里云服务器uBuntu版本为16.04,默认Python版本为2.7.12和3.5.2,但是FastAPI,仅支持3.6+版本,因此需要更高版本的Python. 注意:系统自带的Pytho ...

  8. 001 win10下安装linux子系统--Ubuntu及其图形界面

    首次启动图形界面关键步骤及相关命令: 步骤: 打开Xlunch 打开XLaunch,选择:"one large window",Display number设置成0,其它默认即可, ...

  9. 在Linux下如何根据域名自签发OpenSSL证书与常用证书转换

    在Linux下如何根据域名自签发各种SSL证书,这里我们以Apache.Tomcat.Nginx为例. openssl自签发泛域名(通配符)证书 首先要有openssl工具,如果没有那么使用如下命令安 ...

  10. git 查看本地分支和切换本地分支的命令

    查看本地分支,和当前所在的分支 git branch -vv git checkout developer 切换到developer分支