0%

tcp-open-and-close

TCP Open and Close

TPC连接需要三次握手

第一次握手(客户端发送 SYN 报文给服务器,服务器接收该报文):客户端什么都不能确认;服务器确认了对方发送正常,自己接收正常。

第二次握手(服务器响应 SYN 报文给客户端,客户端接收该报文):客户端确认了:自己发送、接收正常,对方发送、接收正常;服务器确认了:对方发送正常,自己接收正常。

第三次握手(客户端发送 ACK 报文给服务器):客户端确认了:自己发送、接收正常,对方发送、接收正常; 服务器确认了:自己发送、接收正常,对方发送、接收正常

tcp-open

TCP断开需要四次挥手

四次挥手过程如下图所示,流程如下:

  1. 客户端数据数据发送完毕,想关闭连接,发送FIN给服务器端。此时客户端进入FIN-WAIT-1状态

  2. 服务器端收到客户端的FIN,并返回ACK给客户端,确认已经收到客户端的关闭通知。

    当客户端收到服务器端的ACK通知后,不能立即关闭连接,因为服务器端可能还要继续发送数据。所以此时客户端进入FIN-WAIT-2状态。

    也就是在这个时间点上,客户端只是不再发送数据了,但是可能还要接收数据。

  3. 待服务器端数据发送完毕,发送FIN给客户端,告知客户端,我也发完了,准备关闭。此时服务器端进入CLOSE-WAIT状态。

  4. 客户端收到来自服务端的FIN后,返回ACK给服务端,表示我收到你的关闭通知了,你可以关闭了,服务端收到客户端的ACK后,立即关闭,状态变为CLOSE。客户端发送完ACK后,进入TIME-WAIT状态,且等待2ms后自动关闭,状态变为CLOSE。

所以,为啥要等2ms才能关闭?

tcp-close