TCP三次握手和四次揮手過程

位碼即TCP標誌位

  • S=SYN 發起連接標誌

  • P=PUSH 傳送數據標誌

  • F=FIN 關閉連接標誌

  • R=RESET 異常關閉連接,鏈接重置

  • . 表示沒有任何標誌,表示返回ack

201703281490711840630122.png

第一次握手:

客戶端發送一個TCP的SYN標誌位置1的包,ACK=0,TCP規定SYN=1時不能攜帶數據,當SYN=1而ACK=0時,表明這是一個連接請求報文但要消耗一個序號,因此聲明自己的序號是seq=i。Seq:序號,4字節,範圍爲0^32—1^32,共4284967296,達到時重新開始計算。Clinet進入SYN_SENT狀態,等待Server確認。所以最終客戶端發送的報文中包含SYN=1,ACK=0,seq=i(i爲一個隨機數)。

第二次握手:

服務器發回確認包(ACK)應答。即SYN=1 ACK=1,因爲建立連接,則應在響應報文中使SYN=1和ACK=1。seq=j(產生的隨機包序號),ack=i+1(確認客戶端序號有效)。所以發送給客戶端的包裏面包含:SYN=1,ACK=1,seq=j,ack=i+1,此時服務器進入SYN_RECV狀態。

第三次握手:

客戶端收到返回的包進行確認,檢查ack是否爲i+1(也就是是不是自己第一次發起請求時候產生的隨機序號+1),ACK是否爲1,如果正確則將標誌位ACK置爲1,並將ack=j+1(即在服務器序號的基礎上加1),seq=i+1(也就是最早的seq序號)發送給服務器端,服務器收到後確認seq=i+i,ACK=1,ack=j+1,服務端驗證沒有問題隨建立連接,並開始打開端口爲客戶端發送數據。客戶端服務端進入ESTABLISHED狀態,完成三次握手。

201703291490797310442123.png

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

不管是客戶端還是服務器端都可以調用close之類的函數主動終止一個連接。這裏以客戶端主動斷開連接舉例。

第一次握手

  客戶端調用close函數,主動發送一個FIN報文給服務器端,用來關閉客戶端到服務器的數據傳送,此時客戶端進入TIME_WAIT1狀態。

  FIN報文也可能附加用戶數據。發送了FIN只是表示這端不能繼續發送數據(應用層不能再調用send發送)但是還可以接收數據。

  當調用recv時,如果返回0就表示對端關閉。這個時候通常被關閉端也調用close,然後TCP層發送FIN,繼續完成四次握手。如果被關閉端不調用close,那麼對端就會處於FIN_WAIT_2狀態,而本端則會處於CLOSE_WAIT狀態。

  FIN_WAIT_1狀態實際上是當SOCKET在ESTABLISHED狀態時,它想主動關閉連接,向對方發送了FIN報文,此時該SOCKET即進入到FIN_WAIT_1狀態。而當對方迴應ACK報文後,則進入到FIN_WAIT_2狀態,當然在實際的正常情況下,無論對方何種情況下,都應該馬上回應ACK報文,所以FIN_WAIT_1狀態一般是比較難見到的,而FIN_WAIT_2狀態還有時常常可以用netstat看到。

第二次握手:

   服務器收到這個FIN,它發回一個ACK,確認號爲收到的序號加1,和SYN一樣,一個FIN將佔用一個序號,此時服務器進入CLOSE_WAIT狀態,客戶端進入TIME_WAIT2狀態。

第三次握手:

   當服務器端也沒有要傳送的數據時,服務器關閉與客戶端的連接,發送一個FIN給客戶端A,服務器進入LAST_ACK狀態。

第四次握手:

   客戶端發回ACK報文確認,並將確認號設置爲收到序號加1,服務器收到報文並確認成功,服務器端進入CLOSED狀態,客戶端進入TIME_WAIT(表示收到了對方的FIN報文,併發送出了ACK報文,就等2MSL後即可回到CLOSED可用狀態了。如果FIN_WAIT_1狀態下,收到了對方同時帶FIN標誌和ACK標誌的報文時,可以直接進入到TIME_WAIT狀態,而無須經過FIN_WAIT_2狀態。),等待2MSL--120s-240s(1、確保連接可靠地關閉; 即防止最後一個ACK丟失。2、避免產生套接字混淆(同一個端口對應多個套接字),沒有收到任何回覆,則證明server端已正常關閉,客戶端也就關閉了。

參考:http://www.51niux.com/?id=100


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章