TCP—三次握手和四次挥手

news2024/12/26 10:45:36

 

目录

一、三次握手和四次挥手的目的

二、TCP可靠的方面

三、什么是三次握手

四、第三次握手的目的

五、什么是四次挥手

六、超时时间的目的

七、SYN包、ACK包、FIN包

八、解决丢包和乱序

九、参考资料


一、三次握手和四次挥手的目的

    TCP三次握手的目的主要是为了确保两个网络端点(即客户端和服务器)在数据传输开始前能够建立一个可靠的连接
    TCP四次挥手的目的是为了正确、可靠地终止两个网络端点(客户端和服务器)之间的已建立连接。这个过程确保了双方都有机会完成数据的发送和接收,同时正确地关闭连接
    这两个目的也就造就了TCP连接、可靠的特点。

二、TCP可靠的方面

    1.序列号和确认应答:
       TCP为每个发送的数据包分配一个序列号,并要求接收端对收到的数据包发送确认应答(ACK)。如果发送端在合理的超时时间内没有收到确认应答,它会重新发送该数据包。这确保了数据的有序传输和不丢失。

    2.数据重传:
       如果因为网络拥堵、路径变化或其他原因导致数据包丢失或错误,TCP会自动重传这些数据包,直到收到确认应答为止。这保证了数据的可靠传输。

    3.流量控制:
       TCP使用窗口大小控制机制来防止发送方过快发送数据,使得接收方来不及处理。窗口大小可以动态调整,以适应接收方的处理能力,避免数据溢出。

    4.拥塞控制:
       TCP实现了拥塞控制算法(如慢启动、拥塞避免、快速重传和快速恢复),以减少网络拥堵情况下的数据包丢失。这些算法通过动态调整数据的发送速率来适应网络状况。

    5.有序数据传输:
       即使数据包在网络中的传输过程中到达顺序发生了变化,TCP也能确保数据以正确的顺序交付给应用程序。

    6.错误检测:
       TCP头包含了校验和字段,用于检测数据在传输过程中是否出现错误。如果检测到错误,受影响的数据包将会被丢弃并重新请求传输。

三、什么是三次握手

    客户端先向服务端发送 SYN 包请求建立连接,然后服务端向客户端发送 SYN+ACK 包同意连接,客户端收到 SYN+ACK 包后发送 ACK 包,服务端收到这个 ACK包 后,连接建立。因为这个过程中互相发送了三包数据,所以称之为三次握手。

四、第三次握手的目的

    客户端先向服务端发送 SYN 包请求建立连接,然后服务端向客户端发送 SYN+ACK 包同意连接后大可以直接连接,为什么客户端要再发送一个 ACK 包,服务端接收到这个 ACK 包后再进行连接?

    这是为了防止失效的连接请求突然被接受,如果一个旧的连接请求在网络中延迟,并在连接已经建立后到达,三次握手可以帮助识别和拒绝这些失效的请求,避免可能的连接混乱。
    例如:client端先向server端发送一个 SYN1 包请求建立连接,但是这个 SYN1 包在网络中延迟没有到达server端,client端又向server端发送一个 SYN2 包请求建立连接,SYN2 包到达了server端,如果紧接着 SYN1 包也到达了server端,那么对于server端来说认为client端建立了两次连接,而client端任务连接了一次连接。 

五、什么是四次挥手

    下面假设主动关闭方为客户端,被动关闭方为服务端。
       客户端发起连接终止请求:发送一个 FIN 包,表示它已经完成了数据发送,并希望关闭连接。
       服务端关闭确认收到 FIN 包:发送一个 ACK 包来确认收到的 FIN 包。
       服务端关闭发送自己的 FIN 包:发送一个 FIN 包,表示它也准备好关闭连接。
       客户端确认收到对方的 FIN 包:发送一个 ACK 包来确认收到的 FIN 包。
       服务端收到 ACK 包 后立即关闭连接,客户端必须要经过超时时间(Timeout)后关闭连接。

