[网络] TCP协议中的三次握手是什么?利用3次握手的SYN Flood DDOS攻击知道吗?

news2025/1/21 9:43:27

文章目录

  • 前言
  • 术语
  • TCP协议三次握手的由来
    • 网络协议里的握手阶段
  • Sequence Number是什么?
  • TCP协议三次握手都发送了什么数据?
    • TCP数据包长什么样?
  • SYN Flood DDOS攻击是什么?
  • 结语

前言


介于TCP协议中三次握手经常会被问到,以及TCP三次握手存在脆弱性会导致我们企业的开放服务器可能会面临黑客的恶意攻击,所以笔者打算用本文简单介绍一下TCP协议中的三次握手到底是什么,以及介绍一下黑客如何利用三次握手的脆弱性来进行攻击。

术语


  1. TCP协议:IETF组织通过RFC 9293(最新)定义的传输层控制协议。是个Specification,和JVM Specification可以被许多不同厂商实现一样,TCP的实现(Implementation)也有很多。
  2. TCP通信组件:TCP Peer,实现了TCP协议的实际通信组件,通常是操作系统级别实现的。
  3. 开放服务器:企业大量服务器中,处于内网、外网交界地方的服务器,即需要承受外部网络请求的第一站。
  4. TCP Client:TCP客户端,是TCP通信组件的一种。通常指TCP连接的发起方。
  5. TCP Server:TCP服务器,也是TCP通信组件的一种。通常指接受TCP连接请求的服务提供方。
  6. 同步:同步(synhronize),用白话来讲就是多个实体合计一下它们所掌握的情报(数据)。计算机中通常指代两个组件把各自手头掌握的数据调整到一致的这么个过程。

TCP协议三次握手的由来


三次握手,这个词并不是国人发明,在RFC 9293中,IETF组织就提到了three-way handshake,参考rfc9293的截图:
RFC 9293 three-way handshake
至于三次握手时什么,截图里其实也说得非常清楚了,three-way handshake是用来建立tcp连接的一个处理(procedure),通常是由一个TCP通信组件发起,由另一个TCP通信组件响应。这里还提到了同时(simultaneously)发起初始化的情况,不过这里咱们不讨论。

我们仅讨论最普遍的一个情况:TCP Client发起初始化,TCP Server响应初始化。
在上述的情况下呢,我们的TCP协议约定了TCP Client与TCP Server双方(两个TCP通信组件)需要靠三次通信来做通信组件自身的初始化工作

RFC 9293里面也为三次握手配了图:
TCP 三次握手

网络协议里的握手阶段

在进程中按照某协议制定的规则负责进行通信的通信组件呢,通常都是位于不同机器的不同进程里,所以在正常传递数据之前,会有做元信息(meta-data)同步的需求。这个阶段通常被称为握手阶段

举个例子就是:

  • TCP协议:握手阶段同步了双方的初始Sequence Number元信息。(Sequence Number信息对TCP协议非常重要,这个我们后面讨论)
  • TLS协议:握手阶段同步了双方的加密方式、加密参数等元信息。

如果读者对TLS协议不太了解且有兴趣了解的话,可以移步笔者以前写的这篇文章:《[网络] https是什么?https是怎么保障我们信息传输的安全的?》里面有讨论TLS协议的部分。

Sequence Number是什么?


在了解TCP三次握手之前,我们需要先了解TCP的重要概念之Sequence Number。

Sequence Number,中译:序列号。RFC中对其描述如下图:
TCP Sequence Numbers TCP序列号
简单来说呢,就是TCP协议中每一个字节的数据(every octet of data)都有其单独的序列号。数据的接收方会通过承认机制(Acknowledgment mechanism)去告知数据的发送方哪些数据已经被成功接收了。

也正是因为这种数据接收后告知对方数据是否送达的机制,使得如果一旦发生数据包丢失,发送方可以重发(retransmission)丢失数据包,使得TCP通信变得可靠。同一层的UDP协议没有这种送达回执和重发的机制,导致其使用UDP通信呢,是不可靠的。

