为何要3次握手?TCP协议的稳定性保障机制

news2025/1/15 7:38:23

🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot
🌺 仓库主页: Gitee 💫 Github 💫 GitCode
💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!

目录

  • 引言
  • 为什么需要3次握手建立TCP连接?
    • 1. 第一次握手:建立连接请求
    • 2. 第二次握手:确认连接请求
    • 3. 第三次握手:确认连接接受
    • 为什么不采用2次握手建立连接?
  • 为什么需要4次挥手断开TCP连接?
    • 1. 第一次挥手:发起关闭连接
    • 2. 第二次挥手:确认关闭请求
    • 3. 第三次挥手:发起关闭确认
    • 4. 第四次挥手:确认关闭确认
    • 为什么不采用3次挥手断开连接?
  • 结语
  • 开源项目

引言

TCP(Transmission Control Protocol)是计算机网络中一种可靠的传输协议,负责确保数据的可靠传输。TCP连接的建立和断开过程分别通过3次握手和4次挥手来完成。本文将深入探讨为什么TCP需要进行3次握手来建立连接,以及为何在断开连接时采用4次挥手而不是2次握手和3次挥手。

为什么需要3次握手建立TCP连接?

在这里插入图片描述

1. 第一次握手:建立连接请求

在进行TCP连接时,客户端首先向服务器发送连接请求,这是第一次握手。这一步的目的是告诉服务器客户端想要建立连接,并初始化一些参数,如序列号等。

2. 第二次握手:确认连接请求

服务器收到客户端的连接请求后,进行确认并发送自己的连接请求给客户端,这是第二次握手。这一步的目的是告诉客户端服务器接受连接请求,并同样初始化一些参数。

3. 第三次握手:确认连接接受

客户端收到服务器的连接请求后,进行确认,这是第三次握手。这一步的目的是确保双方都已准备好建立连接。此时,双方都知道对方已成功接受连接。

为什么不采用2次握手建立连接?

如果只进行2次握手,客户端发送连接请求,服务器确认后即建立连接。但这样存在的问题是,如果确认的消息在网络中滞留,客户端会认为连接已建立,而服务器不清楚,可能导致连接的不确定性和不稳定性。因此,3次握手是为了确保双方都确认了连接的建立,降低了不确定性。

为什么需要4次挥手断开TCP连接?

在这里插入图片描述

1. 第一次挥手:发起关闭连接

在断开连接时,任一一方可以发起关闭连接的请求,这是第一次挥手。发起方发送带有FIN(Finish)标志的报文,表示不再发送数据。

2. 第二次挥手:确认关闭请求

接收到关闭请求的一方发回确认,并可以继续发送数据,这是第二次挥手。此时,接收方通告自己已经准备好关闭连接,但仍可发送剩余的数据。

3. 第三次挥手:发起关闭确认

接收方在完成发送数据后,发起关闭确认请求,这是第三次挥手。该请求包含FIN标志,表示不再发送数据。

4. 第四次挥手:确认关闭确认

发起方接收到关闭确认请求后,发回确认,并等待一段时间以确保对方已经接收到关闭确认,这是第四次挥手。之后,双方的连接才算正式关闭。

为什么不采用3次挥手断开连接?

如果只进行3次挥手,发起方发送关闭请求,接收方发回确认后即关闭连接。但这样可能存在一些未完成的数据传输,因为接收方在发送确认后仍可以继续发送数据。通过引入第四次挥手,确保双方都完成了关闭确认,避免了可能的数据残留和不确定性。

结语

TCP连接的3次握手和4次挥手是为了确保连接的建立和断开的稳定性和可靠性。通过这些握手和挥手步骤,TCP协议能够有效地管理连接,保障数据的可靠传输。虽然增加了握手和挥手的次数,但这是为了防范可能出现的问题,确保网络通信的可靠性和稳定性。在实际应用中,这种权衡是TCP协议成功的关键之一。

开源项目

  • SpringCloud + Vue3 微服务商城
GithubGitee
后端youlai-mall 🍃youlai-mall 🍃
前端mall-admin🌺mall-admin 🌺
移动端mall-app 🍌mall-app 🍌
  • SpringBoot 3+ Vue3 单体权限管理系统
GithubGitee
后端youlai-boot 🍃youlai-boot 🍃
前端vue3-element-admin 🌺vue3-element-admin 🌺

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

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

相关文章

MYSQL练题笔记-聚合函数-每月交易

一、题目相关内容 1)相关的表和题目 2)帮助理解题目的示例,提供返回结果的格式 二、初步的理解 是需要知道每个月和每个国家/地区的事务数及其总金额,每个月和每个国家/地区已批准的事务数及其总金额;以上的理解还是…

RPC和REST对比

RPC和REST对比 参考学习 RPC 和 REST 之间有什么区别? 当我们对比RPC和REST时,其实是在对比RPC风格的API和REST风格的API,后者通常成为RESTful API。 远程过程调用(RPC)和 REST 是 API 设计中的两种架构风格。API …

【计算机组成原理】存储器知识

