TCP 三次握手与四次挥手的原理是什么?

TCP 连接建立需要经过三次握手,终止则需要四次挥手。此过程确保了可靠的数据传输和连接管理。

网络协议 困难 TCP/IP TCP 通信

TCP 连接的建立和终止是保证网络传输可靠性的关键机制。以下是详细过程。

TCP 三次握手(Connection Establishment)

三次握手用于创建 TCP 连接,确保双方的发送和接收能力正常。步骤依次为:

  1. 第一次握手(SYN SENT)
    客户端发送 SYN 报文给服务端,其中 SYN 标志位设为 1,并携带一个随机生成的初始序列号(Seq = x)。客户端进入 SYN_SENT 状态,表示已发送连接请求。示例报文:
    SYN=1, Seq=x
    
  2. 第二次握手(SYN RECV)
    服务端收到 SYN 报文后,回复 SYN + ACK 报文。将 ACK 标志位设为 1(Ack = x + 1 表示确认客户端序列号),SYN 标志位设为 1,并携带自己的初始序列号(Seq = y)。服务端进入 SYN_RECV 状态。整个过程确认了服务端的发送/接收能力和客户端的接收能力。

  3. 第三次握手(ESTABLISHED)
    客户端返回 ACK 报文给服务端。将 ACK 标志位设为 1(Ack = y + 1),Seq 字段更新为 x + 1。双方成功进入 ESTABLISHED 状态,连接建立完成。示例报文:
    ACK=1, Ack=y+1, Seq=x+1
    

    需要三次握手的原因:防止失效的旧连接请求占用资源(如网络阻塞后迟滞的请求),并确保双向通信能力。

TCP 四次挥手(Connection Termination)

四次挥手用于关闭连接,因双方可能处于半关闭状态(如单方面有残余数据)。步骤依次为:

  1. 第一次挥手(FIN WAIT-1)
    客户端发送 FIN 报文给服务端,表示已无数据发送(但未关闭接收)。序列号如 Seq = m。客户端进入 FIN_WAIT_1 状态。

  2. 第二次挥手(CLOSE WAIT)
    服务端回复 ACK 报文确认收到(Ack = m + 1),自身进入 CLOSE_WAIT 状态。客户端接收到后进入 FIN_WAIT_2 状态,继续等待服务端的最终关闭信号。

  3. 第三次挥手(LAST ACK)
    服务端在确认无剩余数据后发送 FIN 报文给客户端。携带 Seq,如 Seq = n。服务端进入 LAST_ACK 状态,表示等待客户端的最终确认。示例报文:
    FIN=1, Seq=n, Ack=m+1
    
  4. 第四次挥手(CLOSED)
    客户端回复 ACK 报文(Ack = n + 1),并进入 TIME_WAIT 状态以防丢包重传;服务端收到后正式关闭进入 CLOSED 状态。整个终止过程释放资源。

    需要四次挥手的原因:因 TCP 是全双工通信,关闭连接时需双方各自确认无残留数据并同步状态。

在总结中,三次握手确保初始同步可靠,而四次挥手保障结束阶段数据完整传输。