linux socket全连接/半连接 队列
从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全连接/半连接 队列相关推荐
- linux socket关闭连接 shutdown与close
在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h>int shutdown(i ...
- Linux socket关闭连接shutdown与close
在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h> int shutdown( ...
- linux查看全连接队列大小,[TimLinux] TCP全连接队列满
0. TCP三次握手 syns queue: 半连接队列 accept queue: 全连接队列 控制参数存放在文件:/proc/sys/net/ipv4/tcp_abort_on_overflow中 ...
- TCP全连接和半连接的问题探讨
个人博客: https://rebootcat.com/2020/11/14/tcp_accept/ 从何说起 说起 tcp 的连接过程,想必 "3次握手4次挥手"是大家广为熟知的 ...
- linux 全连接队列,TCP半连接队列和全连接队列的可能和出现问题和解决方案
问题描述 监控系统发现电商网站主页及其它页面间歇性的无法访问: 查看安全防护和网络流量.应用系统负载均正常: 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现. 此时问题已影响到整个网站的 ...
- 半连接队列 全连接队列??
参考链接 半连接队列 服务器接收到第一个SYN之后,处于SYN_RCVD状态,此时双方还没有建立连接, 这种状态下的请求连接会被放到一个队列里,也叫半连接队列 长度为 max(64, /proc/sy ...
- [计算机网络] - TCP半连接队列和全连接队列
转载自:https://blog.csdn.net/qq_34827674/article/details/106448326 1. 概念 在 TCP 三次握手的时候,Linux 内核会维护两个队列, ...
- TCP半连接队列和全连接队列(史上最全)
TCP半连接队列和全连接队列 文章很长,建议收藏起来慢慢读! 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :<尼恩Java面试宝典>持续更新+ 史上最全 + 面试必备 2000 ...
- 重学TCP协议(9) 半连接队列、全连接队列
1. 半连接队列.全连接队列基本概念 三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复syn+ack给client(第二步),同时开启一个定时器,如果超 ...
最新文章
- 下载、安装、配置 java jdk1.8
- Python实战案例,pygame模块,Python实现套路表白神器VS无套路表白神器
- Selenium2学习(八)-- 操作元素(键盘和鼠标事件)
- LINUX下源码包安装mysql
- 按照月的第几周统计_商标评审案件审理情况月报(2020年第11期)
- iOS屏幕旋转 浅析
- HDU4712 Hamming Distance (随机化)
- SQL数据库学习心得
- HTML5七夕情人节表白网页制作【一起跨年表白代码】HTML+CSS+JavaScript
- java高速公路收费管理计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- SSH-简单登陆业务详解,从环境部署到代码编写
- ubuntu上安装微信教程
- 为什么我推荐你使用中国移动的九天 · 毕昇云GPU平台
- 建筑力学与结构【10】
- 安卓系统管理软件_有了它我卸载了很多软件!
- LSD直线检测和霍夫线变换的学习建议
- vue PC端项目打包成windows桌面程序
- python保留两位小数_python格式化输出保留2位小数的实现方法
- 蓝桥杯 输入信用卡号码
- Python安装distribute包