TCP三次握手

TCP三次握手


文章目录

  • TCP三次握手
    • 1. TCP三次握手过程和状态变迁
      • 1. 准备工作
      • 2. 进行连接
    • 2. 能把三次握手改为两次握手吗?
    • 3. 改为两次握手会出现什么后果?
    • 4. 改为四次握手行不行?
    • 5. TCP第三次握手失败了怎么办?
    • 6. 三次握手是否可以携带数据?
    • 7. SYN泛洪攻击


1. TCP三次握手过程和状态变迁

在这里插入图片描述

TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。

1. 准备工作

TCP服务器先创建传输控制块TCB,时刻准备接收客户进程的连接请求,此时服务器处于LISTEN(监听)状态,客户端处于CLOSE(关闭)状态。

什么是传输控制块?

TCB传输控制块包含了数据发送双方对应的socket信息以及拥有装载数据的缓冲区。
在两个设备在建立连接之前,双方都必须要做一些准备工作,分配内存建立起TCB传输控制块就是连接之前必须要做的工作。

2. 进行连接

第一次握手: 客户端给服务器发送一个同步报文段SYN,并指定客户端的初始序列号ISN(Initial Sequence Number),此时客户端处于SYN_SENT状态。首部的同步位SYN = 1(SYN只是一个比特位,0表示不是SYN,1表示是SYN),初始序列号seq = m。SYN = 1的报文段不能携带任何的数据,但要指定序号。

第二次握手: 服务器接收到来自客户端的同步报文段SYN后,会以自己的SYN报文作为应答, 并且也指定了自己的初始序列号ISN。同时会把客户端的 seq+1 确认序列号ack的值,表示自己已经收到了客户端的同步报文段SYN,此时服务器处于SYN_RCVD的状态。确认报文段中SYN = 1,ACK = 1(ACK也只是一个比特位,0表示不是ACK,1表示是ACK),确认序列号ack = m+1,初始序列号seq = n。

第三次握手: 客户端收到来自服务器的同步报文段SYN之后,会发送一个确认报文段ACK,以服 务器的 seq+1作为ack的值 ,表明自己已经收到来自服务器的同步报文段SYN。客户端进入ESTABLISHED状态,服务器确认报文段ACK之后,也会进入ESTABLISHED状态。确认报文段中,ACK = 1,确认序列号 ack = n+1,序列号 seq = m+1。

双方已经建立起连接,可以正常的发送数据。

2. 能把三次握手改为两次握手吗?

第三次握手是为了防止失效的请求连接到达服务器,让服务器错误的打开连接。

经过三次握手让客户端和服务器互相知道了自己的发送、接收和对方发送、接收都是正常的。

3. 改为两次握手会出现什么后果?

假如客户端发出了连接请求,但因为网络波动导致服务器并没有收到来自客户端的请求连接,于是客户端又重发了一次连接请求,客户端和服务器经过两次握手就建立好连接。双方开始传输数据,数据传输完成以后,双方断开连接。过一段时间后,原本在网络传输中搁置的连接请求到达了服务器。服务器以为是客户端又发出来一次新的连接请求,于是就向客户端发送确认报文段,同意建立连接(两次握手只需要服务器发出确认报文段,就建立好连接)。此时服务器一直在等待客户端发送的数据,一直浪费着系统资源。

4. 改为四次握手行不行?

TCP三次握手原本应该是"四次握手",但是中间的同步报文段SYN和应答报文ACK是可以合在一起的,这两个操作在时间上是同时发送的。

当客户端的到达同步报文段SYN到达服务器的时候,服务器的内核就会第一时间进行应答报文段ACK, 同时也会第一时间发起同步报文段SYN,这两件事情同时触发,于是就没必要分成两次传输,直接一步到位。分成两次反而会更浪费系统资源(需要进行两次的封装和分用)。

5. TCP第三次握手失败了怎么办?

