TCP三次握手全方面详解
文章目录
- (1) 三次握手各状态
- CLOSE状态
- SYN_SENT状态
- SYN_RECV状态
- ESTABLISHED状态
- (2) 为什么握手时的seqnum是随机值,以及acknum的功能
- (3) 三次握手中的半连接队列(SYN队列)和全连接队列(ACCEPT队列)
- 半连接队列
- 全连接队列
- (4) 怎么缓解SYN泛洪
- (5) TCP实现P2P
- (6) 为什么需要三次握手?
(1) 三次握手各状态
CLOSE状态
发起连接和listen之前的初始状态
SYN_SENT状态
第一次握手,客户端向服务器发起连接请求,发送一个SYN数据包,该数据包中包含了客户端的初始序列号等信息,用于请求与服务器建立TCP连接
SYN_SENT: 初始状态发送SYN报文后,即进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。
SYN_RECV状态
第二次握手,服务器接着会向客户端发送一个SYN+ACK数据包,这是对客户端SYN请求的响应。该数据包包含了服务器的初始序列号以及对客户端SYN包的确认信息,表示服务器同意与客户端建立连接。
SYN_RCVD: 这个状态表示LISTEN状体时接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态
ESTABLISHED状态
第三次握手,客户端收到服务器的SYN+ACK包后,会 向服务器发送一个ACK数据包 ,用于确认收到了服务器的SYN+ACK包。这个ACK包标志着客户端和服务器之间的TCP连接已经基本建立成功,此时连接处于ESTABLISHED状态。
当服务端收到收到ack包以后会进入ESTABLISHED状态。
(2) 为什么握手时的seqnum是随机值,以及acknum的功能
在第一次握手的时候,tcp包头部的Sequence number是一个随机值,就算自己随便设置一个值后续的TCP连接也是可以正常运作的(上图的seqnum = 1234),但是在第二次握手回复的TCP包中的acknum会比第一次握手的Sequence number多一(acknum 1235),这里的1235表示表示 1235以前的所有包都收到了,作用:保证了tcp包的不丢失,不重复
包括第二次握手时服务端发出的seqnum也是随机值(4567),但是第三次握手时的acknum是seqnum+1(4568)
作用:避免被抓包以后被别人知道之前发过多少个包
(3) 三次握手中的半连接队列(SYN队列)和全连接队列(ACCEPT队列)

半连接队列
当服务器收到客户端发送的 SYN 报文段时,会创建一个半连接节点并放进半连接队列,该节点记录了该连接的相关信息,如客户端的 IP 地址、端口号等,此时连接处于半连接状态,
SYN队列的作用:在服务器处理能力有限的情况下,SYN 队列可以暂时缓存客户端的连接请求,避免因为同时处理过多连接请求而导致系统崩溃。
全连接队列
服务器收到客户端的ACK包后,会检查这个ACK包的合法性和有效性,如确认序列号是否正确等。如果检查通过,服务器会将对应的连接从SYN队列中取出,并放入accept队列。Accept 队列用于存放已经完成三次握手的 TCP 连接,此时,应用程序就可以通过调用accept系统调用从accept队列中获取已经建立好的连接,开始进行数据传输等操作。
Accept队列的作用:
(1)Accept 队列将网络层已经建立好的连接与应用层的处理隔离开来。应用层可以按照自己的节奏从 Accept 队列中获取连接,而不会受到网络层连接建立速度的直接影响。
(2)缓冲连接数据:在应用程序暂时无法处理新连接时,Accept 队列可以作为一个缓冲区域,存储这些已经建立的连接,避免连接因为等待处理时间过长而出现问题。
(4) 怎么缓解SYN泛洪
(1)net.ipv4.tcp_max_syn_backlog:在 Linux 系统中,该参数用于设置 SYN 队列的最大长度。默认值通常为 1024 或 2048,可以根据服务器的性能和实际需求进行调整。
通过限制 SYN 队列的长度,可以在一定程度上抵御 SYN Flood 攻击。当 SYN 队列已满时,服务器会丢弃新的 SYN 请求,从而避免被大量伪造的 SYN 报文淹没。
(2)somaxconn:这是系统级别的参数,用于限制 Accept 队列的最大长度。在不同的操作系统中,默认值可能不同。例如在 Linux 中,默认值通常为 128。
listen(int socketfd, int backlog):在网络编程中,listen 函数的 backlog 参数用于设置服务器端监听套接字的 Accept 队列长度。它会覆盖系统默认的 somaxconn 值,但通常不能超过 somaxconn。
当 Accept 队列已满时,服务器会拒绝新的 SYN 请求,从而避免服务器因处理大量的 SYN 请求而耗尽资源,在一定程度上可以缓解 SYN 泛洪攻击对服务器造成的影响。
(5) TCP实现P2P

