TCP和UDP相关问题(重点)(5)——5.TCP三次握手和四次挥手(非常重要)

5.1三次握手的过程

  • 一次握手:客户端发送带有SYN(x)标志的数据包到服务端,然后客户端进入SYN_SEND状态,等待服务器端的确认。

  • 二次握手:服务端发送带有SYN(y)+ACK(x+1)标志的数据包到客户端,然后服务端进入SYN_RECV状态。

  • 三次握手:客户端发送带有ACK(y+1)标志的数据包到服务端,然后服务端和客户端都进入已建立状态,完成TCP三次握手。

 

5.2为什么要三次握手?

因为要确保可靠的连接,三次握手的目的就是保证双方都互相知道对方的发送和接收是正常的。四次没必要,多余了,而两次不够,因为两次无法让服务器知道自己的发送和对方的接收是否正常。

第一次握手后,服务端能知道客户端的发送和自己的接收是正常的,第二次握手后,客户端能知道自己的发送和接收是正常的,服务端的发送和接收是正常的,而经过第三次握手后,服务器才会知道自己的发送和客户端的接收是正常的。所以三次握手就能保证双方都知道对方的发送和接收功能都正常。

5.3第二次握手服务端传回了ACK,为什么还要传回SYN?

是为了客户端发出的第三次握手做准备,服务端在第二次握手中传回了ACK(x+1),服务端就表明了我收到你客户端的第一次握手的信息了。而传回的SYN,为的就是让客户端在第三次握手时发出ACK确认报文,表明我客户端也收到你服务端发送的第二次握手的信息了,总的来说就是为了确保双方的可靠连接。

5.4四次挥手的过程

  • 第一次挥手:客户端发送一个FIN(x)标志的数据包到服务端,请求关闭客户端到服务端的数据传送。然后客户端进入FIN-WAIT-1状态。

  • 第二次挥手:服务端发送一个ACK(x+1)标志的数据包到客户端,然后服务端进入到CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。

  • 第三次挥手:服务端发送一个FIN(y)标志的数据包到客户端,请求关闭服务端到客户端的连接,然后服务端进入LAST-ACK状态。

  • 第四次挥手:客户端发送一个ACK(y+1)标志的数据包到服务端,然后客户端进入到TIME-WAIT状态,服务端在收到客户端ACK确认数据包后进入CLOSE状态。此时如果客户端等待了2MSL(是报文段的最长寿命,MSL时间是不确定的,取决于操作系统)后没有收到服务器端的任何回复,那就说明服务端已正常关闭,随后客户端就可以关闭连接了,客户端进入CLOSED状态。

注意:只要四次挥手没有结束,客户端和服务端就可以继续传输数据!

5.5为什么要四次挥手?

同一问题:为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?

因为服务器收到客户端要断开连接的第一次挥手请求时,可能还有一些数据没有发完,这时服务端先回复ACK报文,表明我服务端接收到了你断开连接的请求,等到服务端的数据发送完后再发送一个FIN报文段,表示请求断开服务端到客户端的数据传送。

5.6如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?

客户端如果没有收到ACK确认,客户端会重新发送FIN请求。

5.7为什么第四次挥手后客户端需要等待 2MSL时间后才进入 CLOSED 状态?

因为客户端也要确保服务端成功接收到了自己发送的第四次挥手的ACK确认报文,如果服务端没有接收到的话,那么服务端就要重新发送FIN报文,这时客户端就要时刻准备着重发ACK,不然服务端会一直重发FIN报文。如果从开始就一切顺利的话,客户端到最后等了2MSL,都没有再次收到服务端发送的FIN,那么客户端就会推断ACK已经被服务端成功接收了,才会进入CLOSED状态,关闭TCP连接。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年假作业6

一、填空 1、0,2,10 二、编程 1、 #include <iostream> using namespace std; class Complex { private:double real;//实部double imag;//虚部 public://有参构造函数Complex(double r, double i):real(r), imag(i){}//复数加法运算符重载Complex operator(const Co…

进程状态 | 僵尸进程 | 孤儿进程 | 前台后台进程 | 守护进程