服务器发送了SYN+ACK报文后就会启动一个定时器,等待客户端返回的ACK报文。如果服务器在定时器的范围内没有收到来自客户端的ACK报文,服务器会再次重发SYN+ACK报文。重传的次数可以根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认为5次。

达到重传的指定次数后仍然没有收到ACK应答,那么一段时间后,服务器自动关闭这个连接。但是client认为这个连接已经建立好了。

如果客户端向服务器发送数据,服务器将以RST包(重置连接)响应。

6. 三次握手是否可以携带数据?

第一次、第二次不可以,第三次可以。

如果第一次握手可以携带数据的话,那么将会使服务器更容易遭受攻击。如果第一次握手携带就大量的数据,那么服务器需要花老长的时间才能对此解析。如果进行重复的发送,那么服务器就会因为系统资源殆尽而崩溃。

第三次握手可以携带数据。第三次握手时客户端处于ESTABLISH状态。对于客户端来说,它已经建立好了连接,并且它已经知道服务器的接收能力和自己的发送能力是正常的,所以可以进行正常的发送数据。

7. SYN泛洪攻击

SYN泛洪攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向服务器发出请求,而被服务器发出的响应响应将永远发送不到目的地,那么就会触发服务器的超时重传机制等待客户端的响应(客户端的IP地址不存在,根本不会进行响应)。那么被服务器在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

措施:

  1. 降低SYN timeout时间
  2. 采用SYN cookie设置
  3. 增加半连接数
  4. 合理地采用防火墙等外部网络安全设施

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索 Elasticsearch 8.X Terms Set 检索的应用与原理

1、Terms Set 检索简介 Terms Set查询是Elasticsearch中一种强大的查询类型,主要用于处理多值字段中的文档匹配。 其核心功能在于,它可以检索至少匹配一定数量给定词项的文档,其中匹配的数量可以是固定值,也可以是基于另一个字段的…

抖音商城小程序搭建的注意事项

抖音商城小程序已经成为了越来越多电商企业的选择,毕竟它具有强大的用户资源和社交传播力。但是,在搭建抖音商城小程序的过程中,还有一些需要注意的事项。 1、制定明确的策略和目标 在搭建抖音商城小程序前,必须事先制定明确的策…

三步配置轻量级服务器nginx

这里写目录标题 一 nginx及其应用场景1.什么是nginx2.应用场景背诵 二 nginx的配置安装1.选择nginx版本2. 安装配置环境3.安装nginx4.启动nginx 三 访问 一 nginx及其应用场景 1.什么是nginx 一款轻量级的Web服务器,反向代理服务器,以及电子邮件代理服…

java获取resources路径的方法

我们在写程序的时候,有时候会发现代码不能正常运行,出现提示异常的问题,这就说明我们的代码没有执行完,也就是没有 resource,其实遇到这种情况,我们只需要把代码重新执行一遍即可。 在 java中是可以实现 re…

实验六 触发器与存储过程

实验六 触发器与存储过程 目录 实验六 触发器与存储过程 1、SQL触发器:删除学生数据题目代码题解 2、SQL触发器:创建成绩表插入触发器题目代码题解 3、 SQL存储过程:查询订单题目代码题解 4、SQL存储过程:建立存储过程&#xff0c…

浅析S32K324的时钟树

