4.4TCP半连接队列和全连接队列

news2024/11/17 19:44:41

目录

什么是 TCP 半连接队列和全连接队列?

TCP 全连接队列溢出

如何知道应用程序的 TCP 全连接队列大小?

如何模拟 TCP 全连接队列溢出的场景?

全连接队列溢出会发生什么 ?

如何增大全连接队列呢 ?

TCP 半连接队列溢出

如何查看 TCP 半连接队列长度?

如何模拟 TCP 半连接队列溢出场景?

大部分人都说 tcp_max_syn_backlog 是指定半连接队列的大小,是真的吗 ?

源码分析半连接队列的最大值是如何决定的?

TCP 第一次握手(收到 SYN 包)时会被丢弃的三种条件?

如果SYN 半连接队列已满,只能丢弃连接吗 ?

如何防御 SYN 攻击?​

什么是 TCP 半连接队列和全连接队列?

TCP三次握手时候,Linux内核会维护两个队列:

  • 半连接队列,也称 SYN 队列;
  • 全连接队列,也称 accept 队列;

服务器接收到客户端SYN的时候,内核会将该连接放入半连接队列,并向客户端发送ACK+SYN,接着客户端会返回ACK,服务端收到第三次握手的ACK后内核会把连接从半连接队列中移除,然后创建新的完全的连接并将其添加到accept队列,等待进程调用accept函数时把连接取出来。

不管是半连接队列还是全连接队列,都有最大长度限制,超过限制时,内核会直接丢弃,或返回 RST 包。 

TCP 全连接队列溢出

如何知道应用程序的 TCP 全连接队列大小?

$ ss -lnt

# -l 显示正在监听 ( listening ) 的 socket

# -n 不解析服务名称

# -t 只显示 tcp socket

如何模拟 TCP 全连接队列溢出的场景?

wrk工具,简单的 HTTP 压测工具,在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,通过多线程和事件模式,对目标机器产生大量的负载。

当服务端并发处理大量请求时,如果 TCP 全连接队列过小,就容易溢出。发生 TCP 全连接队溢出的时候,后续的请求就会被丢弃,这样就会出现服务端请求数量上不去的现象。

全连接队列溢出会发生什么 ?

Linux 有个参数可以指定当 TCP 全连接队列满了会使用什么策略来回应客户端,丢弃是默认选择,还可以选择向客户端RST复位报文,告诉客户端连接已经建立失败。

如何增大全连接队列呢 ?

TCP 全连接队列的最大值取决于 somaxconn 和 backlog 之间的最小值,也就是 min(somaxconn, backlog)。

TCP 半连接队列溢出

如何查看 TCP 半连接队列长度?

服务端处于 SYN_RECV 状态的 TCP 连接,就是 TCP 半连接队列。

如何模拟 TCP 半连接队列溢出场景?

对服务端一直发送 TCP SYN 包,但是不回第三次握手 ACK,这样就会使得服务端有大量的处于 SYN_RECV 状态的 TCP 连接。所谓的 SYN 洪泛、SYN 攻击、DDos 攻击。

大部分人都说 tcp_max_syn_backlog 是指定半连接队列的大小,是真的吗 ?

半连接队列最大值不是单单由 max_syn_backlog 决定,还跟 somaxconn 和 backlog 有关系。

源码分析半连接队列的最大值是如何决定的?

半连接队列最大值不是单单由 max_syn_backlog 决定,还跟 somaxconn 和 backlog 有关系。

TCP 第一次握手(收到 SYN 包)时会被丢弃的三种条件?

如果SYN 半连接队列已满,只能丢弃连接吗 ?

开启 syncookies 功能就可以在不使用 SYN 半连接队列的情况下成功建立连接,当开启了 syncookies 功能就不会丢弃连接。

如何防御 SYN 攻击?

①:要想增大半连接队列,我们得知不能只单纯增大 tcp_max_syn_backlog 的值,还需一同增大 somaxconn 和 backlog,也就是增大全连接队列。

②:开启 tcp_syncookies 功能的方式也很简单,修改 Linux 内核参数:

③:当服务端受到 SYN 攻击时,就会有大量处于 SYN_RECV 状态的 TCP 连接,处于这个状态的 TCP 会重传 SYN+ACK ,当重传超过次数达到上限后,就会断开连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思维调试:理解 DDE 的初始化过程

最近有人问我下面这个问题,我们依然可以使用之前我提到的 “思维调试” 来研究研究。 我们碰到了一个技术问题。当在资源管理器中双击打开文档时,资源管理器不会启动我们的应用程序。 更加奇怪的是,如果我们将一个调试器挂接到资源管理器进程…

git通过fork-merge request实现多人协同

一、问题 对于一个项目,如果需要多人协同开发,大家都在原始仓库中进行修改提交,经常会发生冲突,而且一不小心会把别人的代码内容覆盖掉。为了避免这样的问题,git提供了fork-merge request这样的协同方式。 二、仓库框…

Go1.19 排序算法设计实践 经典排序算法对比

详解经典排序算法 01 为什么要学习数据结构与算法 抖音直播排行榜功能 案例 规则:某个时间段内,直播间礼物数TOP10房间获得奖励,需要在每个房间展示排行榜解决方案 •礼物数量存储在Redis-zset中,使用skiplist使得元素整体有序 •…

在vue中使用codemirror格式化JSON

