从Linux源码看Socket(TCP)的listen及连接队列_无毁的湖光-Al的博客-CSDN博客

1. 为什么要存在半连接队列

因为根据TCP协议的特点,会存在半连接这样的网络攻击存在,即不停的发SYN包,而从不回应SYN_ACK。

如果发一个SYN包就让Kernel建立一个消耗极大的sock,那么很容易就内存耗尽。

所以内核在三次握手成功之前,只分配一个占用内存极小的request_sock,以防止这种攻击的现象,再配合syn_cookie机制,尽量抵御这种半连接攻击的风险。

2. 半连接hash表和全连接队列的限制

由于全连接队列里面保存的是占用内存很大的普通sock,所以Kernel给其加了一个最大长度的限制。这个限制为:

下面三者中的最小值
1.listen系统调用中传进去的backlog
2./proc/sys/inet/ipv4/tcp_max_syn_backlog
3./proc/sys/net/core/somaxconn
即min(backlog,  tcp_ma_syn_backlog,  somaxcon)

如果超过这个somaxconn会被内核丢弃,如下图所示:

这种情况的连接丢弃会发生比较诡异的现象。在不设置tcp_abort_on_overflow的时候,client端无法感知,就会导致即在第一笔调用的时候才会知道对端连接丢弃了。

那么,怎么让client端在这种情况下感知呢,我们可以设置一下tcp_abort_on_overflow

echo '1' > tcp_abort_on_overflow

设置后,如下图所示:

当然了,最直接的还是调大backlog!

listen(fd,2048)
echo '2048' > /proc/sys/inet/ipv4/tcp_max_syn_backlog
echo '2048' > /proc/sys/net/core/somaxconn

linux socket全连接/半连接 队列相关推荐

  1. linux socket关闭连接 shutdown与close

    在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h>int shutdown(i ...

  2. Linux socket关闭连接shutdown与close

    在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h> int shutdown( ...

  3. linux查看全连接队列大小,[TimLinux] TCP全连接队列满

    0. TCP三次握手 syns queue: 半连接队列 accept queue: 全连接队列 控制参数存放在文件:/proc/sys/net/ipv4/tcp_abort_on_overflow中 ...

  4. TCP全连接和半连接的问题探讨

    个人博客: https://rebootcat.com/2020/11/14/tcp_accept/ 从何说起 说起 tcp 的连接过程,想必 "3次握手4次挥手"是大家广为熟知的 ...

  5. linux 全连接队列,TCP半连接队列和全连接队列的可能和出现问题和解决方案

    问题描述 监控系统发现电商网站主页及其它页面间歇性的无法访问: 查看安全防护和网络流量.应用系统负载均正常: 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现. 此时问题已影响到整个网站的 ...

  6. 半连接队列 全连接队列??

    参考链接 半连接队列 服务器接收到第一个SYN之后,处于SYN_RCVD状态,此时双方还没有建立连接, 这种状态下的请求连接会被放到一个队列里,也叫半连接队列 长度为 max(64, /proc/sy ...

  7. [计算机网络] - TCP半连接队列和全连接队列

    转载自:https://blog.csdn.net/qq_34827674/article/details/106448326 1. 概念 在 TCP 三次握手的时候,Linux 内核会维护两个队列, ...

  8. TCP半连接队列和全连接队列(史上最全)

    TCP半连接队列和全连接队列 文章很长,建议收藏起来慢慢读! 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :<尼恩Java面试宝典>持续更新+ 史上最全 + 面试必备 2000 ...

  9. 重学TCP协议(9) 半连接队列、全连接队列

    1. 半连接队列.全连接队列基本概念 三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复syn+ack给client(第二步),同时开启一个定时器,如果超 ...

最新文章

  1. 下载、安装、配置 java jdk1.8
  2. Python实战案例,pygame模块,Python实现套路表白神器VS无套路表白神器
  3. Selenium2学习(八)-- 操作元素(键盘和鼠标事件)
  4. LINUX下源码包安装mysql
  5. 按照月的第几周统计_商标评审案件审理情况月报(2020年第11期)
  6. iOS屏幕旋转 浅析
  7. HDU4712 Hamming Distance (随机化)
  8. SQL数据库学习心得
  9. HTML5七夕情人节表白网页制作【一起跨年表白代码】HTML+CSS+JavaScript
  10. java高速公路收费管理计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  11. SSH-简单登陆业务详解,从环境部署到代码编写
  12. ubuntu上安装微信教程
  13. 为什么我推荐你使用中国移动的九天 · 毕昇云GPU平台
  14. 建筑力学与结构【10】
  15. 安卓系统管理软件_有了它我卸载了很多软件!
  16. LSD直线检测和霍夫线变换的学习建议
  17. vue PC端项目打包成windows桌面程序
  18. python保留两位小数_python格式化输出保留2位小数的实现方法
  19. 蓝桥杯 输入信用卡号码
  20. Python安装distribute包

热门文章

  1. python快速求平均值
  2. bootstrap 点击图片放大查看_Spring Cloud 之 Bootstrap 配置
  3. 【C语言】函数调用的参数压栈(详解)
  4. 数学建模常用模型(一):灰色预测法
  5. Android启用摄像头失败或者黑屏问题的几点原因
  6. “狂飙”的自动驾驶车,用了哪些规控算法?
  7. 开放合作,共赢未来 | 福昕鲲鹏加入金兰组织
  8. [201604]Java8实战(陆明刚 劳佳 译)
  9. matlab快速入门(13):获取函数的多个输出
  10. javaSE三个特殊的类 -- 包装类