三次握手和四次握手到底有啥区别?

1. 三次握手

TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保 证连接的可靠。

  1. • 第一次握手,客户端向服务器端发起 TCP 连接的请求
  2. • 第二次握手,服务器端发送针对客户端 TCP 连接请求的确认
  3. • 第三次握手,客户端发送确认的确认

三次握手和四次握手描述(来自尚硅谷) 

1、客户端会随机一个初始序列号 seq=x,设置 SYN=1 ,表示这是 SYN 握手报文。然后就可以把这个 SYN 报文发送给服务端了,表示 向服务端发起连接,之后客户端处于同步已发送状态。 2、服务端收到客户端的 SYN 报文后,也随机一个初始序列号 (seq=y),设置 ack=x+1,表示收到了客户端的 x 之前的数据,希望客 户端下次发送的数据从 x+1 开始。 设置 SYN=1 和 ACK=1。表示这 是一个 SYN 握手和 ACK 确认应答报文。最后把该报文发给客户端,该 报文也不包含应用层数据,之后服务端处于同步已接收状态。

3、客户端收到服务端报文后,还要向服务端回应最后一个应答报文, 将 ACK 置为 1 ,表示这是一个应答报文 ack=y+1 ,表示收到了服务 器的 y 之前的数据,希望服务器下次发送的数据从 y+1 开始。 最后 把报文发送给服务端,这次报文可以携带数据,之后客户端处于 连接 已建立 状态。服务器收到客户端的应答报文后,也进入连接已建立状 态。

        完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由 于这种面向连接的特性,TCP 协议可以保证传输数据的安全,所以应用十分广 泛,例如下载文件、浏览网页等。

2 四次挥手

TCP 协议中,在发送数据结束后,释放连接时需要经过四次挥手。

  1. • 第一次挥手:客户端向服务器端提出结束连接,让服务器做最后的准备工作。此 时,客户端处于半关闭状态,即表示不再向服务器发送数据了,但是还可以接受数 据。
  2. • 第二次挥手:服务器接收到客户端释放连接的请求后,会将最后的数据发给客户 端。并告知上层的应用进程不再接收数据。
  3. • 第三次挥手:服务器发送完数据后,会给客户端发送一个释放连接的报文。那么客 户端接收后就知道可以正式释放连接了。
  4. • 第四次挥手:客户端接收到服务器最后的释放连接报文后,要回复一个彻底断开的 报文。这样服务器收到后才会彻底释放连接。这里客户端,发送完最后的报文后,会 等待 2MSL,因为有可能服务器没有收到最后的报文,那么服务器迟迟没收到,就会 再次给客户端发送释放连接的报文,此时客户端在等待时间范围内接收到,会重新发 送最后的报文,并重新计时。如果等待 2MSL 后,没有收到,那么彻底断开。

1、客户端打算断开连接,向服务器发送 FIN 报文(FIN 标记位被设置为 1,1 表示为 FIN,0 表示不是),FIN 报文中会指定一个序列号,之后 客户端进入 FINWAIT1 状态。也就是客户端发出连接释放报文段(FIN 报文),指定序列号 seq = u,主动关闭 TCP 连接,等待服务器的确 认。

2、服务器收到连接释放报文段(FIN 报文)后,就向客户端发送 ACK 应 答报文,以客户端的 FIN 报文的序列号 seq+1 作为 ACK 应答报文段 的确认序列号 ack = seq+1 = u + 1。接着服务器进入 CLOSEWAIT(等 待关闭)状态,此时的 TCP 处于半关闭状态(下面会说什么是半关闭状 态),客户端到服务器的连接释放。客户端收到来自服务器的 ACK 应答 报文段后,进入 FINWAIT_2 状态。

3、服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后 服务器进入 LASK_ACK(最后确认)状态,等待客户端的确认。服务器的 连接释放(FIN)报文段的 FIN=1,ACK=1,序列号 seq=m,确认序列号 ack=u+1。

4、客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送 一个 ACK 应答报文段,以连接释放(FIN)报文段的确认序号 ack 作为 ACK 应答报文段的序列号 seq,以连接释放(FIN)报文段的序列号 seq+1 作为确认序号 ack。