1. 下载指定版本的包 (避免引发不必要的错误) yarn add codemirror^5.64.02. 导入需要的文件 import CodeMirror from codemirrorimport codemirror/addon/lint/lint.cssimport codemirror/addon/fold/foldgutter.cssimport codemirror/lib/codemirror.cssimport codemirror/t…

ARM DIY(一)电源、SD卡座、SOC 调试

文章目录 前言加热台焊接热风枪吹焊电烙铁补焊电源调试SD 卡座调试DRAM 电路调试串口电路调试SOC 调试成品 前言 之前打样的几块 ARM 板,一直放着没去焊接。今天再次看到,决定把它焊起来。 加热台焊接 为了提高焊接效率,先使用加热台焊接…

uni-app 编译报错 Error: pages.json解析失败,不符合 json 规范Unexpected token ‘)‘

问题 使用webstorm开发项目时,打开pages.json习惯性ctrlaltl把代码格式了,然后报错了。 接着使用HBuilder编译,但是一直显示在编译中,完全没有反映。重启编译器与重启电脑都没有用。 没管然后编译报错了。 加上逗号再运行还是报…

【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失

问题起因 最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上。 经过本人在Linux虚机中启…

Ribbon:listOfServers ,${variableName:defaultValue}

解释: 配置了address的地址,请求会走address,也就是http://127.0.0.1:8081,通常用户与别的后端服务进行联调设置为其本地服务的ip。 如果address的地址被注释掉,如下面所示,类似这样的占位符${variableName:defaultVa…

基于Web的数字孪生智慧粮仓可视化管理系统

仓廪实、天下安。民之所需,行之所至。 建设背景 古往今来,粮食问题历来是安邦定国的头等大事。“粮食”作为人类生活的生命之源,在人们的日常生活中起着决定性的作用。收获的粮食归仓,仓储工作是稳定“大国粮仓”的重要环节&…

​LeetCode解法汇总1267. 统计参与通信的服务器

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 这里有一幅…

centos7搭建apache作为文件站后,其他人无法访问解决办法

在公司内网的一个虚拟机上搭建了httpsd服务,准备作为内部小伙伴们的文件站,但是搭建好之后发现别的小伙伴是无法访问我机器的。 于是寻找一下原因,排查步骤如下: 1.netstat -lnp 和 ps aux 先看下端口和 服务情况 发现均正常 2.…

开学季触控笔哪个牌子好?ipad第三方电容笔推荐

苹果笔和市场上其他的电容笔最大的区别就是,普通电容笔没有重力式的压力感应,然而,只有有一种倾斜式的压力感应。但是,普通的电容笔也可以用来书写,和苹果的Pencil没有太大的差别,而且大部分都是200元。如今…

通过C实现sqlite3操作,导入电子词典

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlite3.h> int main(int argc, const char *argv[]) {//创建并打开一个数据库sqlite3 *db NULL;if(sqlite3_open("./dict.db",&db) ! SQLITE_OK){printf("…

Python“牵手”一号店商品详情API接口运用场景及功能介绍,一号店接口申请指南

一号店是中国首家网上超市&#xff0c;由世界500强副董事长于刚创建。一号店扎根于中国广大的消费市场&#xff0c;以经营吃、喝、拉、撒、睡等人的基本生活工作等用品为主&#xff0c;运用互联网经营&#xff0c;线下配送的模式&#xff0c;打造了属于一号店的经营模式。 一号…

【Unity3D赛车游戏】【三】如何将汽车进入驱动模式——四驱,二驱转换

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Windows下python(conda)加载spatialite模板

如果在python调用spatialite的函数&#xff0c;报错no such function: MBRContains,ST_Contains,python则需要加载spatialite扩展: 共两步&#xff1a; 1、先在The Gaia-SINS federated project home-pageThe Gaia-SINS federated project home-pageThe Gaia-SINS federated …

真伪定时器

首先观察一下下面两组代码区别在哪里&#xff1f; 第一组代码 setInterval(() > {// 1.5s 的同步逻辑 }, 1000);第二组代码 function fn() {setTimeout(() > {// 1.5s 的同步逻辑fn();}, 1000); }fn();两组代码都有定时功能&#xff0c;看起来也都是每隔1s执行一次任务…

javaweb项目部署linux服务器遇到的问题

其他有关本次部署内容请参考本站其他文章 javaweb项目要用war包 IntelliJ IDEA 可以打包out里的子目录 D:\D盘文件\浏览器\webshop\out\artifacts\webshop_war_exploded>jar cvf webshop.war * 方法来源视频 18、web项目的打包与发布_哔哩哔哩_bilibili myeclipse项目…

为应用程序接入阿里云CDN优化网站访问速度

文章目录 1.KodCloud云盘系统接入CDN之前的效果2.配置KodCloud云盘接入CDN加速器2.1.添加CDN域名2.2.配置域名信息2.3.CDN推荐配置设置2.4.CDN加速器配置完成 3.配置云解析DNS增加CDN域名的解析4.为CDN加速器配置HTTPS5.验证网站是否接入CDN6.访问应用程序观察请求速度7.观察CD…

揭秘Stable Diffusion技术构建的未来人机识别模型

最近&#xff0c;AI 图像生成十分火热&#xff0c;当我们给它一个文本提示&#xff08;text prompt&#xff09;时&#xff0c;它将返回与文本匹配的图像&#xff0c;从而生成各种我们想要的图像。除了根据文本生产图像以外&#xff0c;它还可以用于图像修复、图像绘制、图像替…