TCP 3次握手及4次揮手

2021-08-21 10:26:54 字數 1342 閱讀 3050

3次握手:

tcp協議建立三次握手的過程如下:

第一次握手:客戶端向伺服器傳送syn段(syn=1),請求建立新連線

第二次握手:伺服器收到syn段後,向客戶端傳送的synack段(syn=1,ack=1)進行確認,同意建立新連線

第三次握手:客戶端收到伺服器的synack段後,向伺服器傳送ack確認段(ack=1),並確認連線建立成功;伺服器收到ack確認段後,也確認連線建立成功

原因:1)為了確保連線建立的雙方彼此完全清楚對方狀態(如初始序列號和接收視窗大小),從而保證可靠、穩定地建立連線

2)通過三次握手建立連線還可以有效地預防過期、失效的連線請求到達後,導致無效連線的建立

3)兩次握手建立連線是不可行的,因為網路存在資料丟失;第二次握手控制段可能丟失,這樣主動發起連線的一方由於沒有收到第二次握手控制段,則無法建立連線,而接受連線建立的一方則認為連線已經建立,從而出現無效鏈結

有種情況就是客戶端發起了請求,但是過了超時時間又重發的連線請求,而第乙個請求並沒有丟失,服務端收到syn後,傳送了ack,確認了連線,客戶端收到ack也確認了連線。

這時第二次傳送的連線請求阻塞在網路上,但沒有丟失,並最終在客戶端斷開連線後,到達了伺服器,此時伺服器會理解為新的連線請求,並傳送ack確認連線建立

這一連線並不屬於有效連線,屬於半連線,但是伺服器已經為該連線分配了資源;這類半連線的存在會消耗伺服器的資源,降低伺服器效能,甚至導致拒絕服務;

4次揮手:

tcp協議斷開連線的四次揮手過程:

第一次揮手:客戶向伺服器傳送fin段(fin=1),請求釋放連線,等待伺服器確認

第二次揮手:伺服器向客戶傳送ack段(ack=1)

第三次揮手:伺服器向客戶傳送fin段(fin=1),請求釋放連線,等待客戶確認

第四次揮手:客戶向伺服器傳送ack段,並等待2msl時間後關閉連線;伺服器收到ack段後馬上關閉連線

msl是最大段生存時間,是任何tcp段被丟棄前在網路內「存活」的最長時間

tcp協議規範規定的msl是2min,但實際系統在實現tcp時設定的時間有所不同

客戶在time_wait狀態之所以要等待2msl時間才真正釋放連線,一方面是為了以防最後一次ack段丟失,會導致伺服器重發fin,這樣在客戶端真正釋放連線前還可以再次傳送ack段,盡可能確保伺服器盡快釋放連線;另一方面是為了保證在2msl期間,該連線的本地端點位址(ip+port)不被再次使用,避免可能的較早連線請求到達,被誤認為時新連線請求

TCP3次握手與4次揮手

3次握手過程狀態 listen 這個也是非常容易理解的乙個狀態,表示伺服器端的某個socket處於監聽狀態,可以接受連線了。syn sent 當客戶端socket執行connect連線時,它首先傳送syn報文,因此也隨即它會進入到了syn sent狀態,並等待服務端的傳送三次握手中的第2個報文。sy...

TCP 3次握手4次揮手 複習

學習自 握手syn syn ack ack未連線佇列 服務端維護乙個未連線佇列,當客戶端發來ack時,伺服器會入佇列乙個相應的標識,那個標識是已接收ack狀態,然後會發syn ack,當客戶端再次傳送ack後,出佇列那個相應的標識,正式建立連線 為何要3次握手?假如客戶端傳送syn,但是莫名滯留了,...

TCP 3次握手和4次揮手

3次握手 3次握手指的是tcp 建立連線 階段 1.client service syn sequence number a 2.client service syn ack sequence number b acknowledge number a 1 3.client service ack ...