TCP/IP(六)TCP的连接管理(三)半连接

一  连接和连接

内容参考小林coding

说明: 普通'中小'厂不会问的这么'深',这么'细',但是当'性能调优'阶段必须掌握'原理'

①  内容提纲

②  概念

说明: '半连接'只是一个'中间'状态

②  图谱

二  半连接

①  查看 TCP 半连接队列长度

root '用户' 执行  --> netstat -antp | grep SYN_RECV | wc -l说明: 系统'不繁忙'的话一般结果是'0'

②   增大 TCP 半连接队列

nginx TCP backlog 分析优化和性能相关经验汇总

③   模拟 TCP 半连接队列溢出场景

DDOS概念

④  ddos攻击时现象

⑤  使用 hping3 工具模拟 SYN 攻击

背景: 本次'模拟实验'假定是'没有'开启 tcp_syncookies

步骤'1': Centos7.7通过'epel'源安装hping3 '仿真'工具

步骤'2': 客户端使用'hping3'工具'模拟'SYN攻击

⑥  服务端观察

观察1: 此时'半连接'队列的大小

观察'2': 通过 netstat -s 观察'半连接队列溢出'的情况,也即'溢出 drop'了多少netstat -s | grep "SYNs to LISTEN"

推荐: watch '持续' 观察隔'几秒'执行几次,如果有'上升'的趋势,说明当前存在'半连接队列溢出'的现象

⑦  哪些因素影响半连接队列的大小  探究1

纠正'误区'1: tcp_max_syn_backlog '不是' 半连接队列大小

内核 tcp_ipv4.c 代码中 TCP 半连接队列溢出的处理逻辑

强调: 以下'3'种场景触发'都'会'SYN'报文丢弃

 Linux '2.6.32' 内核版本, 'max_syn_backlog'、'somaxconn'、'backlog' 三者的关系

⑧  处于 SYN_RECV 状态的最大个数不是理论值 max_qlen_log

⑨  原因探究

说明: 该探究接上'⑧'

根据'前面的源码'分析,我们可以计算出'半连接队列' max_qlen_log 的最大值为 '256'

操作1: 客户端执行 hping3 发起 'SYN' 攻击hping3 -S -p 8080 --flood 192.168.3.200操作2: 服务端执行'如下命令'查看处于 'SYN_RECV' 状态的'最大'个数netstat -antp | grep SYN_RECV | wc -l

分析'条件3'产生'193'的原因

'小结'

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

内核参数: /proc/sys/net/ipv4/tcp_syncookies  '0'、'1'、'2' 含义'开启' syncookies 功能就可以在'不使用 SYN 半连接队列'的情况下'成功'建立连接

三   如何防御 SYN 攻击?

①  什么是半连接SYN攻击

DDOS攻击概念

②  半连接和全连接队列正常工作流程

Linux 内核的 SYN 队列 '半连接队列'与 Accpet 队列'全连接队列' 是'如何'工作的

③  避免 SYN 攻击四种方式

方式'1': 调大 netdev_max_backlog备注: 这个'基本'没有'听说过',也'未'经验证,先做'记录'吧

方式'2': 增大 TCP '半连接'队列条件: '不开启' net.ipv4.tcp_syncookies前提下

具体细节见上

方式'3': '开启' net.ipv4.tcp_syncookies

方式'4': 减少 'SYN+ACK' 重传次数内核参数: tcp_synack_retries

④   答疑解惑

思考: 'syncookies 1 启用'后就不需要半链接了?那'请求的数据'会存在哪里?

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch的基本运算,是不是共享了内存,有没有维度变化

可以把PyTorch简单看成是Python的深度学习第三方库,在PyTorch中定义了适用于深度学习的基本数据结构——张量,以及张量的各类计算。其实也就相当于NumPy中定义的Array和对应的科学计算方法,正是这些基本数据类型和对应的方法函数,…

Python笔记;库,包,模块

在Python中库没有官方说法。 是其他地方沿用过来的。 姑且认为他是一个包或多个包的集合。 包里有子包和模块。 模块以.py格式存储。 下图是一个例子,对于Robot包: import math a math.sqrt(9) 等价于 from math import * a sqrt(9) from math im…

FairGuard游戏加固无缝兼容 Android 14 正式版

北京时间10月4日,谷歌公司在“Made by Google 2023”硬件发布会上公开了新版安卓操作系统—— Android 14 正式版。 为保证产品的加固效果并提供更优质的服务,FairGuard游戏加固团队第一时间组织人员进行了相关测试。 据测试,FairGuard游戏…

3、在docker 容器中安装tomcat

1、在服务器上查找tomcat镜像,查看前5条 docker search tomcat --limit 5​​​​​​​ 2、拉取镜像到本地 拉取官方的tomcat到本地 docker pull tomcat:9.0.34-jdk8 3、查看本地镜像 docker images |grep tomcat 4、启动tomcat 服务 使用默认配置 docker ru…

操作系统 面试题(二)

PART1 1.乐观锁和悲观锁的区别是什么? 2.乐观锁和悲观锁的实现方式分别有哪些? 3.平均周转时间如何计算? 4.银行家算法是什么? 5.IO多路复用是什么? 6.HTTP的头部包含哪些内容? 7.TCP如何保持连接&a…

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则;了解什么是JMS。

目录 JMS 讲解★ RabbitMQ的核心概念★ RabbitMQ工作机制★ Connection(连接) 与 Channel(通信信道)★ Exchange★ Exchange与Queue★ Exchange的类型(4种)及 该类型对应的路由规则 看RabbitMQ 之前&#x…

Linux系统下centos中在线添加硬盘后不重启在线扩容linux系统目录不重启系统

Centos7 在线添加硬盘不重启系统 CentOS 7在线添加新磁盘,无需重启 现有环境基本都是线下server以及线上虚拟机等,几乎都支持热插拔,热扩容,所以在线添加新磁盘就尤为重要,这样可以无需中断当前服务或进程也可对其进行添加硬盘操作。 1.添加硬盘: 虚拟机在线状态下对其进行添加…

如何使用CSS和JavaScript实施暗模式?

近年来,暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文本,不仅可以减轻眼睛疲劳,还可以节省电池续航时间,尤其是在OLED屏幕上。 不妨了解如何结合使用CSS和JavaScript为网站和Web应用程序添加暗模式选项。 了解暗…

pytorch学习第三篇:梯度

下面介绍了在pytorch中如何进行梯度运算,并介绍了在运行梯度计算时遇到的问题,通过解决一个个问题,来深入理解梯度计算。 梯度计算 import torch x = torch.rand(3,4,requires_grad=True) b = torch.rand(4,3,requires_grad=True) print(x,b)y = x@bt = y.sum()求导数 t.…

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统,用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户,当用户规模扩大到一定程度时,开始联系相关企业提供信息服务,并…

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器…

Python3无法调用Sqlalchemy解决(mysqldb)

原因 在安装Sqlalchemy后运行程序报错 无法导入mysqldb,缺失模块 ImportError: No module named ‘MySQLdb’ 既然缺少 MySQLdb 这个模块,尝试按照正常的想法执行 pip install MySQLdbpip install mysql-python 应该能解决,但是却找不到…