tcp ip三次握手與四次揮手

2021-09-26 05:03:40 字數 1784 閱讀 6443

原文

所謂三次握手(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=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之間可以開始傳輸資料了。

第三次的握手是為了防止已經失效的連線請求報文段突然又傳送到了服務端,從而產生錯誤。這個已經失效的連線報文段是怎麼來的? 因為客戶端在傳送了syn資料報後可能又這種情況,因為當時網路擁塞,所以過了超時重傳的等待時間後客戶端沒有收到服務端的確認,所以它又傳送了第二次syn報文段,此時服務端傳送過來了syn應答報文段。但是可能過了一會,剛剛處於擁塞環境的syn報文段又到達了服務端,這時服務端會認為客戶端想和自己建立第二次連線,於是又向客戶端傳送了syn應答報文段,而此時客戶端可能已經完成了資料傳送並釋放了和服務端的連線,它的狀態會變為closed,從而導致永遠無法收到服務端發來的syn報文段,從而使服務端一直再等待客戶端發來資料,這樣會浪費許多服務端的資源。

即終止tcp連線,就是指斷開乙個tcp連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開。在socket程式設計中,這一過程由客戶端或服務端任一方執行close來觸發。

由於tcp連線時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成資料傳送任務後,傳送乙個fin來終止這一方向的連線,收到乙個fin只是意味著這一方向上沒有資料流動了,即不會再收到資料了,但是在這個tcp連線上仍然能夠傳送資料,直到這一方向也傳送了fin。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。

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

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

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

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

為什麼要有四次揮手相比於為什麼要有三次握手應該不難理解,四次揮手分別是各自互相傳送fin報文,以及傳送對對方fin報文的確認報文,值得一提的是為什麼在最後一次揮手後要等待2msl的時間?

這樣做是為了保證a的最後一次揮手(ack報文段)能夠到達b。出了last-ack狀態的b如果收不到a的ack欄位,那麼他會在重傳一次fin+ack欄位,a收到後會重傳一次確認,重新啟動時間等待計時器(2msl),如果a不等待2msl,如果最後一次確認沒有傳到b, 那麼b的重傳a就再也收不到了,那麼b就會一直重傳,並永遠無法釋放連線。

TCP IP三次握手 四次揮手

一 tcp ip三次握手原理 建立連線協議 三次握手 1 客戶端向伺服器端傳送連線請求包syn syn j 等待伺服器回應 2 伺服器端收到客戶端連線請求包syn syn j 後,將客戶端的請求包syn syn j 放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端 1.向客戶端傳送確認自己收...

TCP IP三次握手 四次揮手

我們在使用網際網路和別的 進行通訊的時候,都要依賴tcp ip協議。甚至有時候網不太好,瀏覽器會顯示當前狀態 正在與某某 握手.當網路狀態很好的時候,就會一閃而過。本文將詳細總結筆者在學習三次握手四次揮手時的各個狀態以及過程。首先,狀態圖如下。初始時,客戶端和服務端都是closed狀態。這時,客戶端...

TCP IP三次握手四次揮手

tcp三次握手 所謂握手,也就是建立連線,三次過程。三次握手旨在連線到服務端的指定埠,進行通訊。建立乙個tcp連線,需要向客戶端和服務端傳送三個包。其中包含同步序列號和確認號以及tcp視窗大小的資訊交換。一般觸發握手在socket中都是connect 函式觸發的 第一次握手 客戶端傳送tcp請求,s...