上次写了TCP的三次握手,这次总结一下TCP的四次挥手的过程,理清楚为什么握手是三次,挥手需要四次。
TCP是面向连接的,连接的建立过程被称为“三次握手”,天下没有不散的宴席,有了连接的建立,就会有连接的断开,TCP断开的过程通常被称为“四次挥手”。
首先要明确一点,断开TCP请求既可以由客户端发起也可以由服务端发起。这里讨论客户端发起断开连接请求的情况。
过程如下:(可以先看文末的通俗对话模拟)
(1) 客户端A发出一个关闭连接的命令,这会使得客户端的TCP发送一个特殊的TCP报文段给服务器B,这个报文段的FIN标记位(finish的缩写,表示结束)被置为1。此时A由ESTABLISHED状态转为FIN_WAIT_1状态,等待来自B的ACK报文。
(2) B收到这个报文段,检测到这是请求关闭连接的报文,发送一个确认报文段(ACK字段为1)给A,表示收到,通知A可以释放连接了。A收到这个ACK报文时,单方面释放了与B的连接,此时他不能再向B发送应用层数据了,但由于B可能还有数据没有发送完,所以此时A还可以接收来自B的报文段。此时A进入FIN_WAIT_2状态,等待来自B的FIN报