P2P中没有客户端和服务端的概念
(6) 为什么需要三次握手?
三次握手的主要目的是为了确认服务器端和客户端的发送和接受能力是否正常
-
第一次握手:客户端发送网络包,服务端收到了。 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
-
第二次握手:服务端发包,客户端收到了。 这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
-
第三次握手:客户端发包,服务端收到了。 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
假设只有两次握手。
当客户端发送第一个SYN,但由于网络延迟或其他原因,第一个SYN没有及时到达服务端,于是客户端又发送一次SYN,这次的SYN成功到达了服务端,在连接结束后,第一个SYN终于到了服务端,此时服务端以为客户端再次发起连接请求,于是回复ACK+SYN导致再次连接再次建立,浪费资源
相关文章:
TCP三次握手全方面详解
文章目录 (1) 三次握手各状态CLOSE状态SYN_SENT状态SYN_RECV状态ESTABLISHED状态 (2) 为什么握手时的seqnum是随机值,以及acknum的功能(3) 三次握手中的半连接队列(SYN队列)和全连接队列(ACCEPT队列)半连接队列全连接队…...
【C#】一维、二维、三维数组的使用
在C#中,数组是用于存储固定数量相同类型元素的数据结构。根据维度的不同,可以分为一维数组、二维数组(矩阵阵列)、三维数组等。每增加一个维度,数据的组织方式就会变得更加复杂。 一维数组 一维数组是最简单的数组形…...
MIT开源7B推理模型Satori:用行动思维链进行强化学习,增强自回归搜索
自OpenAI的o1发布以来,研究社区为提升开源LLM的高级推理能力做出了诸多努力,包括使用强大的教师模型进行蒸馏、蒙特卡洛树搜索(MCTS)以及基于奖励模型的引导搜索等方法。 本研究旨在探索一个新的研究方向:使LLM具备自回…...
【JVM详解二】常量池
一、常量池概述 JVM的常量池主要有以下几种: class文件常量池运行时常量池字符串常量池基本类型包装类常量池 它们相互之间关系大致如下图所示: 每个 class 的字节码文件中都有一个常量池,里面是编译后即知的该 class 会用到的字面量与符号引…...
w200基于spring boot的个人博客系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
【算法】快速排序算法的实现:C 和 C++ 版本
1. 算法简介 快速排序(Quick Sort)是由英国计算机科学家霍尔(C.A.R. Hoare)在1960年提出的一种高效的排序算法。它采用了分治法(Divide and Conquer)策略,通常具有很好的性能。在平均情况下,快速排序的时间复杂度为 O(n log n),但在最坏情况下可能退化为 O(n^2),不过…...
前沿科技一览未来发展趋势
脑机接口技术在医疗康复领域有了新进展。这技术让机器读懂大脑信号,帮助病人找回身体功能。 比如,瘫痪人士可以用它来控制假肢。在美国,一名瘫痪者通过这个技术,能用自己意念控制机械臂,喝到饮料。这种技术对提升患者…...
js滚动到页面最底部
setTimeout(()> { //延后执行,等页面渲染结束let container document.querySelector(.raise-flag-content); //找到当前divif (container) {container.scrollTop container.scrollHeight - (container.clientHeight - 400 );}})container.scrollTop container…...
视觉硬件选型和算法选择(CNN)
基础知识 什么是机械视觉: 机械视觉是一种利用机器代替人眼来进行测量和判断的技术,通过光学系统、图像传感器等设备获取图像,并运用图像处理和分析算法来提取信息,以实现对目标物体的识别、检测、测量和定位等功能。 机械视觉与人类视觉有什…...
Mybatis篇
1,什么是Mybatis ( 1 )Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁…...
【Python】元组
个人主页:GUIQU. 归属专栏:Python 文章目录 1. 元组的本质与基础概念1.1 不可变序列的意义1.2 元组与数学概念的联系 2. 元组的创建方式详解2.1 标准创建形式2.2 单元素元组的特殊处理2.3 使用 tuple() 函数进行转换 3. 元组的基本操作深入剖析3.1 索引操…...
【AI实践】deepseek支持升级git
当前Windows 11 WSL的git是2.17,Android Studio提示需要升级到2.19版本 网上找到指导文章 安装git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…...
【AI实践】Cursor上手-跑通Hello World和时间管理功能
背景 学习目的:熟悉Cursor使用环境,跑通基本开发链路。 本人背景:安卓开发不熟悉,了解科技软硬件常识 实践 基础操作 1,下载安装安卓Android Studio 创建一个empty project 工程,名称为helloworld 2&am…...
Redis数据库(二):Redis 常用的五种数据结构
Redis 能够做到高性能的原因主要有两个,一是它本身是内存型数据库,二是采用了多种适用于不同场景的底层数据结构。 Redis 常用的数据结构支持字符串、列表、哈希表、集合和有序集合。实现这些数据结构的底层数据结构有 6 种,分别是简单动态字…...
【计组】实验五 J型指令设计实验
目录 一、实验目的 二、实验环境 三、实验原理 四、实验任务 代码 一、实验目的 1. 理解MIPS处理器指令格式及功能。 2. 掌握lw, sw, beq, bne, lui, j, jal指令格式与功能。 3. 掌握ModelSim和ISE\Vivado工具软件。 4. 掌握基本的测试代码编写和FPGA开发板使用方法。 …...
ubuntu 本地部署deepseek r1 蒸馏模型
本文中的文件路径或网络代理需要根据自身环境自行删改 一、交互式chat页面 1.1 open-webui 交互窗口部署:基于docker安装,且支持联网搜索 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线操作。它支持各种 LLM…...
RestTemplate Https 证书访问错误
错误信息 resttemplate I/O error on GET request for “https://21.24.6.6:9443/authn-api/v5/oauth/token”: java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.c…...
MySQL内存使用率高且不释放问题排查与总结
背景 生产环境mysql 5.7内存占用超过90%以上,且一直下不来。截图如下: 原因分析 1、确定mysql具体的占用内存大小,通过命令:cat /proc/Mysql进程ID/status查看 命令执行后的结果比较多(其他参数的含义想了解可参考这…...
mysql8 从C++源码角度看sql生成抽象语法树
在 MySQL 8 的 C 源码中,SQL 语句的解析过程涉及多个步骤,包括词法分析、语法分析和抽象语法树(AST)的生成。以下是详细的解析过程和相关组件的描述: 1. 词法分析器(Lexer) MySQL 使用一个称为…...
【DeepSeek】DeepSeek概述 | 本地部署deepseek
目录 1 -> 概述 1.1 -> 技术特点 1.2 -> 模型发布 1.3 -> 应用领域 1.4 -> 优势与影响 2 -> 本地部署 2.1 -> 安装ollama 2.2 -> 部署deepseek-r1模型 1 -> 概述 DeepSeek是由中国的深度求索公司开发的一系列人工智能模型,以其…...
别再手动填Excel了!用Java+Spire.XLS 15.6.3实现批量报表自动化(附完整源码)
Java报表自动化革命:Spire.XLS实战指南与生产力跃迁 凌晨三点的办公室,最后一份月度销售报表终于核对完毕。这样的场景是否似曾相识?据统计,全球超过70%的企业级数据仍通过Excel流转,而其中近40%的时间消耗在机械化的…...
augmentcode配置智谱、Deepseek、Minimax
Minimax 渠道名称:Minimax接口地址:https://api.minimaxi.com/anthropic/v1/chat/completionsToken:API Key模型:MiniMax-M2.7格式:默认格式 deepseek 渠道名称:deepseek接口地址:https://api.d…...
Alpamayo-R1-10B详细步骤:从supervisorctl服务管理到日志实时监控
Alpamayo-R1-10B详细步骤:从supervisorctl服务管理到日志实时监控 1. 引言:为什么你需要关注这个自动驾驶模型 如果你正在研究自动驾驶,或者对AI如何“看懂”路况并做出决策感到好奇,那么Alpamayo-R1-10B绝对值得你花时间了解。…...
AgentCPM模型API接口设计规范与安全防护最佳实践
AgentCPM模型API接口设计规范与安全防护最佳实践 最近在帮几个团队把他们的AgentCPM模型从本地测试环境搬到线上,发现大家普遍有个误区:觉得模型能跑通、接口能调通,就算部署成功了。结果呢,没过多久就遇到了各种问题——有人恶意…...
SPI Flash时序参数详解:如何用Synopsys VIP验证Micron芯片的HOLD时序
SPI Flash时序验证实战:Synopsys VIP在Micron芯片HOLD时序分析中的应用 当硬件验证工程师面对SPI Flash芯片时,时序参数的精确验证往往是项目成败的关键。Micron作为主流存储芯片供应商,其SPI Flash产品广泛应用于嵌入式系统和FPGA设计中&…...
SiameseAOE中文-base实战教程:ABSA结果用于A/B测试——新旧版本UI情感变化分析
SiameseAOE中文-base实战教程:ABSA结果用于A/B测试——新旧版本UI情感变化分析 1. 快速了解SiameseAOE模型 SiameseAOE是一个专门用于中文属性情感抽取的模型,它能从文本中自动识别出属性词和对应的情感词。简单来说,就是能从用户评论中找出…...
告别转换限制:实测可免费批量处理Geojson、Shapefile与KML的在线工具指南
1. 为什么你需要这个免费批量转换工具? 作为一个经常处理地理信息数据的老手,我太懂你们遇到的痛点了。上周帮学弟改毕业论文,他用的那个知名在线转换工具,刚传了第4个文件就弹出"本月免费额度已用完"——这哪够用啊&am…...
认知研究避坑指南:为什么CHARLS数据需要按教育程度分层修正?
认知研究避坑指南:教育程度分层在CHARLS数据修正中的关键作用 老龄化认知研究领域的数据分析常常面临一个棘手问题:如何确保不同时间点收集的认知测试分数具有可比性?中国健康与养老追踪调查(CHARLS)作为国内重要的老龄…...
力扣994. 腐烂的橘子
题目:腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 0 代表空单元格;1 代表新鲜橘子;2 代表腐烂的橘子。 每分钟,腐…...
Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器)
第一章:Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器) 在微服务与Serverless场景中,Python多解释器(如PyO3、subinterpreters或进程级隔离)常因模块导入、C扩展初始…...
