三次握手 四次揮手

2021-08-30 20:51:19 字數 1991 閱讀 7346

在tcp/ip

協議中,tcp

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

(1)第一次握手:建立連線時,客戶端a

傳送syn

包(syn=j

)到伺服器b

,並進入syn_send

狀態,等待伺服器b

確認。

(2)第二次握手:伺服器b

收到syn

包,必須確認客戶a

的syn

(ack=j+1

),同時自己也傳送乙個syn

包(syn=k

),即syn+ack

包,此時伺服器b

進入syn_recv

狀態。

(3)第三次握手:客戶端a

收到伺服器b

的syn

+ack

包,向伺服器b

傳送確認包ack

(ack=k+1

),此包傳送完畢,客戶端a

和伺服器b

進入established

狀態,完成三次握手。

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

圖1tcp

三次握手建立連線

由於tcp

連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個fin

來終止這個方向的連線。收到乙個fin

只意味著這一方向上沒有資料流動,乙個tcp

連線在收到乙個fin

後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

(1)客戶端a

傳送乙個fin

,用來關閉客戶a

到伺服器b

的資料傳送(報文段4)。

(2)伺服器b

收到這個fin

,它發回乙個ack

,確認序號為收到的序號加1

(報文段5

)。和syn

一樣,乙個fin

將占用乙個序號。

(3)伺服器b

關閉與客戶端a

的連線,傳送乙個fin

給客戶端a

(報文段6)。

(4)客戶端a

發回ack

報文確認,並將確認序號設定為收到序號加1

(報文段7)。

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

所示。

圖2 tcp

四次揮手關閉連線

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

這是因為服務端的listen

狀態下的socket

當收到syn

報文的建連請求後,它可以把ack

和syn

(ack

起應答作用,而syn

起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin

報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉socket,

也即你可能還需要傳送一些資料給對方之後,再傳送fin

報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack

報文和fin

報文多數情況下都是分開傳送的。 2

.為什麼time_wait

狀態還需要等2msl

後才能返回到closed

狀態?

這是因為雖然雙方都同意關閉連線了,而且握手的4

個報文也都協調和傳送完畢,按理可以直接回到closed

狀態(就好比從syn_send

狀態到establish

狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後傳送的ack

報文會一定被對方收到,因此對方處於last_ack

狀態下的socket

可能會因為超時未收到ack

報文,而重發fin

報文,所以這個time_wait

狀態的作用就是用來重發可能丟失的ack

報文。

三次握手 四次揮手

1.tcp連線的建立 1 首先是伺服器初始化的過程,從 closed 關閉 狀態開始通過順序呼叫 socket bind listen 和accept 原語建立 socket 套接字,進入 listen 監聽 狀態,等待客戶端的 tcp傳輸連線請求。2 客戶端最開始也是從 closed 狀態開始呼叫...

三次握手,四次揮手

三次握手 three times handshake three way handshake 所謂的 三次握手 即對每次傳送的 資料量是怎樣跟蹤進行協商使 資料段的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。為了提供可靠的傳送,tcp在傳送...

三次握手四次揮手

三次握手與四次揮手分別對應tcp連線建立過程與斷開過程,先上tcp報文格式 三次握手過程 問題1 為什麼要三次握手?答 三次握手的目的是建立可靠的通訊通道,說到通訊,簡單來說就是資料的傳送與接收,而三次握手最主要的目的就是雙方確認自己與對方的傳送與接收機能正常。第一次握手 client什麼都不能確認...