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 ...