Client 客户端和server服务端任何一端都可以发起关闭连接请求,假如Client 发起关闭连接请求,随即会产生一个FIN=1,seq=u的值,之后进入FIN-WAIT1状态,server收到该报文后,就会向client 发送ACK=1,seq=v,ack=u+1的应答报文,等待server处理完数据后,并发送给client FIN=1,ACK=1,seq=w,ack=u+1的确认断开连接的应答报文,server进入CLOSE-WAIT状态,client进入FIN-WAIT2状态,同时也会向server发送ACK=1,seq=u+1,ack=w+1的应答报文,server收到client的应答报文后,随即进入CLOSE状态,确认已断开连接,client 进入TIME-WAIT状态,经过2MSL的等待时间后,进入CLOSE状态断开连接。
MSL时间为报文生存时间,30秒,系统一般默认两倍,2MSL=60秒,SML时间的主要作用是,主动提出断开连接的一端确认数据已传送完毕的等待时间。
可以看到每个方向都需要一个FIN和ACK的接收和应答报文,所以被称为四次挥手。
过程如下图: