TCP三次握手四次揮手詳解

2021-10-07 09:42:37 字數 2246 閱讀 9380

要了解tcp鏈結過程,那麼就應該先了解下到底什麼是tcp協議

tcp(transmission control protocol) 傳輸控制協議:是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由ietf的rfc793定義。tcp旨在適應支援多網路應用分層協議層次結構。連線到不同但互連的到計算機通訊網路的主計算機中的成對程序之間依靠tcp提供可靠的通訊服務。tcp假設它可以從較低階別的協議獲得簡單的,可能不可靠的資料服務。原則上tcp應該能夠在從硬線連線到分組交換或電路交換網路的各種通訊系統之上操作。

tcp將使用者資料打包成報文段,它傳送資料時啟動乙個定時器,另一端收到資料進行確認,對失序的資料重新排序,丟棄重複的資料。tcp提供一種面向連線的可靠的位元組流服務,面向連線意味著兩個使用tcp的應用(b/s)在彼此交換資料之前,必須建立tcp連線,只有兩方都建立了tcp連線之後才能通訊

tcp的可靠性來自:

ip協議

ip是面向無連線的、無狀態的;沒有額外的機制保證傳送的包是否有序到達。ip首先規定出ip位址格式,改位址相當於邏輯意義上進行了網段的劃分,給每台計算機額外設定了乙個唯一的詳細的位址。既然鏈路層可以通過唯一的mac位址找到機器,為什麼還需要通過唯一的ip位址再來標識呢?簡單說,在世界範圍內,不可能通過廣播的方式,從數以萬計的計算機找到目標mac位址的計算機而不超時.

好了,在了解了tcp和ip到底是什麼了之後,那麼就開始深入了解tcp的三次握手和四次揮手

三次握手

首先我們要了解三次握手中的一些重要標誌位

syn(synchronize sequence numbers): 用作建立連線時的同步訊號

ack(acknowledgement):用於對接收到的資料進行確認,所確認的資料由序列號表示.

fin(finish):表示後面沒有資料需要傳送了,這就意味著所建立的連線需要關閉了.

三次握手的步驟

第一次握手之後,客戶端不知道服務端接受到了訊息沒有,但是服務端能卻能保證自己接受報文的能力。

第二次握手之後,客戶端能確定自己發報能力正常和收報能力正常,也能知道對方發報能力正常,到了這裡客戶端基本上就沒有問題了。但是服務端不知道自己發報能力是否正常,也就是服務端不知道自己發的報能不能被客戶端接收到。並且服務端也不知道客戶端收報能力是否正常。

第三次握手之後,客戶端和服務端都能知道自己是沒有問題的,並且也知道對方也是沒有問題的。

資訊對等:保證客戶端和服務端能互相知道自己的發報能力、自己收報能力、對方發報能力、對方收報能力都是正常的

防止超時:連線三次握手也是防止出現請求超時導致髒連線。ttl網路報文的生存時間往往都會超過tcp請求超時時間,如果兩次握手就可以建立連線,傳輸資料並釋放連線後,第乙個超時的連線請求才到達服務端的機器的話,服務端會以為是客戶端穿件新的連線的請求,然後確認同意建立連線。因為客戶端的狀態不是syn_senet,所以直接丟棄了服務端的確認資料,以致最後只是服務端單方面建立連線完畢

tcp的四次揮手

話不多說,先來個示意圖

四次揮手時候的關鍵字的意思

客戶端等待2msl的意義:客戶端在接受到服務端的fin+ack之後為什麼不直接進入closed狀態

確認別動關閉方能順利進入closed狀態: 假如客戶端最後乙個ack由於網路原因導致無法到達服務端,處於last_ack的服務端通常會認為客戶端沒有收到自己的fin+ack報文,所以服務端會重發fin+ack報文,客戶端收到第二次fin+ack報文,會重發一次ack,並且重新計時,如果客戶端收到服務端的fin+ack報文後,傳送乙個ack給服務端後,就自私的進入closed狀態,可能會導致服務端無法確保收到最後的ack指令,無法進入closed狀態。這是服務端不負責任的表現。

防止失效請求:防止已經失效鏈結的請求資料報與正常連線的請求資料報混了而發生異常。因為time_wait狀態無法真正釋放控制代碼資源,在此期間socket中使用的本地埠在預設情況下不能再被使用。該限制對於客戶端機器來說是無所謂的,但對於高併發伺服器來說,會極大的限制有效連線的建立數量,成為效能瓶頸。所以高併發伺服器下講高併發伺服器的time_wait超時時間調小。

time_wait是四次揮手斷開連線的尾聲,如果此狀態連線過多,則可以通過優化伺服器引數得到解決。如果不是對方連線的異常,一般不會出現連線無法關閉的情況。

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給客戶端,詢問客戶端是否準備好進行資料通訊。...