这是常规路线,相对比较简单。
-
【虚线】为服务器的TCP状态转换路线,虚线上的内容为服务器进程主动执行操作后的状态切换。
-
【粗实线】为客户端的TCP状态转换路线,虚线上的内容为客户端进程主动执行操作后的状态切换。
-
【细实线】为被动触发的状态切换,或者理解为接收到非正常信号时的状态反应路线。
从这张图我们可以看出了,如果在FIN_WAIT_1同时收到ACK和FIN会跳过FIN_WAIT_2这个状态,也就是说TCP协议不一定会有4次挥手。还有一种是同时发起关闭的情况,虽然也是4次挥手,但却是同时挥手的。
如果已经建立链接的双方同时发起FIN(即由Established转为Fin_wait_1状态),那么双方都会在Fin_wait_1接收到来自对方的Fin信号(而非正常流程的Ack型号)。则会在收到Fin后双发各自转为Closing状态,即同时关闭状态,并发送给对方来自Closing状态的Ack信号后进入Time_wait状态等待2MSL。