三次握手四次挥手是什么意思?为什么是3,不是2或者4?

三次握手是 TCP 协议建立可靠连接的过程,四次挥手是 TCP 协议关闭已建立连接的过程;二者的握手 / 挥手次数是由 TCP 的双向通信、面向连接、可靠传输的设计目标决定的。
一、 三次握手(TCP 建立连接)

  1. 三次握手的过程
    TCP 连接的建立是客户端和服务器双向确认的过程,双方需要确认自己的发送和接收能力正常,具体步骤如下:
    步骤 发起方 报文 含义
    1 客户端 SYN 客户端向服务器发起连接请求,携带初始序列号 seq = x,询问 “我能给你发数据吗?”
    2 服务器 SYN + ACK 服务器收到请求后,回复确认报文:
  2. ACK = x+1:确认收到客户端的 SYN
  3. SYN = y:同时向客户端发起连接请求,携带自己的初始序列号
    3 客户端 ACK 客户端收到服务器的 SYN+ACK 后,回复 ACK = y+1,确认收到服务器的 SYN
    此时,客户端和服务器都确认了双方的发送、接收能力正常,TCP 连接正式建立。
  4. 为什么是 3 次,不是 2 或 4 次?
    为什么不能是 2 次?
    2 次握手只能让服务器确认客户端的收发能力,但客户端无法确认服务器的收发能力。
    比如:客户端发的 SYN 报文延迟到达服务器,服务器回复 SYN+ACK 后,客户端可能已经认为连接失败,不会处理该报文;但服务器会误以为连接已建立,一直等待客户端发数据,造成资源浪费。
    三次握手的第三次 ACK,能让服务器确认 “客户端收到了我的 SYN”,避免上述资源空耗。
    为什么不需要 4 次?
    服务器的 SYN 请求和对客户端 SYN 的确认,可以合并成一个 SYN+ACK 报文,一次传输完成,没必要拆成两次独立报文,因此 3 次是效率最高的选择。
    二、 四次挥手(TCP 关闭连接)
  5. 四次挥手的过程
    TCP 连接是全双工(双向同时传输)的,关闭连接时需要双方分别关闭各自的传输方向,因此需要 4 次交互:
    步骤 发起方 报文 含义
    1 客户端 FIN + ACK 客户端向服务器发送 FIN,请求关闭 “客户端→服务器” 的传输方向,携带序列号 seq = u
    2 服务器 ACK 服务器收到 FIN 后,回复 ACK = u+1,确认关闭该方向;此时客户端→服务器方向关闭,但服务器→客户端方向仍可传输数据
    3 服务器 FIN + ACK 服务器数据传输完毕后,向客户端发送 FIN,请求关闭 “服务器→客户端” 的传输方向,携带序列号 seq = v
    4 客户端 ACK 客户端收到 FIN 后,回复 ACK = v+1;等待 2MSL(最长报文生存时间)后,双向连接完全关闭
  6. 为什么是 4 次,不是 3 次?
    核心原因是 TCP 全双工的特性,关闭连接时,两个方向的关闭请求无法合并:
    服务器收到客户端的 FIN 后,可能还在向客户端发送数据,因此不能立即发送自己的 FIN,只能先回复 ACK 确认关闭客户端→服务器的方向。
    只有等服务器把所有数据发完,才能发送 FIN 请求关闭自己→客户端的方向。
    因此 “确认客户端的 FIN” 和 “发送自己的 FIN” 是两个独立步骤,必须分开发送,加上客户端的 FIN 和最后的 ACK,一共 4 次交互。
posted @ 2025-12-23 15:31  BabyUnique  阅读(2)  评论(0)    收藏  举报