六、超时时间的目的

    超时时间(Timeout)主要用于确保连接能够在特定时间内正确地终止,即使在面对网络延迟、数据包丢失或对方无响应等不稳定因素时也能保证连接的可靠关闭。

   例如:FIN-WAIT-2 发送的 ACK 包在网络中丢失了或者因为延迟被关闭方迟迟没有收到 ACK 包,此时如果关闭方关闭连接,被关闭方收不到 ACK 包就会一直处于等待关闭的状态,为了避免这种情况,关闭方必须进行一段超时时间等待,以便被关闭方重新发送一个 FIN 包,关闭方则会重发一个 ACK 包。

七、SYN包、ACK包、FIN包

    TCP协议中,SYN包和ACK包是用于建立、确认和管理连接的重要控制包。它们在三次握手和四次挥手过程中起着关键作用:

    (一)、SYN包(同步包)

    全称:Synchronize packet
    作用:用于发起和建立一个新的TCP连接。SYN包是TCP连接建立过程中发送的第一个包。
    特性:SYN包包含一个同步标志位(SYN=1)和初始序列号。它不包含实际的数据,只是用于连接初始化。
    使用场景:在三次握手的第一步和第二步中使用。
    第一步:客户端向服务器发送一个SYN包,以请求建立连接。
    第二步:服务器收到SYN包后,回送一个包含SYN和ACK标志的包(SYN=1, ACK=1),以确认收到客户端的请求。

    (二)、ACK包(确认包)

    全称:Acknowledgment packet
    作用:用于确认已经接收到的数据包。ACK包是TCP协议中几乎每个数据包都会带有的一个标志,用于确保数据的可靠传输。
    特性:ACK包包含一个确认标志位(ACK=1)和确认号。确认号是对已成功接收到的数据包的下一序列号。
    使用场景:三次握手:第二步:服务器向客户端发送SYN+ACK包,确认收到客户端的SYN请求,同时向客户端发送自己的SYN请求。
    第三步:客户端收到服务器的SYN+ACK包后,回送一个ACK包(ACK=1),确认收到服务器的SYN请求。
    四次挥手:每一步:在连接的终止过程中,双方发送FIN包(结束标志),并对收到的FIN包发送ACK包以确认。
    数据传输:在数据传输过程中,每发送一个数据包后,接收方都会发送一个ACK包来确认接收到的数据,确保数据的可靠传输。

    三次握手过程中的SYN和ACK包示意图

    ①客户端 -> 服务器:

SYN=1, Seq=x

    ②服务器 -> 客户端:

SYN=1, ACK=1, Seq=y, Ack=x+1

    ③客户端 -> 服务器:

ACK=1, Seq=x+1, Ack=y+1

    通过这些控制包,TCP能够建立可靠的连接,确保数据的有序和完整传输。

    (三)、FIN包(结束包)

    全称:Finish packet
    作用:用于终止一个TCP连接。FIN包表示发送方已经完成数据发送,并希望关闭连接。
    特性:FIN包包含一个结束标志位(FIN=1),通常还包括一个序列号。它不包含实际的数据。
    使用场景:在四次挥手过程中使用。

    四次挥手过程的详细示意图

    客户端 -> 服务器:

FIN=1, Seq=u

    服务器 -> 客户端:

ACK=1, Seq=v, Ack=u+1

    服务器 -> 客户端:

FIN=1, Seq=w

    客户端 -> 服务器:

ACK=1, Seq=u+1, Ack=w+1

    通过这种方式,TCP确保在关闭连接时,双方都能完成数据发送和接收,并且资源能够被正确释放,避免了潜在的资源泄露和连接混乱问题。这种优雅的关闭过程确保了网络通信的可靠性和稳定性。

