TCP協議中的三次握手和四次揮手

2021-07-22 13:16:20 字數 1385 閱讀 3280

三次握手:

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

(2)第二次握手:伺服器b收到syn包,必須確認客戶a的syn,同時自己也傳送乙個syn包,即syn+ack包,此時伺服器進入syn_recv狀態。

(3)第三次握手:客戶端a收到伺服器b的syn+ack包,向伺服器b傳送確認包ack,此包傳送完畢,客戶端a和伺服器端b進入established狀態,完成三次握手。

四次揮手:所謂四次揮手,即終止tcp連線。斷開乙個tcp連線時,需要客戶端和服務端總共傳送4個包確認連線的斷開。由於tcp連線是全雙工的,因此,每個方向必須要單獨進行關閉,這一原則是當一方完成資料傳送任務後,傳送乙個fin來終止這一方向的連線,收到乙個fin只是意味著這一方向上沒有資料流動啦,既不會再收到資料,但是在這個tcp連線上仍然能夠傳送資料,直到這一方向也傳送了fin。首先進行關閉的一方將執行主動關閉,而另一方被動關閉。

(1)第一次揮手:客戶端傳送乙個fin,用來關閉client到server的資料傳送,client進入fin_wait_1狀態。

(2)第二次揮手:server收到fin後,傳送乙個ack給client,確認序號為收到序號+1,server進入close_wait狀態。

(3)第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態。

(4)第四次揮手:client收到fin後,client進入time_wait狀態,接著傳送乙個ack給server,確認序號為序號+1,server進入closed狀態,完成四次揮手。

listen:偵聽來自遠方的tcp埠的連線請求。

syn_sent:在傳送連線請求後等待匹配的連線請求。

syn_received:在收到和傳送乙個連線請求後等待對連線請求的確認。

established:代表乙個開啟的連線,資料可以傳送給使用者。

客戶端tcp狀態遷移:closed-->syn_sent-->established-->fin_wait_1-->fin_wait_2-->time_wait-->closed

伺服器tcp狀態遷移:closed-->listen-->syn_recv-->established-->close_wait-->last_ack-->closed

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

因為無法保證客戶端最後傳送的ack報文一定會被對方收到,也就是對方處於last_ack狀態下的socket可能會因為超時未收到ack報文,而重發fin報文。

問題2:為什麼連線的時候是三次握手,關閉時候卻是四次握手?

因為伺服器端收到客戶端的syn連線請求報文後,把ack和syn放在乙個報文裡傳送給客戶端。其中ack報文用來應答,syn報文用來同步的。

TCP三次握手和四次揮

一 tcp報文格式 在了解三次握手和四次揮手之前,首先要知道tcp報文內部包含了哪些東西。報文主要段的含義 序號 seq 用來標記資料段的順序,確保tcp傳輸有序。ack 確認 確認序號標誌,ack 1表示確認號字段有效,ack 0表示確認序號無效。syn 同步 連線請求序號標誌,用於建立連線。sy...

三次握手和四次揮手 TCP三次握手和四次揮手的理解

相比較於udp傳輸協議,tcp傳輸協議被認為是安全可靠的,這是由於tcp協議的三次握手和四次揮手保證了資料傳輸的安全性。tcp報文格式簡介 要了解tcp協議的三次握手和四次揮手,需要先了解在tcp協議中請求和響應的資料報報文格式。在報文中有幾個值得注意的字段 1 序號 seq序號,佔32位,用來標識...

HTTP協議簡介及TCP三次握手和四次揮手

一 tcp ip協議介紹 tcp ip協議是分層的,從底層至應用層分別為 物理層,鏈路層,網路層,傳輸層和應用層 從應用層至物理層,資料是一層層封裝,封裝的方式一般都是在原有的資料的前面加乙個資料控制頭,資料封裝格式如下 其中,對於tcp傳輸協議,客戶端在與伺服器建立連線前需要經過三次握手,過程如下...