TCP IP三次握手 四次揮手

2021-08-28 04:23:59 字數 1603 閱讀 6510

我們在使用網際網路和別的**進行通訊的時候,都要依賴tcp/ip協議。甚至有時候網不太好,瀏覽器會顯示當前狀態:正在與某某**握手...當網路狀態很好的時候,就會一閃而過。本文將詳細總結筆者在學習三次握手四次揮手時的各個狀態以及過程。

首先,狀態圖如下。

初始時,客戶端和服務端都是closed狀態。這時,客戶端請求連線,作為整個三次握手的開端。

1.客戶端向伺服器端傳送請求連線報文,syn=1,seq序列碼設為x。客戶端的狀態變為syn_sent。在這個報文到達伺服器之前,伺服器的狀態一直是listen,收到報文後狀態變為syn_rcvd。

2.伺服器將向客戶端返回確認報文。將ack設為1,syn=1,seq=y,ack=x+1.

3.客戶端收到伺服器的確認報文。再向伺服器確認一次,ack=1,seq=x+1,ack=y+1.此時兩邊建立連線,狀態變為established。

假如客戶端向伺服器傳送第一次請求,結果網路不好,這個請求在網路節點中停留了很久,也沒有到達伺服器端。客戶端看伺服器端沒有回應就重發了一次(這次網路順暢),正常完成連線後斷開。這時,那個第一次傳送的請求才到達。假設我們只有兩次揮手,那麼伺服器收到這個請求後會直接和客戶端建立連線,但這並不是客戶端的本意。造成了資源的浪費以及不必要的錯誤。

所以加入第三次握手的確認。發生這種情況時,客戶端就不會再給伺服器傳送確認報文,服務端收不到確認報文也就明白了其實客戶端並沒有請求連線。

在某一方認為資料已經傳輸完成後,將會請求斷開連線。此時先請求的作為主動方,另一端為被動方。一般是客戶端請求斷開連線。

1.客戶端發出斷開請求,fin=1,seq=u,狀態變為fin_wait_1。

2.伺服器端收到請求,返回ack=1,seq=v,ack=u+1代表已經收到客戶端的請求。但是此時可能還有沒有傳輸完的資料,需要傳輸完之後再關閉自己的鏈結。從伺服器返回報文到傳輸所有資料完畢並再次向客戶端發出斷開請求之前的這段時間內(close_wait狀態),都在傳輸沒有傳輸完畢的資料。而客戶端在這段等待時間內,處於fin_wait_2狀態。

3.此時所有資料傳輸完成。服務端向客戶端傳送斷開報文,fin=1,seq=w,ack=u+1,並進入last_ack狀態。

4.當客戶端收到斷開報文後,向伺服器確認。ack=1,seq=u+1,ack=w+1.伺服器收到後立即closed,客戶端將進入time_wait狀態。在等待2msl後,斷開連線。四次揮手結束。

time_wait狀態的作用

1.在最後向服務端傳送的ack這一階段,ack可能會丟失。如果沒有time_wait,伺服器端沒有收到確認報文將再次傳送一次斷開報文,此時客戶端由於沒有wait已經斷開,伺服器端也因此不知是否應該關閉。

有了time_wait,伺服器重發後客戶端仍然在2msl(2個報文最大生存週期)內,確保能收到這個重發請求,於是進行重發,並重置2msl的計時器。這個過程直到2msl內沒有再收到重發請求(即伺服器成功斷開)時,自己才會close。

2.和3次握手的第三次原理相同,在2msl時間段內所有在揮手過程中因為網路問題而滯留的報文將全部消亡,這就保證了下次連線不會被干擾。

TCP IP三次握手 四次揮手

一 tcp ip三次握手原理 建立連線協議 三次握手 1 客戶端向伺服器端傳送連線請求包syn syn j 等待伺服器回應 2 伺服器端收到客戶端連線請求包syn syn j 後,將客戶端的請求包syn syn j 放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端 1.向客戶端傳送確認自己收...

TCP IP三次握手四次揮手

tcp三次握手 所謂握手,也就是建立連線,三次過程。三次握手旨在連線到服務端的指定埠,進行通訊。建立乙個tcp連線,需要向客戶端和服務端傳送三個包。其中包含同步序列號和確認號以及tcp視窗大小的資訊交換。一般觸發握手在socket中都是connect 函式觸發的 第一次握手 客戶端傳送tcp請求,s...

TCP IP 三次握手四次揮手

第一次握手 主機a傳送位碼為syn 1,隨機產生seq number 1234567的資料報到伺服器,主機b由syn 1知道,a要求建立聯機 第二次握手 主機b收到請求後要確認聯機資訊,向a傳送ack number 主機a的seq 1 syn 1,ack 1,隨機產生seq 7654321的包 第三...