image.png
    问:讲一下四次挥手?
    答:
    因为TCP的连接是全双工(可以同时发送和接受)连接,因此在关闭连接时,需要关闭传和送两个方向的连接。在每一个方向上,都需要发送FIN报文,并在另一端确认ACK,因此一共需要进行四次,即四次挥手。

    具体来说,
    客户端给服务器发送一个FIN的TCP报文,请求断开连接;服务器返回客户端一个确认ACK报文,同一断开断开客户端给服务器传输数据的连接;(这个时候进入半关闭状态,也就是说客户端还能接受服务器发送的状态,但是无法发送数据)

    服务器也请求断开连接,发送给FIN报文;客户端收到后,回复ACK报文确认,四次挥手完成,断开连接。

    问:为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手?
    答:
    因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,表示接收到了断开连接的请求。等到数据发完之后再发FIN,断开服务器到客户端的数据传送。(简而言之,因为服务器可能还有数据需要发送给客户端)。

    问:如果第二次挥手时服务器的ACK没有送达客户端,会怎么样?
    答:客户端没有收到ACK确认,会重新发送FIN请求。