TCP IP 三次握手四次分手

2021-06-06 13:32:45 字數 1276 閱讀 4883

在tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖1所示。

(1)第一次握手:建立連線時,客戶端a傳送syn包(syn=j)到伺服器b,並進入syn_send狀態,等待伺服器b確認。 【a向b請求連線】

(2)第二次握手:伺服器b收到syn包,必須確認客戶a的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器b進入syn_recv狀態。 【b回應a:好的,你來吧】

(3)第三次握手:客戶端a收到伺服器b的syn+ack包,向伺服器b傳送確認包ack(ack=k+1),此包傳送完畢,客戶端a和伺服器b進入established狀態,完成三次握手。 【a回應b:好的,我來也】

完成三次握手,客戶端與伺服器開始傳送資料。 

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

(1)客戶端a傳送乙個fin,用來關閉客戶a到伺服器b的資料傳送。【a對b說:我傳完了】 

(2)伺服器b收到這個fin,它發回乙個ack,確認序號為收到的序號加1(報文段5)。和syn一樣,乙個fin將占用乙個序號。 【b回應a:好的】

(3)伺服器b關閉與客戶端a的連線,傳送乙個fin給客戶端a。 【b對a說:我傳完了too】

(4)客戶端a發回ack報文確認,並將確認序號設定為收到序號加1。 【a回應b:好的,我走了】

tcp採用四次揮手關閉連線如圖2所示。 

1.為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢? 

2.為什麼time_wait狀態還需要等2msl後才能返回到closed狀態? 

這是因為雖然雙方都同意關閉連線了,而且握手的4個報文也都協調和傳送完畢,按理可以直接回到closed狀態(就好比從syn_send狀態到 establish狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後傳送的ack報文會一定被對方收到,因此對方處於 last_ack狀態下的socket可能會因為超時未收到ack報文,而重發fin報文,所以這個time_wait狀態的作用就是用來重發可能丟失的 ack報文

3. 控制資訊字段

syn: 同步序列編號(synchronize sequence numbers) 

ack: 確認字段

fin: 傳送方已經傳完資料

psh: 推送功能

rst: 重置連線

urg: 緊急指標

TCP IP三次握手,四次分手

tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種標示 syn synchronous建立聯機 ack acknowledgement 確認 psh push傳送 fin finish結束 rst reset重置 urg urgent緊急...

TCP三次握手,四次分手

tcp報文重要字段 1 序號 seq序號,佔32位 2 確認號 ack序號,32位,只有標誌位ack位1時,確認號才有效。ack seq 1 3 標誌位 共六個 urg 緊急指標,告訴接收tcp模組緊要指標域指著緊要資料。ack 置1時表示確認號 為合法,為0的時候表示資料段不包含確認資訊,確認號被...

三次握手與四次分手

一 三次握手原理 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 客戶端問伺服器 你愛我嗎?第二次握手 伺服器收到syn包,必須確認客戶的syn...