八、解决丢包和乱序

 推荐大家观看视频一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手_哔哩哔哩_bilibili 
    一包数据有可能会被拆成多包发送,如何处理丢包问题;这些数据包到达的先后顺序不同,如何处理乱序问题。

    针对这些要求,TCP协议为每一个连接建立了一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。

    发送数据时从发送缓冲区取一部分数据组成发送报文,在发送报文 tcp 协议头中会附带序列号和长度,接受端在收到数据后需要回复确认报文,确认报文中的 ACK等于接收序列号加长度,也就是下一包数据需要发送的起始序列号,这样一问一答的发送方式能够使发送端确认发送的数据已经被对方收到,发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以了。

    这样发送端可以把待发送的数据分割成一系列的碎片发送到对端,对端根据序列号的长度在接收后重构出完整的数据,假设其中丢失了某些数据包,则接收端可以要求发送端重传。
    比如丢失了100-199这100个字节,接收端向发送端发送ACK=100的报文,发送端收到后重传这一包数据,接收端进行补齐。以上过程不区分客户端和服务端,tcp 连接是全双工的,对于两端来说均采用上述机制。

九、参考资料

谢希仁. 计算机网络(第8版). 电子工业出版社. 2021
https://www.youtube.com/watch?v=Iuvjwrm_O5g
TCP三次握手和四次挥手_哔哩哔哩_bilibili
一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手_哔哩哔哩_bilibili

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

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

相关文章

国产AI服务器Tr i - M o d e R A I D 卡,Tri-Mode HBA卡,SAS RAID卡

技术规格 • 主机接口:PCIe 4.0 x8 • 数据接口:SATA/SAS/PCIe三模 • 连接器:2x8 SFF-8654,2x M-Key M.2(2280) • 控制器:IOC 2250 • 硬盘数量:16 2 块SATA/SAS/PCIe • RAID模式:RAID…

蓝牙模块在无人机 ID识别、标准制定发挥的作用及其应用优势和面临的挑战

随着科技的飞速发展,无人机已经广泛应用于航拍、农业、救援、物流等多个领域。而在无人机的通信与控制系统中,蓝牙模块扮演着重要的角色。本文将探讨蓝牙模块在无人机Remote ID识别和标准制定执行中发挥的作用,并分析其应用优势和面临的挑战。…

mysql-索引、存储引擎、事务、锁机制和优化

1. MySQL的索引 1.1 概述 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有以特定值的行,不使用索引,MySQL必须从一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花的时间越多…

【全部更新完毕】2024长三角数学建模A题思路代码文章教学-“抢救”落水手机

文章摘要部分: “抢救”落水手机 摘要 文章主要探讨了如何科学地处理和搜索在水体中意外掉落的物品:华为 Mate 60 Pro手机和居民身份证。本文基于物理模型和动力学分析,为不同水体环境中的掉落物品提供了详尽的搜索策略和打捞建议。 本文…

