TCP建立连接和断开连接的过程如下图所示,在TCP 协议提供可靠的连接服务时,采用三次握手建立一个连接,采用四次握手来关闭一个连接。
建立TCP连接的三次握手:
-
第一次握手:建立连接时,客户端发送 SYN 包到服务器,等待服务器确认。
-
第二次握手:服务器收到 SYN 包,回应一个 SYN-ACK 包。
-
第三次握手:客户端收到服务器的 SYN-ACK 包,向服务器发送确认包 ACK,此包发送完毕,完成三次握手。
如果服务器发出的 SYN-ACK 包异常,客户端会发送一个 RST 包给服务器,服务器重新回到监听状态。
关闭TCP 连接的四次握手:
-
第一次握手:客户端发送 FIN 包到服务器,表示客户端没有数据要向服务器发送了,等待服务器确认。
-
第二次握手:服务器收到 FIN 包,发送 ACK 包来确认客户端的 FIN 包,如果服务器数据还没传完,则不发送 FIN 包。
-
第三次握手:当服务器没有数据要向客户端发送时,服务器发送 FIN 包到客户端,并等待客户端最终确认。
-
第四次握手:客户端收到 FIN 包,发出 ACK 包来确认服务器的 FIN 包,此包发送完毕,完成四次握手,双方连接断开。