首页 > 其他分享 >TCP三次握手过程详解

TCP三次握手过程详解

时间:2024-08-28 14:21:26浏览次数:17  
标签:重传 ACK 握手 SYN TCP 详解 服务器 连接 客户端

三次握手过程:

在这里插入图片描述

客户端视角:

1.客户端调用connect,开启计时器,发送SYN包,如果重传超时,认为连接失败

2.如果收到服务端的ACK,则进入ESTABLISHED状态

3.清除重传计时器,发送ACK,开启保活计时器:如果再次收到ACK+SYN说明服务端没收到第三次握手包,进行了重传,此时客户端会重传ACK

注意:由于客户端在第二次握手成功后已经进入ESTABLISHED状态,认为连接已经建立,但如果第三次握手包ACK丢失,且服务端一直未能收到ACK(服务端重传包丢失,或客户端收到重传包但ACK仍丢失),服务端会因为重传次数上限而认为连接失败,重新进入listen,那么此时是一种半连接,客户端发送数据会失败

服务端视角:

1.listen()创建半连接队列和全连接队列

2.收到SYN包,如果半连接队列已满,丢弃该连接,否则为该连接创建一个socket加入到半连接队列中

3.回复SYN-ACK包,开启重传计时器

4.等待ACK,没有收到则重传SYN-ACK,重传上限后,认为连接失败,清除socket,回到listen状态

5.如果收到ACK,则进入ESTABLISHED状态

防御SYN泛洪攻击:

1. SYN Cookies

SYN Cookies是一种在服务器端防止SYN泛洪攻击的技术。当服务器收到SYN请求时,不直接为其分配资源,而是通过计算一种特殊的加密散列值(称为SYN Cookie)来生成一个SYN-ACK报文的序列号,发送给客户端。只有当客户端回应ACK时,服务器才真正为连接分配资源,并通过验证ACK中的序列号来确认连接的合法性。

  • 优点:不需要维护大量的半连接状态,可以有效防止队列溢出。
  • 缺点:可能会增加服务器的计算负担,并且在某些情况下(如选择确认SACK的使用)限制了TCP的功能。

2. 增加半连接队列的大小

通过增大服务器的半连接队列(backlog)大小,可以增加服务器在短时间内能够处理的未完成连接的数量,从而在一定程度上缓解SYN泛洪攻击的影响。

  • 优点:简单有效,能够承受更大规模的攻击。
  • 缺点:只是暂时缓解,当攻击流量进一步增加时,效果有限。

3. 减少SYN-ACK重传次数

服务器可以通过减少SYN-ACK的重传次数和降低重传的超时时间来应对SYN泛洪攻击。这样可以减少半连接队列中停留时间过长的连接,从而尽快释放资源。

  • 优点:快速清理无效连接。
  • 缺点:可能会对网络条件较差的合法连接造成影响。

4. 启用防火墙或入侵检测系统(IDS/IPS)

防火墙和入侵检测系统可以检测并过滤掉异常的流量,从而在流量进入服务器之前将其拦截。

  • 优点:可以在网络层或传输层提前处理攻击,减少服务器的负担。
  • 缺点:配置和维护复杂,且可能存在误判的情况。

5. IP黑名单

通过检测和识别恶意IP,将其加入黑名单,阻止这些IP发送的SYN请求。

  • 优点:直接阻断恶意流量。
  • 缺点:难以应对分布式攻击(DDoS),并且误判风险较高。

6. 负载均衡和分布式架构

通过部署负载均衡器,将流量分散到多个服务器或分布式系统中,可以减轻单个服务器的负载压力,从而提高整体抗攻击能力。

  • 优点:提高了系统的整体可用性和抗攻击能力。
  • 缺点:需要额外的硬件或架构调整,增加了系统复杂性。

7. 速率限制(Rate Limiting)

可以配置服务器或网络设备对单个IP地址的SYN请求进行速率限制,防止单个IP地址在短时间内发送过多的连接请求。

  • 优点:有效限制攻击者的请求速率。
  • 缺点:可能影响到合法用户的正常请求,特别是在高并发情况下。

IP地址在短时间内发送过多的连接请求。

  • 优点:有效限制攻击者的请求速率。
  • 缺点:可能影响到合法用户的正常请求,特别是在高并发情况下。

推荐学习 https://xxetb.xetslk.com/s/p5Ibb

标签:重传,ACK,握手,SYN,TCP,详解,服务器,连接,客户端
From: https://blog.csdn.net/2303_77208351/article/details/141614261

相关文章

  • 安装python教程详解-(Linux和Windows11安装python)
    一、Linux编译安装Python3.12.5python官网地址:WelcometoPython.org1.1安装python环境1.1.1安装开发工具包和依赖#yum-ygroupinstall"DevelopmentTools" #yum-yinstallgcczlibzlib-devellibffilibffi-develreadline-developenssl-developenssl11ope......
  • openGuass——表空间、数据库、Schema详解
    目录一、表空间二、数据库三、模式:Schema四、databaseschematable之间的关系五、表六、分区表七、索引八、视图九、序列十、同义词十一、约束一、表空间自带了两个表空间:pg_default和pg_global。查看命令:\db默认表空间pg_default:用来存储非共享系统表、用......
  • 地平线—征程2(Journey 2-J2)芯片详解(25)—PMU+系统计数器
    写在前面本系列文章主要讲解地平线征程2(Journey2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey2-J2)芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)错过其他章节的同学可以电梯直达目录↓↓↓地平线—征程2(Journey2-J2)芯片详解——目录-CSDN博客9......
  • 地平线—征程2(Journey 2-J2)芯片详解(27)—DDR Interface Timings(DDR接口时序)
    写在前面本系列文章主要讲解地平线征程2(Journey2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey2-J2)芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)错过其他章节的同学可以电梯直达目录↓↓↓地平线—征程2(Journey2-J2)芯片详解——目录-CSDN博客1......
  • 接口测试用例设计详解
    接口测试用例设计详解在软件开发中,接口测试是一项重要的质量保证措施,它确保各个组件之间能够正确地通信。黑盒测试是一种常见的测试方法,它只关注输入和输出而不关心内部实现细节。本文将详细介绍如何基于黑盒测试的原则设计接口测试用例,并结合接口文档的技术要求,考虑各种边......
  • 使用Python进行Mock测试详解(含Web API接口Mock)
    使用Python进行Mock测试详解(含WebAPI接口Mock)在软件开发过程中,单元测试是非常重要的一部分。为了确保代码的质量和可靠性,开发者需要编写测试用例来检查代码的行为是否符合预期。然而,在测试中有时会遇到一些难以直接测试的情况,例如依赖外部系统、数据库或网络服务等。在这......
  • 【一文详解】内外网文件摆渡系统,解决网间数据安全传输问题
    一、内外网文件摆渡系统的背景数字化转型进一步推动了数据的移动,而随着攻击者加速利用日常生活中的数据依赖性,数据泄露也随之扩大。企业为保护网络安全和数据安全,使用网络隔离手段进行网络隔离,如银行内部将网络隔离为生产网、办公网、DMZ区;如生物制药企业、医院等机构将网络隔离......
  • 【数据结构】关于二叉搜索树,你知道如何实现增删模拟吗???(超详解)
    前言:......
  • Datawhale AI夏令营 Task 1 《深度学习详解》 - 1.1 通过案例了解机器学习的学
        一、学习目标通过具体案例深入理解机器学习的概念、工作原理以及在实际应用中的作用。二、主要内容案例介绍:详细阐述了图像识别、语音识别、自然语言处理等领域的具体案例,如人脸识别系统、智能语音助手、文本......