当前位置: 首页 > news >正文

简述三次握手和四次断开

在计算机网络中,TCP(Transmission Control Protocol)是一种面向连接的协议,它通过三次握手(Three-Way Handshake)建立连接,并通过四次挥手(Four-Way Wave)断开连接。下面分别简述这两个过程。

三次握手(Three-Way Handshake)
三次握手的过程是为了确保双方都准备好进行通信,并且可以正确地发送和接收数据。以下是三次握手的具体步骤:

SYN(同步序列编号)
客户端向服务器发送 SYN 报文:客户端首先发送一个带有 SYN 标志位的 TCP 数据包给服务器,表示请求建立连接。这个数据包还包含了一个初始序列号(ISN),用于后续的数据传输。
客户端:SYN(seq=x)
SYN-ACK(同步确认)
服务器向客户端发送 SYN-ACK 报文:服务器接收到客户端的 SYN 报文后,会发送一个带有 SYN 和 ACK 标志位的 TCP 数据包给客户端。这个数据包包含了一个确认号(ack=x+1),表示确认收到了客户端的序列号,并且包含了服务器自己的初始序列号。
服务器:SYN-ACK(seq=y, ack=x+1)
ACK(确认)
客户端向服务器发送 ACK 报文:客户端接收到服务器的 SYN-ACK 报文后,会发送一个带有 ACK 标志位的 TCP 数据包给服务器。这个数据包包含了一个确认号(ack=y+1),表示确认收到了服务器的序列号。
客户端:ACK(seq=x+1, ack=y+1)
至此,三次握手完成,TCP 连接建立成功。

四次断开(Four-Way Wave)
四次断开的过程是为了确保双方都完成了数据的发送和接收,并且可以安全地断开连接。以下是四次断开的具体步骤:

FIN(终止标志)
客户端向服务器发送 FIN 报文:客户端决定关闭连接时,会发送一个带有 FIN 标志位的 TCP 数据包给服务器。这个数据包包含了一个序列号,用于标识这是最后一个数据包。
客户端:FIN(seq=u)
ACK(确认)
服务器向客户端发送 ACK 报文:服务器接收到客户端的 FIN 报文后,会发送一个带有 ACK 标志位的 TCP 数据包给客户端,确认收到了客户端的 FIN 报文。
服务器:ACK(seq=v, ack=u+1)
FIN(终止标志)
服务器向客户端发送 FIN 报文:服务器完成数据发送后,会发送一个带有 FIN 标志位的 TCP 数据包给客户端,表示服务器也准备关闭连接。
服务器:FIN(seq=v, ack=u+1)
ACK(确认)
客户端向服务器发送 ACK 报文:客户端接收到服务器的 FIN 报文后,会发送一个带有 ACK 标志位的 TCP 数据包给服务器,确认收到了服务器的 FIN 报文。
客户端:ACK(seq=u+1, ack=v+1)
至此,四次断开完成,TCP 连接完全关闭。

为什么需要三次握手?
确保双方都已经准备好:三次握手确保了双方都已经准备好进行数据传输,并且确认了对方的通信能力。
避免失效的连接请求:三次握手可以防止已失效的连接请求报文突然又传送到了服务端,导致不必要的错误连接。
为什么需要四次断开?
确保双方都完成数据传输:四次断开确保了双方都已经完成了数据的发送和接收,确保没有遗漏的数据。
确保连接的可靠关闭:四次断开确保了双方都已经确认对方的数据发送完毕,可以安全地关闭连接。
总结
三次握手:用于建立 TCP 连接,确保双方都准备好进行数据传输。
四次断开:用于关闭 TCP 连接,确保双方都完成了数据的发送和接收,并且可以安全地断开连接。


http://www.mrgr.cn/news/24728.html

相关文章:

  • android 侧滑返回上一界面备忘
  • 研1日记9
  • CSS 响应式设计(补充)——WEB开发系列36
  • 【机器学习-监督学习】集成学习与梯度提升决策树
  • 人均 800 养生中餐海鲜料理,商业模式设计
  • linux高级学习13
  • 【CVPR2024】Scaling Up Video Summarization Pretraining with Large Language Models
  • 超详细,手把手带你源码启动 Thingsboard-Gateway + MQTT 接入设备
  • Redisson分布式锁实现及原理详解
  • Maven下载安装
  • 某仿soul欲音社交系统存在任意文件读取漏洞
  • PyTorch 和 TensorFlow
  • 软件测试认知篇
  • 实战02-TabBar
  • redis数据类型
  • table用position: sticky固定多层表头,滑动滚动条border边框透明解决方法
  • 横版闯关手游【全明星时空阿拉德】Linux手工服务端+运营后台+双app端
  • R语言数据整理和分析(1)
  • ARM base instruction -- blr
  • golang的GC(三色标记法+混合写屏障)学习笔记