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

TCP/IP 协议中的三次握手和四次挥手-----详解笔记

TCP/IP 协议中的三次握手和四次挥手

TCP/IP 协议中的三次握手和四次挥手是建立和终止连接的关键过程。

三次握手(Three-Way Handshake)

三次握手的目的是建立一个可靠的 TCP 连接,确保双方都准备好发送和接收数据。这个过程分为三个步骤:

客户端服务端
1. 客户端发送 SYN 请求: - 客户端向服务器发送一个 SYN(同步)包,表示请求建立连接。此时客户端进入 SYN_SENT 状态。 - 包含一个序列号(Seq= x),即客户端初步选择的序列号。
2. 服务器响应 SYN-ACK: - 服务器收到客户端的 SYN 请求后,向客户端发送一个 SYN-ACK 包,表示同意建立连接,并且返回一个确认号。此时服务器进入 SYN_RCVD 状态。 - 服务器会选择一个序列号(Seq = y),并确认客户端的序列号(Ack = x + 1)。
3. 客户端确认 ACK: - 客户端收到服务器的 SYN-ACK 包后,发送一个 ACK 包,确认连接建立成功。此时客户端进入 ESTABLISHED 状态。 - 客户端确认服务器的序列号(Ack = y + 1),并返回自己的序列号(Seq = x + 1)。

至此,客户端和服务器之间的连接建立成功,数据传输可以开始。

四次挥手(Four-Way Handshake)

四次挥手用于终止 TCP 连接,它的目的是确保双方都已完成数据传输,并且双方都同意断开连接。这个过程分为四个步骤:

客户端服务端
1. 客户端发送 FIN 请求: - 客户端发送一个 FIN(结束)包,表示客户端没有数据要发送了,但它仍然可以接收数据。此时客户端进入 FIN_WAIT_1 状态。
2. 服务器响应 ACK: - 服务器收到客户端的 FIN 包后,发送一个 ACK 包,表示确认客户端的断开请求。此时服务器进入 CLOSE_WAIT 状态。 - 服务器会将 ACK 包的确认号设为客户端的序列号 + 1。
3. 服务器发送 FIN 请求: - 服务器准备好关闭连接时,向客户端发送一个 FIN 包,表示服务器没有数据要发送了。此时服务器进入 LAST_ACK 状态。
4. 客户端响应 ACK: - 客户端收到服务器的 FIN 包后,发送一个 ACK 包,确认连接已经断开。此时客户端进入 TIME_WAIT 状态,等待 2 倍的最大段生存时间(MSL)后彻底关闭连接。 - 客户端将确认号设为服务器的序列号 + 1。

当 TIME_WAIT 结束后,客户端进入 CLOSED 状态,连接完全关闭。

总结

  • 三次握手是为了确保双方都能发送和接收数据,连接建立时双方都知道对方准备好了。
  • 四次挥手是为了确保双方都同意断开连接,避免数据丢失。

更简单的解释

三次握手(建立连接)

你可以把三次握手理解为你和对方约定见面的过程。假设你和对方在手机上打电话,打算聊一聊,但在正式开始之前需要确保双方都准备好了。

  1. 第一次握手(你打电话给对方):
    • 你先给对方打个电话,表示你准备好了,想和对方通话。你说:“嗨,我准备好聊了!”
    • 这相当于你发送了一个 SYN(同步)信号,告诉对方你想建立连接。
  2. 第二次握手(对方接电话并回应):
    • 对方接听了电话,并表示同意聊天,顺便告诉你:“我也准备好了,我们可以开始聊天了!”
    • 这时候,对方不仅接听了电话,还发了个确认信号(ACK),告诉你他们已经准备好了。
  3. 第三次握手(你确认对方准备好):
    • 你再确认一下:“好,太棒了!我们可以开始了!”
    • 你确认了对方准备好,连接就正式建立了。

通过这三步,你和对方都确认了彼此都准备好了,双方可以开始聊天了。

四次挥手(断开连接)

当你们聊完了,想要挂电话时,得按照一定的顺序断开电话连接,这就是四次挥手的过程。

  1. 第一次挥手(你提出挂电话):
    • 你说:“好了,我想结束通话了,挂电话吧!”
    • 你发了一个 “FIN” 信号,表示你不再需要聊天了,准备挂电话。
  2. 第二次挥手(对方确认挂电话):
    • 对方收到你的信号后,表示:“好,知道了,我也准备结束了,挂电话吧!”
    • 对方发回了一个 “ACK” 确认信号,表示他们知道你要挂电话了。
  3. 第三次挥手(对方挂电话):
    • 对方说:“我也说完了,挂掉电话!”
    • 对方发了个 “FIN” 信号,告诉你他们也不再需要通话了。
  4. 第四次挥手(你确认对方挂电话):
    • 你确认:“好的,我知道了。挂掉电话!”
    • 你发回一个 “ACK” 信号,表示你确认对方挂掉电话了。然后你就可以彻底挂电话了。

总结

  • 三次握手:就像你和对方确认好什么时候开始聊天的过程,确保你们都准备好。
  • 四次挥手:就像你们聊完了,要按照步骤确认结束通话的过程,确保彼此都同意断开。
http://www.dtcms.com/a/319749.html

相关文章:

  • 板块三章节3——NFS 服务器
  • 人工智能2.0时代的人才培养和通识教育
  • 计算机视觉第一课opencv(一)保姆级教学
  • lane_up channel_up
  • mysql8.0.40服务日志时间和linux系统时间不同步问题!
  • 指针——练习
  • 算法 - 贪心算法
  • 计网学习笔记第3章 数据链路层层(灰灰题库)
  • 冷库设备远程监控物联网+省电节能解决方案
  • linux下实现System V消息队列实现任意结构体传输
  • 具身智能,正在翻越三座大山
  • 计算机毕业设计java疫情开放下的新冠信息共享平台 基于Java的社区疫情防控人员流动管理系统 疫情防控期间社区人员动态管理系统
  • 范数的定义、分类与 MATLAB 应用实践
  • 解决React白板应用中的画布内容丢失问题
  • 3363. 最多可收集的水果数目
  • 关键字 - 第二讲
  • Spring AI + Redis:构建高效AI应用缓存方案
  • 【物联网】基于树莓派的物联网开发【25】——树莓派安装Grafana与Influxdb无缝集成
  • 在 Linux 系统上安装 Docker 的步骤如下(以 Ubuntu/Debian为例)
  • 前缀和
  • 简洁明了的讲明什么是哈希(hash)函数
  • [激光原理与应用-170]:测量仪器 - 能量型 - 光功率计的工作原理与内部功能模块组成
  • 【第7话:相机模型3】自动驾驶IPM图像投影拼接技术详解及代码示例
  • 直连微软,下载速度达18M/S
  • Mysql 单行函数 聚合函数
  • MySQL聚簇索引与非聚簇索引详解
  • 北京企业数据防泄漏指南:5款适合北方市场的安全加密工具评测
  • 【华为机试】332. 重新安排行程
  • MySQL——黑马
  • STM32U5 周期性异常复位问题分析