三次握手和四次挥手
1. 三次握手
三次握手建立连接过程如下:

①客户端发送一个 SYN包给服务端(包含了客户端初始化序列号),并且将连接的状态设置为 SYN_SENT,这个过程由 connect() 系统调用完成。
②服务端接收到客户端发送过来的SYN包后,回复一个 SYN+ACK包 给客户端(包含了服务端初始化序列号),并且设置连接的状态为 SYN_RCVD。
③客户端接收到服务端发送过来的 SYN+ACK包 后,设置连接状态为 ESTABLISHED(表示连接已经建立),并且回复一个ACK包 给服务端。
服务端接收到客户端发送过来的 ACK包后,将连接状态设置为 ESTABLISHED(表示连接已经建立)。 当三次握手过程完成后,一个 TCP 连接就此建立完成。
2. 四次挥手
四次挥手关闭连接过程如下:

在断开连接之前客户端和服务端都处于ESTABLISHED状态,双方都可以主动断开连接,以下面以客户端主动断开连接为例进行讲解。
①客户端想要断开连接,于是发送一个FIN包给服务端,并将连接状态设置为FIN_WAIT_1。FIN包指定了一个序列号,即客户端发送的最后一个数据字节的序号加1(客户端不再发送数据的序号)。
②服务端收到客户端发送过来的FIN包后,确认了客户端不再发送数据,但服务端仍可以向客户端发送数据。服务端回复一个ACK包给客户端,并将连接状态设置为CLOSE_WAIT(等待关闭)状态。
客户端收到来自服务器的ACK包后,将连接状态设置为FIN_WAIT_2。
③服务端也打算断开连接,于是发送一个FIN包给客户端。之后服务端进入LASK_ACK(最后确认)状态,等待客户端的确认。
④客户端收到来自服务端的FIN包后,会发送一个ACK包给服务端。之后客户端进入TIME_WAIT(时间等待)状态。
服务器收到ACK包后,就进入CLOSE(关闭)状态,到此服务端的连接已经完成关闭。
客户端处于TIME_WAIT状态时,此时的TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。

浙公网安备 33010602011771号