最近在用W5500做个项目,边做边加深对计算机网络这方面知识的了解。今天来探究一下TCP断开连接时的四次挥手。
参与TCP连接的两个进程中的任何一个都能终止该连接。假设现在客户端打算要关闭连接,一共分下面几步:
1、客户端TCP向服务器进程发送一个特殊的TCP报文段,这个特殊的报文段让其首部中的FIN标志位置1。
2、服务器收到FIN报文段后,向客户端发送确认报文段。
3、服务器发送它自己的FIN报文段给客户端,要求终止连接。
4、客户端收到服务器的FIN报文段后,向服务器发送确认报文段。
至此,TCP连接就中断了。具体的过程大致如下图:
现在问题来了,为什么挥手的时候要四次?
因为TCP连接是全双工的,也就是说服务器往客户端发送数据、客户端往服务器发送数据可以同时进行,而且他们很有可能不是同时结束。客户端发送数据结束后,向服务器发送FIN报文段,就是告诉服务器,我的数据发送完成了,我要断开连接了。而此时服务器可能还在向客户端发送数据。服务器要等到它的数据发送完毕后,再向客户端发送FIN报文段,告诉客户端,我要发送的数据也发送完毕了,我也可以断开连接了。
下面是wireshark截取到的四次挥手的数据包: