linux服务器的三次握手和连接状态详解
当使用 TCP 协议进行通信时,建立和关闭连接都需要经历一定的流程,其中三次握手和四次挥手是 TCP 连接中的重要流程。
TCP 建立连接(三次握手):
- 客户端发送 SYN 报文,表示想要建立连接,进入 SYN-SENT 状态。
- 服务器接收到 SYN 报文,发送 SYN-ACK 报文作为确认,并发送自己的 SYN 报文,进入 SYN-RECEIVED 状态。
- 客户端接收到服务器的 SYN-ACK 报文,发送 ACK 报文作为确认,连接建立成功,进入 ESTABLISHED 状态。
TCP 关闭连接(四次挥手):
- 客户端发送 FIN 报文,表示希望关闭连接,进入 FIN-WAIT-1 状态。
- 服务器接收到 FIN 报文,发送 ACK 报文作为确认,进入 CLOSE-WAIT 状态。
- 如果服务器还有数据需要发送,那么服务器在发送完数据后,发送 FIN 报文,进入 LAST-ACK 状态。
- 客户端接收到服务器的 FIN 报文,发送 ACK 报文作为确认,进入 TIME-WAIT 状态,等待一段时间后进入 CLOSED 状态。如果在等待期间收到对方的 ACK 报文,则直接进入 CLOSED 状态。
在连接建立和关闭的过程中,TCP 的连接状态会不断发生变化,具体的连接状态变化如下:
- 初始状态:客户端和服务器都处于 CLOSED 状态。
- 建立连接过程中的状态变化:
- 客户端发送 SYN 报文,进入 SYN-SENT 状态。
- 服务器接收到 SYN 报文,发送 SYN-ACK 报文,进入 SYN-RECEIVED 状态。
- 客户端接收到服务器的 SYN-ACK 报文,发送 ACK 报文,连接建立成功,进入 ESTABLISHED 状态。
- 关闭连接过程中的状态变化:
- 客户端发送 FIN 报文,进入 FIN-WAIT-1 状态。
- 服务器接收到 FIN 报文,发送 ACK 报文,进入 CLOSE-WAIT 状态。
- 如果服务器还有数据需要发送,那么服务器在发送完数据后,发送 FIN 报文,进入 LAST-ACK 状态。
- 客户端接收到服务器的 FIN 报文,发送 ACK 报文,进入 TIME-WAIT 状态。
- 等待一段时间后,客户端进入 CLOSED 状态,连接关闭完成。如果在等待期间收到对方的 ACK 报文,则直接进入 CLOSED 状态。
全部评论