S32K3XX系列的时钟树梳理 如下图为S32K3XX系列的时钟树图: 一、时钟源 时钟源说明FIRC快速内部RC时钟源SIRC慢速内部RC时钟源FXOSC快速外部晶振时钟源SXOSC慢速外部晶振时钟源 S32K3系列的mcu有4个时钟源如上表。 二、FIRC(快速内部RC时钟源&#…

【A200】 TX1核心 JetPack4.6.2版本如何修改DTB文件测试全部SPI

大家好,我是虎哥,很长时间没有发布新内容,主要是这段时间集中精力,研究DTB设备树的修改,以适配不同载板,同时也是专门做了一个TX1&TX2核心,双网口,可以使用SPI 扩展CAN接口的载板…

Actuators + jolokia

Actuators + jolokia Jolokia造成的XXE漏洞 首先我们查看我们当前环境http://x.x.x.x/jolokia/list地址,是否存在reloadByURL这个方法, 这个方法是造成RCE的关键。因为logback组件提供的reloadByURL操作使我们可以从外部URL重新加载日志配置 创建logback.xml和file.dtd文件…

【神经网络】tensorflow实验9--分类问题

1. 实验目的 ①掌握逻辑回归的基本原理,实现分类器,完成多分类任务; ②掌握逻辑回归中的平方损失函数、交叉熵损失函数以及平均交叉熵损失函数。 2. 实验内容 ①能够使用TensorFlow计算Sigmoid函数、准确率、交叉熵损失函数等&#xff0c…

tomcat集群下的session共享和负载均衡

环境 操作系统:windows tomcat1:Apache Tomcat/7.0.52(8085) tomcat2:Apache Tomcat/7.0.52(8086) jre:1.7.0_80 nginx:nginx-1.20.1(8070) redis…

人工智能洗稿-免费自媒体洗稿工具

文字洗稿 文字洗稿是指通过修改、重组、删除、替换等手段对文本进行优化、清理和调整,以达到改善文章质量、增加独特性和提高可读性的目的。文字洗稿是自媒体行业的一个重要需求,尤其是在批量撰写文章或需要大量修改文本的情况下。文字洗稿分为自动洗稿…

如何用ChatGPT搭建品牌文本体系?(品牌名+slogan+品牌故事)

该场景对应的关键词库(26个): 品牌名、奶茶、中文名、情感联想度、饮料、价值观/理念、发音、slogan、产品功能导向、行业性质导向、经营理念导向、消费者观念导向、口语化、修辞手法、品牌故事、创始人初心品牌故事、里程碑事件故事、产品初…

Intellij中使用Spotless 格式化代码

Spotless简介 在一些大型项目或开源项目,由于开发人员太多,导致各个代码格式不统一。会让整体项目的代码可读性变差。统一代码格式使用maven中的Spotless插件就是不错的选择。 Spotless 是一个代码格式化工具,它有以下功能: 支…

第6章 静态代理

第6章 静态代理 把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。 ​ 所以在实际应用中,我们将静态资源比如图片、css、html、js等交…

helm和chart

Helm helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。 he…

keil移植linux(makefile)

文章目录 运行环境:1.1 freeRTOS_LED工程移植1)修改cubeMX配置2)setting设置3)launch设置4)修改makefile5)修改代码6)实验效果 运行环境: ubuntu18.04.melodic 宏基暗影骑士笔记本 stm32f427IIH6 stlink 9-24v可调电源 robomaster A 板 1.1 freeRTOS_L…

第二章——进程与线程(上)

上船不思岸上人,下船不提船上事 文章目录 2.1.1 进程的概念,组成,特征知识总览进程的概念进程的组成——PCB程序是如何运行的进程的组成进程的特征知识回顾 2.1.2 进程的状态与转换,进程的组织知识总览创建态,就绪态运…

yolov5 8系列 labelme数据标注 并生成训练数据集

yolov5 8系列 labelme数据标注 数据集生成终极教程 一.数据集准备二.转换为yolo 数据集 一.数据集准备 创建一个data 文件夹在data文件夹下创建一个images 文件夹将所有图片数据放入images文件夹下 使用labelme标注数据 python环境下使用 pip install labelme 安装labelme在c…

缓存击穿,穿透,雪崩

一、缓存击穿 单个热点key,在不停的扛着大并发,在这个key失效的瞬间,持续的大并发请求就会击破缓存,直接请求到数据库 解决方案 使用互斥锁(Mutex Key),只让一个线程构建缓存,其他…

Golang中的运算符

目录 运算符 算术运算符 代码案例: 关系运算符 代码案例: 逻辑运算符 代码案例: 位运算符 代码案例: 赋值运算符 代码案例: 其他运算符 运算符 算术运算符 Go语言中的算术运算符包括加、减、乘、除和取模…