之后客户端进入 TIMEWAIT(时间等待)状态,服务器收到 ACK 应答报文 段后,服务器就进入 CLOSE(关闭)状态,到此服务器的连接已经完成 关闭。客户端处于 TIMEWAIT 状态时,此时的 TCP 还未释放掉,需要 等待 2MSL 后,客户端才进入 CLOSE 状态。

3.二者区别

  • 三次握手是建立连接的过程,四次握手是关闭连接的过程。
  • 建立连接时,客户端和服务器需要交换三个数据包;关闭连接时,需要交换四个数据包。
  • 四次握手中,最后一个ACK是为了确认服务器已经接收到了客户端的关闭请求,防止出现丢失的情况。在三次握手中,最后一个ACK是用来确认客户端已经接收到服务器的同意连接请求。

总体来说,三次握手和四次握手是TCP连接的建立和关闭的标准过程,确保通信双方的状态同步和数据的可靠传输。

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

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

相关文章

【mysql】1153 - Got a packet bigger than ‘max_allowed_packet‘ bytes

执行mysql 语句出现:1153 - Got a packet bigger than max_allowed_packet bytes; 1153-得到一个大于“max_allowed_packet”字节的数据包。 数据包太大了怎么办。该配置吧。 查看max_allowed_packet show global variables like max_allowed_packet;…

初学编程学习,计算机编程怎么自学,中文编程工具下载

初学编程学习,计算机编程怎么自学,中文编程工具下载 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,象如…

CentOS7 安装mysql8(离线安装)postgresql14(在线安装)

注:linux系统为vmware虚拟机,和真实工作环境可能有出入 引言 postgresql与mysql目前都是非常受人欢迎的两大数据库,其各有各的优势,初学者先使用简单一张图来说明两者区别 以上内容引用自https://zhuanlan.zhihu.com/p/64326848…

Devart dotConnect ADO.NET Data Providers Crack

开发数据相关 .NET 应用程序的终极解决方案:快速、灵活、全面、功能丰富、支持 ORM 的 ADO.NET 提供程序 概述 实体框架 连接字符串 博客 高性能 ADO.NET 数据提供程序 dotConnect 是基于 ADO.NET 架构和采用多项创新技术的开发框架构建的增强型数据连接解决方​​…

Linux服务器安装Dotnet8

1. 下载dotnet8 sdk 下载 .NET 8.0 SDK (v8.0.100) - Linux x64 Binaries 拿到 dotnet-sdk-8.0.100-linux-x64.tar.gz 文件 2. 把文件上传到 /usr/local/software 目录 mkdir -p /usr/local/software/dotnet8 把文件拷贝过去 mv dotnet-sdk-8.0.100-linux-x64.tar.gz /usr/loc…

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux)A-2&#…

hahahaha发到这里吧

一大早上笑死我 恭喜在座的各位,一直以为这次比赛public和private排名会相差不大,结果前6有4个人都是从银牌歘一下上来的,想象地到他们看到结果时的喜悦

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中,通过使用预览器,可以查看应用的UI效果,方便开发者实时查看应用的运行效果,随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…

QMenuBar和QToolBar使用同一个QAction

文章目录 前言一、编辑QMenuBar二、将QMenuBar中的Action添加到toolbar总结 前言 qmenubar中的action添加到toolbar,不是在toolbar中再添加action,效果图如下 一、编辑QMenuBar 正常编辑QMenuBar,以下图为例 二、将QMenuBar中的Action添…

重磅消息:ChatGPT创始人Sam Altman被开除!

OpenAI CEO Sam Altman 将离开公司,GregBrockman 将辞去董事会主席一职。首席技术官 Mira Murati将担任临时CEO。 至于 Altman 先生的离职,这是董事会经过深思熟虑的宙查后做出的决定。董事会发现 Altman 在与董事会的沟通中并非始终保持坦率&#xff0c…

STM32踩坑:LAN8720未接网线,上电后再接网线,网络模块无法正常使用

LAN8720未接网线,上电后再接网线,网络模块无法正常使用 一、问题描述 最近因为做的项目出了BUG,STM32 单片机在未接网线的状态下,上电一段时间后,将网线插入网口后,IP地址ping不通,网络模块无…

ImportError: cannot import name ‘url_quote‘ from...

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…