深入淺出TCP協議的三次握手過程

2021-09-23 21:23:17 字數 2538 閱讀 6733

tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線:

每一次tcp連線都需要三個階段:連線建立、資料傳送和連線釋放。「三次握手」就發生在連線建立階段。

所謂的「三次握手」即對每次傳送的資料量跟蹤進行協商使資料段的傳送和接收同步,以及根據所接收到的資料量來確定資料傳送、接收完畢後何時撤消聯絡,並建立虛連線。

第一次握手:主機a傳送位碼syn=1,隨機產生seq number=隨機序列的資料報到伺服器,主機b由syn=1知道,a要求建立聯機;

第二次握手:主機b收到請求後要確認聯機資訊,向a傳送ack number=(主機a的seq+1),syn=1,ack=1,隨機產生seq=隨機序列的包;

第三次握手:主機a收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,

若正確,主機a會再傳送ack number=(主機b的seq+1),ack=1,主機b收到後確認seq值與ack=1則連線建立成功。

完成三次握手,主機a與主機b開始傳送資料。

位碼即tcp標誌位,有6種標示:

syn(synchronous建立聯機)

ack(acknowledgement 確認)

psh(push傳送) fin(finish結束)

rst(reset重置) urg(urgent緊急)

乙個完整的三次握手也就是 請求---應答---再次確認。

(2)過程**

下面的**論壇,應該是wireshark抓包:

乙個三次握手的過程(圖1,圖2)

(圖1)

(圖2)

第一次握手的標誌位(圖3)

我們可以看到標誌位裡面只有個同步位,也就是在做請求(syn)

(圖3)

第二次握手的標誌位(圖4)

我們可以看到標誌位裡面有個確認位和同步位,也就是在做應答(syn + ack)

(圖4)

第三次握手的標誌位(圖5)

我們可以看到標誌位裡面只有個確認位,也就是再做再次確認(ack)

(圖5)

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態; 第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送資料。

從安全的角度來說,tcp序列號初始值越趨近於隨機越好,演算法越複雜越好。

如果不是隨機產生初始序列號,黑客將會很容易的獲取到你與其他主機之間通訊的初始化序列號,並且偽造序列號進行攻擊。

3.為什麼是三次握手?

三次握手可以建立雙向連線,兩次握手只能建立一條單向的連線。

tcp三次握手最重要的目的就是建立雙向連線,這樣能建立可靠的通道,保證資料可靠的傳輸。

教科書裡三次握手的意義:

《計算機網路》謝希仁著中講「三次握手」的目的是「為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤」。

這樣說明「已失效的連線請求報文段」的產生在這樣一種情況下:client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。

本來這是乙個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。

假設不採用「三次握手」,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。

但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。

採用「三次握手」的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。

深入淺出TCP三次握手和四次分手

有圖可知,由於http只有請求和響應的概念,通道連線需要通過tcp來完成的,因此讓我們先來談談tcp的三次握手和四次分手吧 客戶端首先要syn 1,表示要建立連線 服務端接收到後,要告訴客戶端 我接受到了!所以加個ack 1表示確認跟客戶端建立連線,因為tcp連線是雙向的,然後還需要傳送syn 1表...

深入淺出通俗理解 TCP的三次握手 四次分手

運輸連線有三個階段,即 連線建立 資料傳送和連線釋放。運輸連線的管理就是使運輸連線的建立和釋放都能正常地進行。連線建立過程中要解決以下三個問題 要使每一方能夠確知對方的存在。要允許雙方協商一些引數 如最大報文段長度,最大視窗大小,服務質量等 能夠對運輸實體資源 如快取大小,連線表中的專案等 進行分配...

TCP三次握手協議

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