四次挥手
- 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务器端发送4个数据包以确定连接的断开。在socket编程中,有客户端和服务器端任一方执行close触发。
- 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只意味着这个方向不在收到数据了,直到这个方向也发送了FIN,首先进行关闭的一方执行主动关闭,而另一方执行被动关闭。
第一次辉手:客户端发送FIN=N用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。
第二次辉手:服务器收到FIN=N后,先发送ack = m + 1,这个时候客户端的状态变成FIN_WAIT_2了。
第三次辉手:当服务器确定数据已经发送完成,则向客户端发送FIN=N报文,服务端进入LAST_ACK状态,
第四次辉手:客户端收到FIN=N报文后,就知道要关闭连接了,但是他还不相信网络,怕服务器不知道关闭连接,所以发送ack = n + 1后进入TIME_WAIT状态了,如果服务器端没有收到ACK,则可以重传。服务器收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端可以断开连接了,最终完成4次挥手