TCP协议三次握手都发送了什么数据?


文章到这里,我们已经了解了TCP三次握手的由来和对于TCP通信组件来说非常重要的数据之Sequence Number。
我们也提到了TCP协议三次握手其实是同步初始Sequence Number这一元信息的一个过程。

对于使用TCP协议通信的两个通信组件(TCP Client和TCP Server)来说,无论是哪一方,都可以是数据的发送方和接收方,这意味着TCP Client有自己的一个初始Sequence Number,TCP Server也有自己的一个初始Sequence Number。双方在最初开始建立连接时,并不知道对方的初始Sequence Number,所以需要互相交换初始Sequence Number互相承认

那我们再来回看这个图:
TCP 三次握手

简单解释如下:

No.TCP客户端状态消息(数据)TCP服务器状态描述
1CLOSEDLISTTEN(监听)
2SYN-SENT<SEQ=100><CTL=SYN>SYN-RECEIVED第一次握手:客户端发起同步请求,初始序列号100
3ESTABLISHED<SEQ=300><ACK=101><CTL=SYN,ACK>SYN-RECEIVED第二次握手:服务端承认客户端同步请求,并发起同步请求,初始序列号为300
4ESTABLISHED<SEQ=101><ACK=301><CTL=ACK>EStABLISHED第三次握手:客户端承认服务端的同步请求。
5ESTABLISHED<SEQ=101><ACK=301><CTL=ACK><DATA>EStABLISHED以上三次握手后,双方的状态都变为ESTABLISHED ,即可正常发送数据了

可以看到其实三次握手发送的数据还是非常的简单,就是双方的一个初始序列号信息以及承认这个信息而已。如果你依然不理解<SEQ=100><CTL=SYN>这种消息的表达方式,可以结合下一章来理解。

TCP数据包长什么样?

TCP 数据包的格式呢,笔者贴在下面了。
TCP Header Format
那么我们结合这个图来看一下如<SEQ=300><ACK=101><CTL=SYN,ACK>这种信息代表着什么:

  • SEQ:第二排的Sequence Number就是我们的序列号信息所存放的地方。<SEQ=300>意味着这里携带的数据是100。
  • ACK:第三排的Acknowledgment Number就是我们数据接收方承认(ACK)序列号信息所存放的地方。<ACK=101>意味着这里携带的数据是101。
  • CTL:CTL全称Control,通常是标志位的集合,在TCP中呢表现为第四排的第二个字节。<CTL=SYN,ACK>意味着这个字节是0b00010010,即ACK和SYN标志位为1。

SYN Flood DDOS攻击是什么?


我们了解了TCP三次握手建立连接的原理之后。就不得不提一个与之相关的DDOS攻击了:SYN Flood,SYN泛洪攻击。SYN Flood Attack也被称为半开连接攻击(Half-open attack)。

还记得我们的三次握手吗?

  1. 客户端发送SYN
  2. 服务端回复SYN、ACK
  3. 客户端回复ACK

一般情况下,正常的TCP Client发起连接请求开启三次握手处理后,都能非常快速地完成三次握手的处理过程。
那么如果在第三次握手时,恶意开发的TCP客户端故意不回复ACK,那么我们的TCP连接就将处于一个半开(Half-Open)的抽象状态。这时我们的服务端通常会等待至超时(TIMEOUT)然后废弃这个半开连接。这个超时时间通常被认为是分钟(minute)级别的,一旦大量肉鸡利用这种半开连接攻击,会导致服务器的资源快速耗尽,进而无法向正常客户端提供服务。

至于如何解决这种半开连接攻击,很抱歉笔者作为一个应用开发者目前还没有服务器运维相关的知识去应对这种攻击,这通常是infrastructure team或是security team需要去考虑和担心的事情,有兴趣的读者只能自行查阅了。

结语


协议的设计者并不是神,它们能提供某项特性的同时,也一定需要额外的元信息,这些额外的元信息通常需要在两个通信组件中做数据同步,这个同步的过程被称为握手(handshake)。理解了这一点,笔者相信咱们再去理解其他网络协议的握手处理时,就能把握住其最主要的目的,能够更好更快速地理解协议设计者为什么设计。