C++ | Leetcode C++题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; class Solution { public:bool check(TreeNode *u, TreeNode *v) {queue <TreeNode*> q;q.push(u); q.push(v);while (!q.empty()) {u q.front(); q.pop();v q.front(); q.pop();if (!u && !v) continue;if ((!u || !v) ||…

碳课堂|ISO 14067 产品碳足迹国际标准

为规范评估产品碳排放&#xff0c;国际标准化组织发布了《ISO14067&#xff1a;2018温室气体-产品碳足迹-量化要求及指南》&#xff0c;标准量化产品生命周期阶段&#xff08;包括从资源开采、原材料采购到产品的生产、使用和报废阶段&#xff09;的温室气体排放的通用标准。该…

java项目之桂林旅游景点导游平台源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的桂林旅游景点导游平台。 项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 桂林旅游景点导游…

腾讯TDSQL-C灰度发布列存索引; Azure Copilot集成支持Azure上各种托管数据库;

重要更新 1. Copilot for Azure新增了对Azure SQL、 Azure Database for MySQL的支持([8] [14])。Copilot for Azure是微软云提供的基于大模型技术的助手工具&#xff0c;主要能力包括了&#xff1a;该大模型可以获得最新的文档&#xff0c;以及客户的Azure资源情况&#xff0c…

如何排查hpet导致的CPU高负载——《OceanBase诊断系列》之十

1. 前言 我在OceanBase问答社区协助用户排查了一个CPU占用率过高的问题&#xff0c;帖子原文是&#xff1a; 《刚刚新安装的OceanBase集群&#xff0c;没有任何数据&#xff0c;CPU占用非常高&#xff0c;这正常吗&#xff1f;》。从这个场景出发&#xff0c;来分享相关的诊断…

毫米波雷达的自我学习——TI毫米波雷达数据的BIN存储

这里写目录标题 TI毫米波数据以16位二进制补码的形式存储数据存储具有DCA1000数据格式的xWR12xx和xWR14xx&#xff08;交错模式&#xff09;具有DCA1000数据格式的xWR16xx和**IWR6843**&#xff08;只能非交错模式&#xff09;其他 TI毫米波数据以16位二进制补码的形式存储 按…

VUE3好看的酒网站模板源码

文章目录 1.设计来源1.1 首页界面1.2 十大名酒界面1.3 名酒新闻界面1.4 联系我们界面1.5 在线留言界面 2.效果和结构2.1 动态效果2.2 代码结构 3.VUE框架系列源码4.源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/detai…

可视化大屏:蓝色当道,倘若用金色呢?

在可视化大屏中添加金色元素可以带来以下效果&#xff1a; 强调和吸引注意力&#xff1a;金色通常被视为高贵、豪华和引人注目的颜色。通过在可视化大屏中添加金色元素&#xff0c;可以吸引用户的注意力&#xff0c;使其更容易注意到这些元素。提升视觉层次和对比度&#xff1…

MiniMax Golang2轮面试,期望薪资25K

一面 1、自我介绍 2、简单介绍一下你们成立了这个finance的财务中台之后&#xff0c;整体的服务架构是怎么样的吗&#xff1f; 3、就你提到的预算池项目&#xff0c;展开说说背景&#xff0c;以及解决了怎么样的问题&#xff1f; 4、为什么采用针对T-1订单的异步计算方案&a…

数据结构【单链表】

文章目录 前言单链表的概念单链表接口的实现头文件(SLinkList.h)单链表的创建创建链表节点 关于传参单链表的顺序插入关于assert对象尾插正常情况(链表不为空)特殊情况(链表为NULL)代码 头插 单链表的顺序删除assert对象尾删正常情况特殊情况(链表只有一个节点) 头删 单链表的打…

多联机分户计费控制系统

中央空调多联机分户计费控制系统&#xff0c;针对国内常见几种品牌的多联机空调系统实行&#xff0c;远程控制与计费管理。系统采用MQTT网络协议&#xff0c;以订阅/发布模式实行设备感知&#xff0c;实现对室外机、室内机的状态监测、实时故障报警、累计分摊费用的实时数据传导…

基于JAVA的Dubbo 实现的各种限流算法

在基于 Java 的 Dubbo 实现中&#xff0c;限流&#xff08;Rate Limiting&#xff09;同样是一个关键的需求。Dubbo 是阿里巴巴开源的一款高性能 Java RPC 框架&#xff0c;广泛应用于分布式服务架构中。实现限流可以帮助服务在高并发场景下保持稳定性和可靠性。以下是几种常见…

【el-table 实现自定义单选】

el-table 实现自定义单选 示例图片代码 示例图片 代码 row-click"singleElection"<el-table-columnalign"center"label"选择"><template slot-scope"scope"><el-radio:key"scope.row.id"v-model"templa…

在ARM开发板上,栈大小设置为2MB(常用设置)里面存放的数据

系列文章目录 在ARM开发板上&#xff0c;栈大小设置为2MB&#xff08;常用设置&#xff09;里面存放的数据 在ARM开发板上&#xff0c;栈大小设置为2MB&#xff08;常用设置&#xff09;里面存放的数据 系列文章目录 在ARM开发板上&#xff0c;栈&#xff08;Stack&#xff09;…

thingML的学习——什么是thingML

今天开始建模的学习&#xff0c;thingML是建模的一种工具 &#xff0c;也可以理解为一种建模语言&#xff0c;有自己的语法和语义。 ThingML 支持的多种平台和通信协议&#xff0c;如UART、I2C、MQTT、WebSocket、REST、ROS、Bluetooth、BLE和Zwave&#xff0c;通过插件机制&a…