第一次挥手
client发送一个FIN=1(seq=X)包,此时client进入FIN-WAIT-1状态,这表明client已经没有数据要发送了。
第二次挥手
server收到了client发来的FIN=1(seq=X)包后,向client发回一个ACK=1(ack=X+1)包,此时server进入CLOSE-WAIT状态,client进入FIN-WAIT-2状态。
第三次挥手
server向client发送FIN=1(seq=Y)包,请求关闭连接,同时server进入LAST-ACK状态。
第四次挥手
client收到server发送的FIN(N)包,进入TIME-WAIT状态。向server发送ACK=1(ack=Y+1)包,server收到client的ACK=1(ack=Y+1)包以后,进入CLOSE状态;client等待一段时间还没有得到回复后判断server已正式关闭,进入CLOSE状态。
wireshark解析
第一次挥手
客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=1,确认序号为Z=1。
第二次挥手
服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=2。序号为收到的确认序号=Z。
第三次挥手
服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为Y=1,确认序号为X=2。
第四次挥手
客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=2。序号为收到的确认序号X=2。