TCP 协议在关闭连接时,需要进行四次挥手的过程,主要是为了确保客户端和服务器都能正确地关闭连接。

执行流程

四次挥手的具体流程如下:

  1. 客户端发送 FIN 包:客户端发送一个 FIN 包,其中 FIN 标识位为 1,表示客户端希望关闭连接。
  2. 服务器发送 ACK 包:服务器收到客户端的 FIN 包后,向客户端发送一个 ACK 包,其中 ACK 标识位为 1,表示服务器已经收到了客户端的请求,并将确认号设置为客户端发送的序列号+1。
  3. 服务器发送 FIN 包:服务器在发送完 ACK 包之后,也会发送一个 FIN 包,其中 FIN 标识位为 1,表示服务器也希望关闭连接。
  4. 客户端发送 ACK 包:客户端收到服务器的 FIN 包后,向服务器发送一个 ACK 包,其中 ACK 标识位为 1,表示客户端已经收到了服务器的请求,并将确认号设置为服务器发送的序列号+1。

执行流程如下图所示: image.png

主要作用

四次挥手的主要作用是:

  1. 确保所有数据都被传输完成:在关闭连接前,双方都可能还有数据需要传输,因此需要四次挥手来确保所有数据都被传输完成。
  2. 避免服务器收到来自已关闭的连接的数据:在关闭连接后,服务器可能会收到来自已关闭的连接的数据,因此需要等待一段时间,确保客户端收到了服务器的 FIN 包并确认关闭连接,才能关闭连接。
  3. 确保双方都能正确地关闭连接:四次挥手的过程中,客户端和服务器都需要发送 FIN 和 ACK 包,以确保双方都能正确地关闭连接,避免连接一方关闭而另一方仍然处于连接状态。

因此,TCP 协议需要进行四次挥手,以确保双方都能正确地关闭连接,并避免数据的丢失和混淆。

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】