1.第一次挥手:客户端发送FIN报文,请求断开连接。这一过程为主动关闭。客户端由ESTABLISHED转换为FIN-WAIT-1。
FIN和ACK置为1,表示这是一个请求结束报文。seq=U表示在之前客户端已经发送的字节数。ack=V则表示服务端向客户端发送确认消息累计的32为确认序号的值。
2.第二次挥手:服务端确认客户端的FIN报文。服务端由ESTABLISHED转换为CLOSE-WAIT。此时的服务端能够发送带有数据消息但收不到带有数据消息了。并且客户端能够接收带有数据的消息但发送不了带有数据的消息了。
ACK置为1表示这是确认报文,seq=V,ack=U+1表示期望收到的下一个字节的序列号是 U+1。
3.第三次挥手:当客户端彻底关闭时会发送第三次挥手消息FIN报文,这一过程称为被动关闭。状态由CLOSE-WAIT变为LAST-ACK。
FIN,ACK,seq=W,ack=U+1。这里的seq=W是因为在CLOSE-WAIT期间还在不断的向客户端传递数据。而ack=U+1没有变,就是因为客户端无法向服务端发送数据了。
4.第四次挥手:当客户端收到了挥手消息后,客户端发送第四次挥手FIN,状态转换为TIME-WAIT,开始计时2MSL(2个最大报文段存活时间,以确保所有可能的延迟数据包都已经消失。)。服务端收到后转换为CLOSED状态。2MSL后客户端转换为CLOSED状态。
ACK,seq=U+1,ack=W+1