我是虎猫,希望本文对你有帮助。(=・ω・=)

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

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

相关文章

NBA体育决策和数据挖掘分析

业务挑战 体育运用大数据主要体现在以下三个方面&#xff1a; 预测比赛结果和奖牌归属&#xff1b;更好地训练运动员 。数据和模型驱动体育决策让获胜和成功变得更有可能&#xff0c;体育统计(Sports Analytics)成为体育竞争的“杀手锏”。最近我们被客户要求撰写关于体育统计…

鲲鹏devkit性能分析工具介绍(一)

鲲鹏devkit性能分析工具介绍&#xff08;一&#xff09; 鲲鹏性能分析工具由四个子工具组成&#xff0c;分别为&#xff1a;系统性能分析、Java性能分析、系统诊断和调优助手。 系统性能分析是针对基于鲲鹏的服务器的性能分析工具&#xff0c;能收集服务器的处理器硬件、操作…

从2022安洵杯[babyPHP]看Soap+CLRF造成SSRF漏洞

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、PHP SOAP 二、漏洞成因 三、 题目知识准备 1、PHP Session反序列化 2、题目相关函数 四、[LCTF 2018]bestphps revenge 五、2022安洵杯 BabyPHP 前言 …

基于ASP.net的服装商城设计

目录 海秀衣城系统 2 1.概 述 2 1.1 网上购物的发展 2 1.2 三层架构技术简介 2 2. 系统总体设计 4 2.1 开发以及运行环境 4 2.2项目结构分析 4 2.3系统功能总体结构图 5 2.4系统功能结构分解图 5 3. 数据库设计 6 3.1 数据库设计 6 3.2 数据表 7 4. 模块设计 10 4.1 前端功能模…

SpringCloud微服务实践之七 网关(Gateway)

一、网关基本概念 &#xff08;一&#xff09;网关功能 身份认证和权限校验服务路由、负载均衡请求限流 &#xff08;二&#xff09;网关技术选型 SpringCloud提供了两个组件都可以实现网关功能&#xff1a; gatewayzuul 其中&#xff0c;Zuul是基于Servlet的实现&#xff…

SQL注入漏洞 | 数字型

文章目录前言MySQL 数字型前言 SQL注入漏洞 | iwebsec MySQL 数字型 页面观察&#xff1a;测试看回显 注入点判断&#xff1a;发现有sql注入漏洞 AND 可在 where 子语句中把两个或多个条件结合起来。如果第一个条件和第二个条件都成立&#xff0c;则 AND 运算符显示一条记录…

HBuilder X实现tabBar底部导航记录

首先&#xff0c;打开uniapp官网&#xff0c;找到tarbar官方文档&#xff0c;仔细阅读&#xff0c;具体位置如下&#xff0c;全局配置下面的pages.json页面路由里面找到tabBar&#xff0c;点击查看&#xff1a; 重点注意这两句话&#xff1a; 找到文档我们就可以按照上面的提示…

迭代器模式(Iterator)

参考&#xff1a; 迭代器设计模式 (refactoringguru.cn) [design-patterns-cpp/Iterator.cpp at master JakubVojvoda/design-patterns-cpp GitHub 文章目录一、什么是迭代器模式&#xff1f;二、实现三、优缺点优点缺点一、什么是迭代器模式&#xff1f; 提供一种方法&…

QFont-使用外部字体文件的问题

我们程序里面定义了某个结构体(这里简单描述为AStruct)&#xff0c;AStruct包含了一个QFont 类型的成员变量&#xff1a; struct AStruct {QFont ft; }; 在具体业务上&#xff0c;AStruct中的QFont会被传递给QPainter去绘制文本。 保存工程/加载工程时时&#xff0…

用Python写个爬虫,赚了!

前言 编程语言排行榜(Tiobe)发布了11月新榜&#xff0c;Python仍领先Java和C&#xff0c;在全球众多的老牌编程语言中&#xff0c;以其他对手无法企及的极高份额稳居榜单第一位。 榜单数据是客观真实的&#xff0c;当下Python的使用者越来越多&#xff0c;已经远超使用其他十…

【Linux初阶】认识冯诺依曼结构

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;计算机的冯诺依曼组成结构、冯诺依曼结构的数据交换特性&#xff0c;以宏观视角理解冯诺依曼下的网络数据传输…

Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本详解

环境声明 在运行本地示例之前&#xff0c;需要保证本机具备以下的基础环境&#xff0c;如果您的本地没有当前的环境&#xff0c;下面会一步步进行搭建&#xff0c;演示搭建过程。 Nacos 服务端Seata 服务端RocketMQ 服务端MySQL 服务端 可在国内https://gitee.com/mirrors/S…

低代码在离散制造业的实践

大家上午好&#xff0c;非常感谢明道云给我这个机会&#xff0c;来展示一下这个上海电气在明道云上面的应用。我的题目是《低代码在离散制造业的实践》。 引入明道云的背景 首先介绍一下我们电气数字科技有限公司。它是在2018年的时候&#xff0c;上海电气集团内部成立的数科…

捷码全新快速表单功能解读

在最近的更新中&#xff0c;捷码迎来了比较多的功能上新&#xff0c;其中最受大家关注的是全新的表单功能。无论是从功能丰富度还是操作便利性上都做了大量设计。本文将从重点功能设置操作流程上进行演示说明。 表单控件和关联 ——1对1、1对n、n对n 支持多场景 首先是表单控…

航空货运数据挖掘那些事|航班换季

目录前言航班换季航班换季对航空货运业务有哪些影响参考文献前言 就在上个月月底&#xff0c;即2022年10月29日到2022年10月30日&#xff0c;中国民航完成了2022年的夏秋季航季到2022/23年冬春航季切换工作&#xff0c;俗称航班换季&#xff0c;那么何为航班换季呢&#xff0c…

流媒体传输 - RTMP 协议

RTMP 是 Real Time Messaging Protocol&#xff08;实时消息传输协议&#xff09;的首字母缩写。它是由 Adobe 公司提出的一种应用层的协议&#xff0c;用来解决多媒体数据传输流的多路复用&#xff08;Multiplexing&#xff09;和分包&#xff08;packetizing&#xff09;的问…

氨基苯酚/多巴胺仿生修饰碳纳米管/α-氧化铝/ CNTs-Ag纳米复合材料

小编下面和大家来看间氨基苯酚/多巴胺仿生修饰碳纳米管/α-氧化铝/ CNTs-Ag纳米复合材料的制备&#xff01; 多巴胺仿生修饰材料的研究&#xff1a; 通过表面聚多巴胺层与银离子的螯合作用,通过表面聚多巴胺与银离子的螯合作用,利用葡萄糖作还原剂,在聚多巴胺修饰的聚酯纤维表…

HarmonyOS应用API手势方法-PanGesture

描述&#xff1a;用于触发拖动手势事件&#xff0c;滑动的最小距离为5vp时拖动手势识别成功。 Api&#xff1a;从API Version 7开始支持 接口&#xff1a; PanGesture(value?: { fingers?: number; direction?: PanDirection; distance?: number } | PanGestureOptions)…

IT6225/IT6225B Type-C转HDMI 4K60设计方案

ITE&#xff08;新联阳&#xff09;的IT6225/IT6225B&#xff0c;是一款Type-C转HDMI 460K的视频转换芯片 通过USB Type-C连接器将DP RX视频信号转换为HDMI/DVI TX视频信号。DP信号转接只用2lane&#xff0c;另外2lane可以输出USB 3.0/3.1信号&#xff0c;同时兼容PD 3.0&…

Zabbix自动监控windows端口(主动监控方式)

第一部分&#xff1a;服务器上的操作&#xff08;脚本&配置&#xff09; 创建脚本文件 在客户端新建discovertcpport.bat文件&#xff0c;放在C:\Program Files\Zabbix Agent目录中&#xff0c;内容如下&#xff1a; echo off echo { echo "data":[ f…