網路協議 TCP的三次握手

2021-10-25 07:49:36 字數 2502 閱讀 7950

2 .握手失敗

3.三次握手流程圖:

3.那麼為什麼要建立三次握手連線?

4.雙方同時發起握手過程是什麼樣?

5.握手過程一方突然掛了,另一方如何斷開?

那為啥要握手呢,不握手不行麼,這樣就可以有效隔離病毒了,…噢,好吧,我要全民免疫。。。,必須的握手,因為tcp區別於udp的最明顯的就是他的有鏈結性,所以,在他倆通訊的的過程中,必須先通過交換資料的方式建立鏈結,這樣才能通訊。

客戶端向服務端傳送連線請求

服務端收到請求後向客戶端傳送接受連線請求訊息

客戶端收到服務端的接受連線訊息後向服務端傳送確認連線訊息

那三次握手客戶端和服務端都幹了什麼,具體攜帶怎樣的訊息體和狀態嗎,這裡就用到上節講到的資料報結構tcp 資料段 . 幀

在這之前先來了解下tcp連線的狀態:

客戶端向服務端傳送第一次連線請求一之前,是出於closed 狀態,這時表示兩端都沒有在活動或者會話,是處於關閉狀態的,當客戶端向服務端傳送當syn=1,ack=0(syn 表示訊息型別為請求連線,且值為1時有效)訊息後,處於syn send狀態,,表示已經傳送乙個連線請求,正在等待對方確認,這也就是第一次握手。

在服務端未收到訊息前,服務端處於listen 狀態,表示等待新的傳輸接入,當收到客戶端的syn ==1 連線訊息後,服務端會傳送乙個 syn==1,ack==1(ack置1表示是乙個確認資料段) ,的接受連線訊息到客戶端,這時服務端處於syn rcvd 狀態,這是第二次握手。
當客戶端收到服務端的syn 和 ack 後,會向服務端傳送乙個ack 資料段,並進入到 established 狀態,當服務端收到訊息後也進入到established 狀態,此時雙方可以進行資料傳輸了, 這是tcp的第三次握手。
服務端收到來自客戶端的ack 確認資料段後,完成整個tcp 傳輸的三次握手過程,也進入established 狀態,此時雙方可進行自由的資料傳輸。

但是,凡事都是有意外的,萬一握手失敗或者拒絕握手了,那該如何呢?

1.伺服器不想建立連線 。

1.服務端向客戶端傳送乙個fin 資料段(fin 欄位置1),然後進入到fin wait 1 狀態,等待客戶端確認

2.當客戶端收到伺服器發來的fin 資料段後,向伺服器傳送以乙個ack 確認資料,進入closing狀態,表示雙方同時嘗試關閉連線。

3.服務端收到來自客戶端的確認資料ack 資料段後,進入到 timed wait 狀態。

4.在超時後雙方關閉連線,超時時間一般是2msl( msl最大報文生存時間)

windows : msl = 2 min

linux(ubuntu, centos) : msl = 60s

unix : msl = 30s

建議設定 2min

這裡如果你不了解tcp包的組成,可能會被大寫的syn ack 和 小寫的 ack 搞暈,建議先了解下包結構。大寫的表示標誌位,值為1 表示該位有效,比如 ack =1 表示確認號有效,那麼ack 小寫的確認號才有效。

首先我們站在人與人交流的角度來說,你和別人交流溝通肯定有乙個先發話,然後等到對方響應,這才算乙個溝通的完整過程,通訊也是一樣的,至少需要兩次握手(一來一回),才算乙個完整的過程,這樣可以最大限度的節省交流成本,或者說節省資源,且減少協議的複雜程度.但是網路畢竟是有各種異常情況,可能阻塞,可能丟失。

比如說:a 向b 傳送連線請求,但是a 傳送的第一包資料後在網路的某個節點被滯留了,這時a又向b傳送了一條資料,並且a, b 連線完成並且順利的關閉了鏈結。 但是這時 傳送的第一包syn 資料傳送到了b , b向a 傳送 確認連線請求。 假設握手機制是兩次,那麼這時鏈結就會建立,b 一直在等a 傳送訊息,但實際a 不會再發訊息了,這樣就極大的浪費了b 的資源,假如是三次握手,就不會出現型別情況,b 傳送資料報給a ,a不會傳送確認訊息給b ,b也不會建立連線,所以說三次握手,是一種非常有效的握手機制。多一次浪費,少一次會出先資源浪費。

這種連線方式比較極端,但是也有可能發生

在syn 過程中假設 客戶端a傳送給服務端b的syn 包客戶端收到後 ,b 傳送syn 確認訊息給a ,但是a 在傳送完訊息後就已經掛了,此時這個連線既沒建立起來,也不能算失敗。這就需要乙個超時時間讓server將這個連線斷開,否則這個連線就會一直占用server的syn連線佇列中的乙個位置,大量這樣的連線就會將server的syn連線佇列耗盡,讓正常的連線無法得到處理,linux下缺省會進行5次重發syn-ack包,重試的間隔時間從1s開始,下次的重試間隔時間是前一次的雙倍,從1秒開始, 2s 4s 8s 16s 32s 五次總共需要63 s ,如果五次都沒有得到響應,就關閉連線,不再傳送。

參考:1.

2.《深入理解計算機網路》

TCP三次握手協議

摘自 syn攻擊原理以及防範技術 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...

TCP三次握手協議

在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即...

TCP協議三次握手

第一次握手 客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即syn ack包,此時伺服器進入 syn recv 狀態 第三次握手 客戶端 收到伺服器的...