一、三次握手
- 第一次握手:建立连接时,客户端发送SYN包到服务器,并进入SYN
_SEND状态,等待服务器确认。 - 第二次握手:服务器收到SYN包,必须确认客户端的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
-
第三次握手:客户端收到服务器端的SYN+ACK包,向服务器端发送确认包ACK,此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手。
三次握手.png
二、四次挥手
- 第一次挥手:首先,客户端发送一个FIN,用来关闭客户端到服务器端的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。此时,客户端进入FIN-WAIT-1(终止等待1)状态。
- 第二次挥手:服务器端收到FIN,发送一个ACK包,确认ack为收到的序号加一。此时,服务端就进入了CLOSE-WAIT(关闭等待)状态,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文。
- 第三次挥手:关闭服务器端到客户端的连接,发送一个FIN给客户端。此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
-
第四次握手:客户端收到FIN后,并发送一个ACK报文确认,并将确认序号seq设置为收到序号加一。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
四次挥手.png
网友评论