TCP的三次揮手和四次握手詳解

2021-09-10 07:17:55 字數 1473 閱讀 3366

tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線,與之相反的,採用四次揮手來斷開連線

tcp標誌位有6種標示,即:syn(synchronous建立聯機) 、 ack(acknowledgement 確認) 、 psh(push傳送) 、 fin(finish結束) 、 rst(reset重置) 、 urg(urgent緊急) 、 sequence number(順序號碼) 、 acknowledge number(確認號碼)。

為了準確無誤的將資料傳送到指定ip處,tcp協議採用了三次握手的策略,如下步驟所示:

1、客戶端採用tcp協議將帶有syn標誌的資料報傳送給伺服器,等待伺服器的確認。

2、伺服器端在收到syn的資料報後,必須確認syn,即自己傳送的ack標誌,同時,自己也將會向客戶端傳送乙個syn標誌。

3、客戶端在接收到伺服器短的syn+ack包後,自己會向伺服器傳送ack包,完成三次握手。那麼客戶端和伺服器正式建立了連線,開始傳輸資料。

三次握手的圖如下所示:

四次揮手是用來斷開伺服器和客戶端之間的通訊的,之所以要斷開連線,是因為tcp/ip 協議是要占用埠號的,而計算機的埠卻是有限的,不進行斷開的話,勢必會造成計算機資源的浪費。

1、在整個通訊的過程中,誰先發起請求,誰就是客戶端。

當客戶端的資料傳輸到尾部時,客戶端向伺服器傳送帶有fin標誌的資料報,使其明白自己準備斷開通訊了。

2、因為tcp的通訊是使用全雙工通訊的websocket,所以在斷開連線的時候也應該是雙向的;當伺服器收到帶有fin標誌的資料報時,其必不會直接傳送fin標誌斷開通訊的請求,而是先傳送乙個帶有ack標誌的應答資訊,使客戶端明白伺服器還有資料要進行傳送。

3、當 伺服器的資料傳送完成後,向客戶端傳送帶有fin標誌的資料報,通知客戶端斷開連線。

4、這一次揮手是我覺得四次揮手中設計的最巧妙的一次。

當客戶端收到fin後,擔心網路上某些不可控制的因素導致伺服器不知道他要斷開連線,會傳送ack進行確認,同時把自己設定成time_wait狀態並啟動定時器,**在tcp的定時器到達後客戶端並沒有接收到請求,會重新傳送;當伺服器收到請求後就斷開連線;當客戶端等待2mls(兩倍報文最大生存時間)後,沒有收到請求重傳的請求後,客戶端這邊就斷開連線,**整個tcp通訊就結束了。

四次揮手的圖如下所示:

解:三次握手中的每一次都是必須的。如果是兩次握手,在第二次結束後,伺服器並不能保證客戶端已經收到了第二次的請求,如此一來的話,伺服器會一直儲存著這個通訊過程,因為tcp通訊都是要占用埠的,造成了一定的資源浪費。所以,就一定要讓客戶端來傳送ack的確認請求。

解:四次揮手不能像三次握手一樣,三次握手可以將ack+syn 一起傳送,ack用於確認資訊,syn卻是用來建立聯機的;四次揮手中ack是不能和fin一起傳送,ack只是告訴客戶端確認我收到了,等我將資料傳送完畢之後會向其傳送fin的標誌,所以四次揮手是不能夠改變的。

以上就是我對三次握手和四次揮手的理解,歡迎我們一起來討論。

原文:

TCP三次握手 四次揮手詳解

1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...

TCP三次握手 四次揮手詳解

1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...

TCP三次握手 四次揮手詳解

1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...