三次握手你好4次揮手拜拜

2021-08-14 09:05:04 字數 2417 閱讀 3610

tcp連線是通過三次握手來連線的。

當客戶端向伺服器發起連線請求時,客戶端會傳送同步序列標號syn到伺服器,在這裡我們設syn為m,等待伺服器確認,這時客戶端的狀態為syn_sent。

當伺服器收到客戶端傳送的syn後,伺服器要做的是確認客戶端傳送過來的syn,在這裡伺服器傳送確認包ack,這裡的ack為m+1,意思是說「我收到了你傳送的syn了」,同時,伺服器也會向客戶端傳送乙個syn包,這裡我們設syn為n。這時伺服器的狀態為syn_recv。

一句話,伺服器端傳送synack兩個包。

客戶端收到伺服器傳送的synack包後,需向伺服器傳送確認包ack,「我也收到你傳送的syn了,我這就給你發個確認過去,然後我們即能合體了」,這裡的ack為n+1,傳送完畢後,客戶端和伺服器的狀態為establish,即tcp連線成功。

在三次握手中,客戶端和伺服器端都傳送兩個包synack,只不過伺服器端的兩個包是一次性發過來的,客戶端的兩個包是分兩次傳送的。

三次握手示意圖如下(純手繪,見諒見諒):

當a端和b端要斷開連線時,需要四次握手,這裡稱為四次揮手。

斷開連線請求可以由客戶端發出,也可以由伺服器端發出,在這裡我們稱a端向b端請求斷開連線。

a端向b端請求斷開連線時會向b端傳送乙個帶有fin標記的報文段,這裡的finfinish的意思。

b端收到a傳送的fin後,b段現在可能現在還有資料沒有傳完,所以b端並不會馬上向a端傳送fin,而是先傳送乙個確認序號ack,意思是說「你發的斷開連線請求我收到了,但是我現在還有資料沒有發完,請稍等一下唄」。

當b端的事情忙完了,那麼此時b端就可以斷開連線了,此時b端向a端傳送fin序號,意思是這次可以斷開連線了。

a端收到b端傳送的fin後,會向b端傳送確認ack,然後經過兩個msl時長後斷開連線。

msl是maximum segment lifetime,最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。
四次揮手示意圖如下(純手繪,見諒見諒):

tcp連線時是三次握手,那麼兩次握手可行嗎?

在《計算機網路》中是這樣解釋的:已失效的連線請求報文段」的產生在這樣一種情況下:client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是乙個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用「三次握手」,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送ack包。這樣就會白白浪費資源。

而經過三次握手,客戶端和伺服器都有應有答,這樣可以確保tcp正確連線。

在tcp連線中,伺服器端的synack向客戶端傳送是一次性傳送的,而在斷開連線的過程中,b端向a端傳送的ackfin是是分兩次傳送的。因為在b端接收到a端的fin後,b端可能還有資料要傳輸,所以先傳送ack,等b端處理完自己的事情後就可以傳送fin斷開連線了。

前文說到

msl是maximum segment lifetime,最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。
假定網路不可靠,那麼第四次傳送的ack可能丟失,即b端無法收到這個ack,如果b端收不到這個確認ack,b端會定時向a端重**送fin,直到b端收到a的確認ack。所以這個2msl就是用來處理這個可能丟失的ack的。

tcp的4次揮手 三次握手

1.tcp短連線 模擬一種tcp短連線的情況 1.client 向 server 發起連線請求 2.server 接到請求,雙 建 連線 3.client 向 server 傳送訊息 4.server 回應 client 5.一次讀寫完成,此時雙方任何乙個都可以發起 close 操作 在步驟5中,一...

tcp的三次握手和4次揮手

第一次握手 host1傳送乙個tcp標誌位syn 1 ack 0的資料報給host2,並隨機會產生乙個sequence number 3233.當host2接收到這個資料後,host2由syn 1可知客戶端是想要建立連線 第二次握手 host2要對客戶端的聯機請求進行確認,向host1傳送應答號ac...

TCP協議的三次握手 4次揮手

tcp的連線建立是乙個三次握手過程,目的是為了通訊雙方確認開始序號,以便後續通訊的有序進行。主要步驟如下 連線開始時,連線建立方 client 傳送syn包,幷包含了自己的初始序號a 連線接受方 server 收到syn包以後會回覆乙個syn ack包,其中包含了對上乙個a包的回應資訊ack,回應的...