TCP为什么握手是三次,而挥手是四次
TCP(传输控制协议)使用三次握手(3WHS)来建立一个可靠的连接,并使用四次挥手(4WHS)来终止连接。以下是每个步骤的详细解释:
三次握手(3WHS)建立连接:
-
SYN(同步序列编号):
- 客户端选择一个初始序列号x,并发送一个带有SYN标志的TCP段给服务器,请求建立连接。此时,TCP段的序列号字段设置为x。
-
SYN-ACK(同步-确认):
- 服务器收到客户端的SYN段后,如果同意建立连接,则会发送一个SYN-ACK段作为响应。服务器选择自己的初始序列号y,并在ACK(确认)字段中确认客户端的序列号x+1(期望接收到的第一个字节的序列号)。同时,SYN标志位也被设置。
-
ACK(确认):
- 客户端收到服务器的SYN-ACK段后,发送一个带有ACK标志的TCP段给服务器,确认服务器的初始序列号。客户端在ACK字段中填入y+1。
完成这三个步骤后,TCP连接就成功建立,客户端和服务器可以开始发送数据。
为什么需要三次握手:
- 防止已失效的连接请求报文段突然传到服务器,因而产生错误:如果使用两次握手,服务器端收到一个旧的连接请求并响应,可能会导致服务器错误地建立一个新连接。
例子: - 允许双方确认彼此的初始序列号:三次握手确保了客户端和服务器都能够确认对方的接收能力和发送能力。
四次挥手(4WHS)终止连接:
-
FIN(结束):
- 当一方完成数据传输并希望关闭连接时,它发送一个带有FIN标志的TCP段,表示已经没有数据要发送了。
-
ACK(确认):
- 对方收到FIN段后,发送一个ACK段确认这个FIN。
-
FIN(结束):
- 对方完成数据传输后,也发送一个带有FIN标志的TCP段。
-
ACK(确认):
- 最初发送FIN的一方收到这个FIN段后,发送最后一个ACK段确认。
完成这四个步骤后,TCP连接被关闭。
为什么需要四次挥手:
- TCP连接是全双工的:意味着数据可以在两个方向上独立传输。因此,每个方向上的连接都需要单独关闭。
- 确保数据传输完成:四次挥手允许一方在关闭自己的发送部分后,仍然接收来自对方的剩余数据。
上述为什么要三次握手第一个原因的理解
为什么TCP连接建立需要三次握手,而两次握手可能不足以防止"已失效的连接请求"的问题。
假设场景:
假设客户端A想要与服务器B建立TCP连接,但是客户端A发送的第一个连接请求(SYN)在网络中延迟了,没有立即到达服务器B。
第一次握手(SYN):
- 客户端A发送一个SYN报文(假设序列号为1000)给服务器B,请求建立连接。
网络延迟:
- 这个SYN报文在网络中延迟,没有立即到达服务器B。
第二次握手(SYN+ACK,如果是两次握手):
- 假设我们只使用两次握手,客户端A在发送第一个SYN报文后,由于没有收到响应,会重新发送另一个SYN报文(假设序列号为2000)。
第三次握手(ACK,如果是两次握手):
- 服务器B最终收到了第二个SYN报文(序列号2000),并发送了一个SYN+ACK报文作为响应,同意建立连接。
延迟的报文到达:
- 此时,客户端A收到了服务器B的SYN+ACK报文,并发送了一个ACK报文确认,完成了两次握手过程。但是,之前延迟的第一个SYN报文(序列号1000)现在终于到达了服务器B。
问题出现:
- 如果服务器B在两次握手后没有收到客户端A的最终ACK确认,它可能会认为连接没有成功建立。因此,当服务器B收到延迟的SYN报文(序列号1000)时,它可能会错误地认为客户端A又发送了一个新的连接请求,并尝试重新建立一个新的连接。
三次握手的作用:
- 通过三次握手,即使客户端A的第一个SYN报文(序列号1000)延迟到达,服务器B也不会错误地建立一个新的连接。这是因为:
- 服务器B在收到第一个SYN(1000)后,会发送一个SYN+ACK(期望收到1000+1=1001),等待客户端的确认。
- 客户端A收到这个SYN+ACK后,会发送一个ACK(确认1001),但由于客户端A实际上发送的是序列号2000,所以这个ACK不匹配服务器B的期望。
- 服务器B收到不匹配的ACK后,会知道这不是对它发出的SYN+ACK的响应,因此不会错误地建立一个新的连接。
通过这个例子,你可以看到三次握手如何确保即使在网络延迟或重传的情况下,连接的建立也是可靠和有序的。它防止了因为旧的或延迟的连接请求而导致的不必要的连接建立,确保了服务器不会对已经失效或过时的连接请求做出响应。
相关文章:
TCP为什么握手是三次,而挥手是四次
TCP(传输控制协议)使用三次握手(3WHS)来建立一个可靠的连接,并使用四次挥手(4WHS)来终止连接。以下是每个步骤的详细解释: 三次握手(3WHS)建立连接ÿ…...
前端面试题大合集9----TypeScript
目录 一、TypeScript 中静态类型的概念及其好处 二、如何在 TypeScript 的接口中定义可选属性? 三、解释 TypeScript 中联合类型的概念并提供示例 四、TypeScript 中的类型断言是什么? 五、TS中泛型是什么? 六、解释 TypeScript 中的“…...
Linux:动态库和静态库的编译与使用
目录 1.前言 2.静态链接库 3.静态链接库生成步骤 4.静态链接库的使用 5.动态链接库 6.动态链接库生成步骤 7.动态链接库的使用 8.动态链接库无法加载 9.解决动态链接库无法加载问题 前言 在《MinGW:从入门到链接库》博客中简单介绍了如何编译动态链接库和静态链接库…...
【Pyqt6 学习笔记】DIY一个二维码解析生成小工具
文章目录 Pycharm 配置QtDesignerPyUIC基本模板 代码示例依赖包main.pyscreen_shot_module.pyuntitled.pyuntitled.ui Pycharm 配置 摘自PyQT6的从零开始在Pycharm中配置与使用——蹦跑的蜗牛 pip install PyQt6 PyQt6-toolsQtDesigner File -> Settings -> External …...
关于xilinx srio ip复位问题
关于xilinx srio ip复位问题 语言 :Verilg HDL 、VHDL EDA工具: Vivado 关于xilinx srio ip复位问题一、引言二、FPGA 之间 srio通信复位处理复位时序不同步:SRIO 模块未正确初始化:等待复位完成的时间不足:SRIO 配置…...
04 uboot 编译与调试
新手不需要详细掌握 uboot,只需要知道它是一个什么东西即可,工作中也只是改一些参数而已。 1、uboot 是什么 Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段 bootloader 程序。这段 bootloader 程序会先初始化 DDR 等外设,然后将 Linux 内…...
【机器学习】机器学习与医疗健康在智能诊疗中的融合应用与性能优化新探索
文章目录 引言机器学习与医疗健康的基本概念机器学习概述监督学习无监督学习强化学习 医疗健康概述疾病预测诊断辅助个性化治疗方案制定 机器学习与医疗健康的融合应用实时健康监测数据预处理特征工程 疾病预测与优化模型训练模型评估 诊断辅助与优化深度学习应用 个性化治疗方…...
在线OJ项目测试(selenium+Junit5)
目录 在线OJ项目测试的思维导图 在线OJ的UI自动化测试 测试一:检查未登录时的页面访问以及一些未登录时的非法操作 测试二:测试注册界面 测试三:测试登录界面 测试四:测试题目列表界面 测试五:测试题目详情界面…...
计算机系统基础笔记(12)——控制
前言 在持续输出ing 一、条件码 1.处理器状态(x86-64,部分的) 当前程序的执行信息 ◼ 临时数据 ◼ 运行时栈的位置(栈顶) ◼ 当前代码控制点的位置(即将要执行的指令地址) ◼ 最近一次指令执…...
使用RedissonClient的管道模式批量查询key
1.场景 遇到了一个场景,在客户给我们推送的数据中,咋1分钟左右,会有相同车辆vehicle 和时间 gpstime一样的数据,这类数据呢,我们认为是重复数据,需要过滤的 把相同 vehicle 和 gpstime 作为key存入到redis中…...
UR机器人通信汇总
文章目录 一、概述二、UR机器人通信2.1UR通信协议2.2 UR通信端口 三、UR机器人通信端口类型3.1 Modbus TCP端口(502端口)3.2 Dashboard端口(29999端口)3.3 上位机编程端口(30001/30002/30003端口)3.3.1 URS…...
AI学习指南机器学习篇-使用ID3算法构建决策树
AI学习指南机器学习篇-使用ID3算法构建决策树 介绍ID3算法 ID3(Iterative Dichotomiser 3)是一种用于构建决策树的经典机器学习算法。它是由Ross Quinlan于1986年提出的,是一种基于信息论的算法,用于从一组特征中选择最佳特征来…...
React实战(一)初始化项目、配置router、redux、axios
(一)初始化项目 1.安装项目 npx create-react-app 项目名 编译报错: 解决办法:安装最新的babel-preset-react-app npm install babel-preset-react-applatest 2.配置项目 (1)配置文件目录 (2)使用craco配置webpack.config npm install craco/crac…...
高质量 HarmonyOS 权限管控流程
高质量 HarmonyOS 权限管控流程 在 HarmonyOS 应用开发过程中,往往会涉及到敏感数据和硬件资源的调动和访问,而这部分的调用就会涉及到管控这部分的知识和内容了。我们需要对它有所了解,才可以在应用开发中提高效率和避免踩坑。 权限管控了…...
java里面封装https请求工具类2
其他写法 https://blog.csdn.net/weixin_44372802/article/details/132620809?spm1001.2014.3001.5501 encodeJson 是请求参数的密文格式(大公司都是要对请求参数加密的) ResponseBean 是自己或者对方定义的返回内容参数 public ResponseBean sendByEnc…...
前端面试题日常练-day59 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 1. 在PHP中,以下哪个符号用于比较两个值的相等性? a) b) c) d) ! 2. PHP中的预定义变量$_POST用于获取什么类型的数据? a) 用户的输入数据 b) 浏览器发送的请…...
计算机小问题(4)--关闭联想电脑的小组件
打开联想软件管家,关闭即可 (今天弄了好久才找到,记录一下)...
mac无法读取windows分区怎么办 苹果硬盘怎么读取
对于Mac电脑用户但有Windows系统使用需求的,我们可以通过Boot Camp启动转换助理安装Windows分区这个方案来解决,不过因为两个系统的磁盘格式不同,相应的也会产生一些问题,例如无法正常读取windows分区。下面本文就详细说明mac无法…...
【设计模式】JAVA Design Patterns——State(状态模式)
🔍目的 允许对象在内部状态改变时改变它的行为。对象看起来好像修改了它的类。 🔍解释 真实世界例子 当在长毛象的自然栖息地观察长毛象时,似乎它会根据情况来改变自己的行为。它开始可能很平静但是随着时间推移当它检测到威胁时它会对周围的…...
Docker搭建可道云
Docker搭建可道云(存储) 文章目录 Docker搭建可道云(存储)介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、搭建可道云私有云盘3.1、编写Dockerfile3.2、上传资源到指定目录3.3、查看目录下所有资源 四、构建镜像五、…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
