TCP協議中的「三次握手」

2021-07-22 17:42:36 字數 1665 閱讀 5570

tcp(transmission control protocol)協議通常被稱為面向連線的協議,這一協議保證可靠有序地將資料從傳送者傳送到接收者。

tcp與udp的關鍵區別在於可靠性,tcp的可靠性在於其使用了面向連線的會話。在主機間使用tcp協議傳送資料前,傳輸層會專門開啟乙個程序用於建立源主機和目的主機之間的連線。通過該連線,可以跟蹤主機之間的會話或者通訊資料流。同時,該程序還保證每台主機都知道並做好了通訊的準備。完整的tcp會話要求在主機之間建立雙向會話。

會話建立後,目的主機針對收到的資料段向源主機傳送確認資訊。在tcp會話中,這些確認資訊構成了可靠性的基礎。源主機在收到確認資訊時,即表明資料成功傳送,且可以退出資料跟蹤。如果源主機未在規定時間內收到確認資訊,它將向目的主機重新傳送資料。可以得知,使用tcp協議的額外開銷部分源自確認資訊和重新傳送資訊所產生的網路流量。

執行在伺服器上的應用程序會一直處於等待狀態,直到客戶端發出資訊請求或者服務請求,然後啟動通訊。伺服器上執行的每個應用程式程序都配置有乙個埠號,由系統預設分配或系統管理員手動分配。當某個動態伺服器應用程式分配到特定埠時,該埠在伺服器上視為「開啟」,這表明應用層將接受並處理分配到該埠的資料段。在同一伺服器上可以同時開啟很多埠,每個埠對應乙個動態伺服器應用程式,不能為兩個應用程式配置相同的埠。

每個tcp連線都代表其中包含著兩股單向通訊資料流或者會話。若要簡歷連線,主機應該執行「三次握手」。tcp報頭中的控制位指出了連線的進度和狀態。

「三次握手」執行如下功能:

總結起來,三次握手需要解決的問題就是:有目的主機嗎?目的主機中有源主機想要使用的目的埠嗎?都有是吧,好,那我要建立會話了。

為了理解「三次握手」的過程,必須先了解兩台主機間交換的不同值。在tcp資料段報頭中(header部分),有6個包含控制資訊的1bit欄位,用於管理tcp程序,如下:

這些字段用作標誌,它們只有兩個值:1或者0。當值設為1時,表示資料段中包含控制資訊。

先po出一張高畫質大圖:

具體步驟:

1.syn

tcp客戶端傳送帶有syn控制標誌的資料段,指示包含在報頭中的序列號字段的初始值,開啟「三次握手」。序列號的初始值又稱為初始序列號(isn),由系統隨機生成,用於跟蹤會話過程中從客戶端到伺服器的資料流。在會話過程中,每從客戶端向伺服器傳送乙個位元組的資料,isn就增加1。

2.syn和ack

tcp伺服器需要確認從客戶端收到syn資料段,從而建立從客戶端到服務端的會話。為了達到此目的,伺服器要向客戶端傳送帶ack確認標誌的資料段,表明確認編號有效。客戶端將這種帶確認標誌的資料段理解為確認資訊,即伺服器已收到從tcp客戶端發出的syn資訊。

確認編號欄位的值等於客戶端初始序列號加1。客戶端和服務端之間的會話實際上是由兩個單向會話構成的:乙個是從客戶端到服務端的會話,另乙個恰好相反。所以,為了開啟從服務端到客戶端的會話,伺服器應該採用和客戶端同樣的方法使用syn標誌。

syn標誌表明初始序列號已包含在報頭中,且該值將用於跟蹤會話過程中從伺服器返回客戶端的資料流。

3.ack

最後,tcp客戶端傳送包含ack標誌的資料段,以表示對伺服器傳送的syn資訊的響應。在資料段中,不包含使用者資料。確認號字段的值比從伺服器接收的初始序列號值大1。一旦在客戶端和服務端建立了雙向會話,該通訊過程中交換的所有資料段都將包含ack標誌。

TCP三次握手協議

摘自 syn攻擊原理以及防範技術 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...

TCP三次握手協議

在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即...

TCP協議三次握手

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