TCP的三次握手和四次揮手

2021-08-28 05:28:12 字數 1471 閱讀 1206

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

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

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

完成三次握手後,伺服器和客戶端開始互傳資料。

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

(1)客戶端傳送乙個fin,用來關閉客戶端到伺服器的資料傳送。

(2)伺服器收到這個fin,它發回乙個ack,確認序號為收到的序號加1。和syn一樣,乙個fin將占用乙個序號。

(3)伺服器關閉與客戶端的連線,傳送乙個fin給客戶端。

(4)客戶端發回ack報文確認,並將確認序號設定為收到序號加1。

簡單說來是 「先關讀,後關寫」,一共需要四個階段。以客戶機發起關閉連線為例:

1.伺服器讀通道關閉

2.客戶機寫信道關閉

3.客戶機讀通道關閉

4.伺服器寫信道關閉

關閉行為是在發起方資料傳送完畢之後,給對方發出乙個fin(finish)資料段。直到接收到對方傳送的fin,且對方收到了接收確認ack之後,雙方的資料通訊完全結束,過程中每次接收都需要返回確認資料段ack。

詳細過程:

第一階段客戶機傳送完資料之後,向伺服器傳送乙個fin資料段,序列號為i

1.伺服器收到fin(i)後,返回確認段ack,序列號為i+1關閉伺服器讀通道

2.客戶機收到ack(i+1)後,關閉客戶機寫信道

(此時,客戶機仍能通過讀通道讀取伺服器的資料,伺服器仍能通過寫信道寫資料)

第二階段伺服器傳送完資料之後,向客戶機傳送乙個fin資料段,序列號為j;

3.客戶機收到fin(j)後,返回確認段ack,序列號為j+1關閉客戶機讀通道

4.伺服器收到ack(j+1)後,關閉伺服器寫信道

這是標準的tcp關閉兩個階段,伺服器和客戶機都可以發起關閉,完全對稱。

tcp 四次揮手 TCP的三次握手和四次揮手

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

TCP三次握手和四次揮手

一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...

TCP三次握手和四次揮手

三次握手 四次揮手 需四次揮手原因 由於tcp的半關閉特性,tcp連線時雙全工 即資料在兩個方向上能同時傳遞 因此,每個方向必須單獨的進行關閉。這個原則就是 當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向上的連線。當一端收到乙個fin後,它必須通知應用層另一端已經終止了那個方向的資料傳...