TCP3次握手4次揮手 待續

15年10月更新,看微博的時候找到一篇很好的文章,五星推薦:http://www.codeceo.com/article/tcp-3-hand.html

三次握手

第一次握手

建立連接時,客戶端發送SYN包(syn=j)到服務器,進入SYN_SEND狀態,等待服務器確認

第二次握手

服務器收到SYN包,確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態

第三次握手

客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手

四次揮手

假設client端發起中斷連接請求,也可以是server端

1. client發起中斷請求,即發送Fin報文

client向server喊話內容:client沒有數據發給你了,如果你還有數據沒有發送完,不必急着關閉socket,可以繼續發送數據

2. server發送ack

回覆內容:你的請求我收到了,但我還沒準備好,請等我消息
此時client進入FIN_WAIT狀態,繼續等待server端的FIN報文

3. server端確定數據發送完成之後,想client發送FIN報文

報文內容:數據發送完成,準備關閉連接

4. client收到FIN報文,回覆ack

client收到FIN報文後知道可以關閉連接了,怕server因爲網絡原因收不到回覆的ack,進入TIME_WAIT狀態,如果server沒有收到ack則可以重傳,server端收到ack後,就知道可以斷開連接了,client端等待2MSL依然沒有收到回覆則證明server端已經正常關閉,client端也可以關閉連接了,至此TCP連接關閉。

發佈了45 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章