四次揮手
第一次揮手
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。
Paste_Image.png
Paste_Image.png
第二次揮手
服務器收到FIN后,發回一個ACK(標志位ACK=1),確認序號為收到的序號加1,即X=X+1=2。序號為收到的確認序號=Z。
Paste_Image.png
Paste_Image.png
第三次揮手
服務器關閉與客戶端的連接,發送一個FIN。標志位FIN和ACK置為1,序號為Y=1,確認序號為X=2。
Paste_Image.png
Paste_Image.png
第四次揮手
客戶端收到服務器發送的FIN之后,發回ACK確認(標志位ACK=1),確認序號為收到的序號加1,即Y+1=2。序號為收到的確認序號X=2。
Paste_Image.png
Paste_Image.png