TCP之三次握手和四次揮手

2022-09-03 16:36:12 字數 2225 閱讀 6645

所謂三次握手(three-way handshake)即建立tcp連線,是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket程式設計中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示:

一開始客戶端和服務端都是關閉狀態,但是在某個時刻,客戶端需要和服務端進行通訊,此時雙方都會各自準備好埠,伺服器段的埠會處於監聽狀態,等待客戶端的連線。

客戶端可會知道自己的埠號,和目的程序的埠號,這樣才能發起請求。

(1)第一次握手:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_sent狀態,等待server確認。

(2)第二次握手:server收到資料報後由標誌位syn=1知道client請求建立連線,server將標誌位syn和ack都置為1,ack (number )=j+1,隨機產生乙個值seq=k,並將該資料報傳送給client以確認連線請求,server進入syn_rcvd狀態。

(3)第三次握手:client收到確認後,檢查ack是否為j+1,ack是否為1,如果正確則將標誌位ack置為1,ack=k+1,並將該資料報傳送給server,server檢查ack是否為k+1,ack是否為1,如果正確則連線建立成功,client和server進入established狀態,完成三次握手,隨後client與server之間可以開始傳輸資料了。

如果有人不理解的話 ,我整理了幾句話,可以簡單的來說明三次握手:

1 ) 主機a通過向主機b 傳送乙個含有同步序列號的標誌位的資料段給主機b ,向主機b 請求建立連線,通過這個資料段,主機a告訴主機b 兩件事:我想要和你通訊;你可以用哪個序列號作為起始資料段來回應我

2 ) 主機b 收到主機a的請求後,用乙個帶有確認應答(ack)和同步序列號(syn)標誌位的資料段響應主機a,也告訴主機a兩件事:我已經收到你的請求了,你可以傳輸資料了;你要用序列號作為起始資料段來回應我

3 )主機a收到這個資料段後,再傳送乙個確認應答(ack)的資料段,確認已收到主機b 的資料段:"我已收到回覆,我現在要開始傳輸實際資料

3次握手就完成了,主機a和主機b 就可以傳輸資料

3次握手的特點:

通訊完成後,連線就會被釋放,通過四次揮手機制來完成這個事情

第二次揮手:伺服器接收到客戶端發來的釋放連線請求後,狀態變為close_wait,然後傳送確認報文給客戶端,告訴他我接收到了你的請求。為什麼變為close_wait,原因是是客戶端傳送的釋放連線請求,

可能自己這端還有資料沒有傳送完呢,所以這個時候整個tcp連線的狀態就變為了半關閉狀態。伺服器端還能傳送資料,並且客戶端也能接收資料,但是客戶端不能在傳送資料了,只能夠傳送確認報文。

客戶端接到伺服器的確認報文後,就進入了fin_wait_2狀態。也可以說這是等待伺服器釋放連線狀態。

第三次揮手:伺服器端所有的資料度傳送完了,認為可以關閉連線了,狀態變為被動關閉,所以向客戶端傳送釋放連線報文,發完之後自己變為last_wait狀態,也就是等待客戶端確認狀態

第四次揮手:客戶端接到釋放連線報文後,傳送乙個確認報文,然後自己變為time_wait,而不是立馬關閉,因為客戶端傳送的確認報文可能會丟失,丟失的話伺服器就會重傳乙個fin,也就是釋放連線報文,

這個時候客戶端必須還沒關閉。 當伺服器接受到確認報文後,伺服器就進入close狀態,也就是關閉了。但是由於上面說的這個原因,客戶端必須等待一定的時間才能夠進入close狀態

如果有人不理解的話 ,我整理了幾句話,可以簡單的來說明三次握手:

1 ) 當主機a完成資料傳輸後,將控制位fin置1,提出停止tcp連線的請求

2 ) 主機b收到fin後對其作出響應,確認這一方向上的tcp連線將關閉,將ack置1

3 ) 由b 端再提出反方向的關閉請求,將fin置1

4 ) 主機a對主機b的請求進行確認,將ack置1,雙方向的關閉結束.

由tcp的三次握手和四次斷開可以看出,tcp使用面向連線的通訊方式,大大提高了資料通訊的可靠性,使傳送資料端

和接收端在資料正式傳輸前就有了互動,為資料正式傳輸打下了可靠的基礎

TCP之三次握手四次揮手

tcp提供一種面向連線的,可靠的位元組流服務。tcp首部的資料格式如下。如果不計任選字段,通常是20個位元組 目的埠 埠指明接收方計算機上的應用程式介面。tcp報頭中的源埠號和目的埠號同ip資料報中的源ip與目的ip唯一確定一條tcp連線。控制位 urg ack psh rst syn fin,共6...

TCP之三次握手四次揮手

tcp提供一種面向連線的,可靠的位元組流服務。tcp首部的資料格式如下。如果不計任選字段,通常是20個位元組 目的埠 埠指明接收方計算機上的應用程式介面。tcp報頭中的源埠號和目的埠號同ip資料報中的源ip與目的ip唯一確定一條tcp連線。控制位 urg ack psh rst syn fin,共6...

TCP協議之三次握手四次揮手

tcp協議是可靠的傳輸 表現在2個方面 1.是保證資料報可以按照傳送的順序到達 2.另外一方面是保證資料報一定程度的正確性 後文詳解為什麼是一定程度上的正確性 其可靠性的實現則基於2點技術,一點是具有乙個crc校驗,這樣如果資料報中的某些資料出現錯誤可以通過該校驗和發現 另外一點是每個資料報都有乙個...