linux服务器的三次握手和连接状态详解

400人浏览 / 0人评论

当使用 TCP 协议进行通信时,建立和关闭连接都需要经历一定的流程,其中三次握手和四次挥手是 TCP 连接中的重要流程。

TCP 建立连接(三次握手):

  1. 客户端发送 SYN 报文,表示想要建立连接,进入 SYN-SENT 状态。
  2. 服务器接收到 SYN 报文,发送 SYN-ACK 报文作为确认,并发送自己的 SYN 报文,进入 SYN-RECEIVED 状态。
  3. 客户端接收到服务器的 SYN-ACK 报文,发送 ACK 报文作为确认,连接建立成功,进入 ESTABLISHED 状态。

TCP 关闭连接(四次挥手):

  1. 客户端发送 FIN 报文,表示希望关闭连接,进入 FIN-WAIT-1 状态。
  2. 服务器接收到 FIN 报文,发送 ACK 报文作为确认,进入 CLOSE-WAIT 状态。
  3. 如果服务器还有数据需要发送,那么服务器在发送完数据后,发送 FIN 报文,进入 LAST-ACK 状态。
  4. 客户端接收到服务器的 FIN 报文,发送 ACK 报文作为确认,进入 TIME-WAIT 状态,等待一段时间后进入 CLOSED 状态。如果在等待期间收到对方的 ACK 报文,则直接进入 CLOSED 状态。

在连接建立和关闭的过程中,TCP 的连接状态会不断发生变化,具体的连接状态变化如下:

  1. 初始状态:客户端和服务器都处于 CLOSED 状态。
  2. 建立连接过程中的状态变化:
    • 客户端发送 SYN 报文,进入 SYN-SENT 状态。
    • 服务器接收到 SYN 报文,发送 SYN-ACK 报文,进入 SYN-RECEIVED 状态。
    • 客户端接收到服务器的 SYN-ACK 报文,发送 ACK 报文,连接建立成功,进入 ESTABLISHED 状态。
  3. 关闭连接过程中的状态变化:
    • 客户端发送 FIN 报文,进入 FIN-WAIT-1 状态。
    • 服务器接收到 FIN 报文,发送 ACK 报文,进入 CLOSE-WAIT 状态。
    • 如果服务器还有数据需要发送,那么服务器在发送完数据后,发送 FIN 报文,进入 LAST-ACK 状态。
    • 客户端接收到服务器的 FIN 报文,发送 ACK 报文,进入 TIME-WAIT 状态。
    • 等待一段时间后,客户端进入 CLOSED 状态,连接关闭完成。如果在等待期间收到对方的 ACK 报文,则直接进入 CLOSED 状态。

全部评论