目录 1、存储器分类 1.1、按存储介质分类 1.2、按存取方式分类 1.3、按信息的可改写性分类 1.4、按信息的可保存性分类 1.5、按功能和存取速度分类 2、存储器技术指标 2.1、存储容量 2.2、存取速度 3、存储系统层次结构 4、主存的基本结构 5、主存中数据的存放 5.…

分类预测 | Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量输入数据分类预测

分类预测 | Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量输入数据分类预测 目录 分类预测 | Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量输入数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现FA-SVM萤火虫算法优化支持向量机的多变量…

网络安全现状

威胁不断演变: 攻击者不断变化和改进攻击方法,采用更复杂、更隐秘的技术,以逃避检测和追踪。这包括新型的勒索软件、零日漏洞利用和社交工程攻击等。 供应链攻击: 攻击者越来越关注供应链的弱点,通过在供应链中植入恶…

Gitee拉取代码报错You hasn‘t joined this enterprise! fatal unable to access

文章目录 一、问题二、解决2.1、进入**控制面板**2.2、进入**用户账户**2.3、进入**管理Windows凭据**2.4、**普通凭据**2.4.1、添加2.4.2、编辑 2.5、重新拉取|推送代码 三、最后 一、问题 Gitee拉取仓库代码的时候报错You hasnt joined this enterprise! fatal unable to ac…

小米秒享3--非小米电脑

小米妙享中心是小米最新推出的一款功能,能够为用户们提供更加舒适便利的操作体验。简单的说可以让你的笔记本和你的小米手机联动,比如你在手机的文档,连接小米共享后,可以通过电脑进行操作。 对于非小米电脑想要体验终版秒享AIOT…

Spring Task 定时任务框架

Spring Task Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位:定时任务框架 作用:定时自动执行某段Java代码 Spring Task使用步骤 1). 导入maven坐标 spring-context(已存在&#xff…

如何在忘记密码的情况下恢复解锁 iPhone

您忘记了 iPhone 密码吗?Apple 官方通常建议将 iPhone 恢复至出厂设置以将其删除。这种修复很不方便,甚至可能比问题本身更麻烦。 如果您也经历过同样的情况,并且想知道忘记了 iPhone 密码并且不想恢复它该怎么办,我们的终极指南…

本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ

在业务逻辑的异步处理,系统解耦,分布式通信以及控制高并发的场景下,消息队列有着广泛的应用。本项目基于Spring的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ添加和读取消息的功能。并比较了两种模式&…

Flutter PK jetpack compose区别和选择

Flutter诞生于Chrome团队,是一帮做Web的开发做的跨平台框架,从最开始的设计初衷,就是指向了跨平台这条路,而Compose,则是诞生于Android团队,是为了解决当前View的架构体系不能再继续适应申明式编程的范式而…

Nginx的反向代理与负载均衡

概念介绍 1). 正向代理 正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 …

如何购买阿里云服务器

作为一家全球领先的云计算服务提供商,阿里云提供了多种云产品和解决方案,包括云服务器、对象服务OSS、数据库、存储、SSL、域名和CDN等。阿里云服务器是一种灵活可扩展的云计算服务,适用于各种规模和类型的企业和个人用户。阿里云以其出色的性…

专业课:递归非递归中序遍历

非递归中序遍历二叉树通常使用栈来辅助实现。 树结构: struct TreeNode {int data;TreeNode* left;TreeNode* right; };递归 void inorderTraversal(TreeNode *root){if(root ! nullptr){//中序遍历 “左孩子--根节点--右孩子”inOrder(root->lchild);printf(…

「Swift」类淘宝商品瀑布流展示

前言:需要做一个类似于淘宝商品页面的瀑布流展示 结构分析: ps:图片来源 思路分析: 该瀑布流主要还是基于UICollectionView进行展示,只是在cell展示的UICollectionViewFlowLayout需要进行相应调整和自定义&#xff…

[ 云计算 | AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3 存储桶中

本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【云计算洞察】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | …

Linux——基本指令(一)

写在前面: 我们云服务器搭建的Linux系统,使用的镜像版本CentOS 7.6,使用的Xshell远程连接云服务器 前面我们使用超级管理员root账号登录,一般我们使用普通用户登录,那么如何创建新用户呢? 1.创建新用户 &#xff08…

【Java 基础】17 集合

文章目录 1.基本概念2.核心接口3.常见实现1)List 接口的实现类ArrayListLinkedListVector 2)Set 接口的实现类HashSetLinkedHashSetTreeSet 3)Queue 接口的实现**类**ArrayQueue 4)Map 接口的实现类HashMapLinkedHashMapTreeMap 4…

跟着Nature Communications学习Hisat-Trinity-PASA等分析流程

一边学习,一边总结,一边分享! 详细教程请访问: 组学分析流程 本期分析流程 Hisat2-SamtoolsTrinity_GG_denovoPASA … 本期教程文章 题目:Genomic insights into local adaptation and future climate-induced vu…

C++-内存管理

目录 一.C/C内存分布 二. C语言中动态内存管理方式:malloc/calloc/realloc/free 三. C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 四.C语言中的动态开辟内存空间和C中的区别 1.对于开辟内置类型 2.…