文章目录 1.进程的三种基本状态2.Linux中进程状态查看2.1.进程检测脚本2.2.各种状态查看 3.孤儿进程4.前台、后台、守护进程 1.进程的三种基本状态 进程的在系统当中是走走停停的&#xff0c;「运行 - 暂停 - 运行」的活动规律&#xff1b;进程在活动期间的三种状态&#xff1…

STL常用容器—set容器

STL常用容器—set容器 1. set容器相关概念2. 初始化容器3. set容器插入和删除4. set容器大小和交换5. set容器的查找和统计6. set、multiset、unordered_set三者的区别7. pair对组的创建8. set容器的排序 参考博文&#xff1a;STL常用容器——set容器的使用 1. set容器相关概念…

力扣热门100题 - 4.寻找两个正序数组的中位数

力扣热门100题 - 4.寻找两个正序数组的中位数 题目描述&#xff1a;示例&#xff1a;提示&#xff1a;解题思路&#xff1a;代码&#xff1a; 题目链接&#xff1a;4.寻找两个正序数组的中位数 题目描述&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&a…

yolov8使用旋转框自己做数据集检测

主要在数据集制作&#xff0c;训练的步骤和目标检测是一样的 1.数据集标注主要使用rolabelimg工具&#xff0c;这个工具不能在线安装 得下载源代码 然后运行 标注好数据保存会是一个xml文件 2.把xml文件转换成dota的xml文件&#xff0c;然后把dota的xml文件转换成dota的txt文件…

Select 选择器 el-option 回显错误 value

离谱 回显的内容不是 label 而是 value 的值 返回官方看说明&#xff1a; v-model的值为当前被选中的el-option的 value 属性值 value / v-model 绑定值有3种类型 boolean / string / number 根据自身代码猜测是&#xff1a;tableData.bookId 与 item.id 类型不一致导致 &…

Vue源码系列讲解——变化侦测篇【下】(Array的变化侦测)

目录 1. 前言 2. 在哪里收集依赖 3. 使Array型数据可观测 3.1 思路分析 3.2 数组方法拦截器 3.3 使用拦截器 4. 再谈依赖收集 4.1 把依赖收集到哪里 4.2 如何收集依赖 4.3 如何通知依赖 5. 深度侦测 6. 数组新增元素的侦测 7. 不足之处 8. 总结 1. 前言 上一篇文…

mysql入门到精通005-基础篇-约束

1、概述 1.1 概念 约束是作用于表中字段上的规则&#xff0c;用于限制储存在表中的数据。 1.2 目的 保证数据库中数据的正确性、有效性和完整性。 1.3 常见的约束分类 一旦谈到外键&#xff0c;则至少涉及2张表约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的…

c++设计模式之代理模式

作用 代理模式主要用于&#xff0c;通过代理类&#xff0c;来控制实际对象的访问权限 案例 class VideoSite { public:virtual void freeVideo()0;virtual void vipVideo()0;virtual void trickVideo()0; };class FixBugVideoSite:public VideoSite { public:void freeVideo()…

双非本科准备秋招(19.2)—— 设计模式之保护式暂停

一、wait & notify wait能让线程进入waiting状态&#xff0c;这时候就需要比较一下和sleep的区别了。 sleep vs wait 1) sleep 是 Thread 方法&#xff0c;而 wait 是 Object 的方法 2) sleep 不需要强制和 synchronized 配合使用&#xff0c;但 wait 强制和 s…

《Git 简易速速上手小册》第10章:未来趋势与扩展阅读(2024 最新版)

文章目录 10.1 Git 与开源社区10.1.1 基础知识讲解10.1.2 重点案例&#xff1a;Python 社区使用 Git10.1.3 拓展案例 1&#xff1a;Git 在大型开源项目中的角色10.1.4 拓展案例 2&#xff1a;支持开源项目的 Git 托管平台 10.2 新兴技术与 Git 的整合10.2.1 基础知识讲解10.2.2…

高并发对于服务器性能有什么要求?

随着互联网的普及和应用程序的复杂度增加&#xff0c;高并发已经成为许多应用程序必须面对的问题。高并发是指在短时间内有大量用户同时访问应用程序或数据库&#xff0c;对服务器性能提出了更高的要求。本文将探讨高并发对于服务器性能的要求。 一、高并发对服务器硬件的要求…