TCP Open and Close
TPC连接需要三次握手
第一次握手(客户端发送 SYN 报文给服务器,服务器接收该报文):客户端什么都不能确认;服务器确认了对方发送正常,自己接收正常。
第二次握手(服务器响应 SYN 报文给客户端,客户端接收该报文):客户端确认了:自己发送、接收正常,对方发送、接收正常;服务器确认了:对方发送正常,自己接收正常。
第三次握手(客户端发送 ACK 报文给服务器):客户端确认了:自己发送、接收正常,对方发送、接收正常; 服务器确认了:自己发送、接收正常,对方发送、接收正常
TCP断开需要四次挥手
四次挥手过程如下图所示,流程如下:
客户端数据数据发送完毕,想关闭连接,发送FIN给服务器端。此时客户端进入FIN-WAIT-1状态
服务器端收到客户端的FIN,并返回ACK给客户端,确认已经收到客户端的关闭通知。
当客户端收到服务器端的ACK通知后,不能立即关闭连接,因为服务器端可能还要继续发送数据。所以此时客户端进入FIN-WAIT-2状态。
也就是在这个时间点上,客户端只是不再发送数据了,但是可能还要接收数据。
待服务器端数据发送完毕,发送FIN给客户端,告知客户端,我也发完了,准备关闭。此时服务器端进入CLOSE-WAIT状态。
客户端收到来自服务端的FIN后,返回ACK给服务端,表示我收到你的关闭通知了,你可以关闭了,服务端收到客户端的ACK后,立即关闭,状态变为CLOSE。客户端发送完ACK后,进入TIME-WAIT状态,且等待2ms后自动关闭,状态变为CLOSE。
所以,为啥要等2ms才能关闭?