TCP三次握手

2021-07-31 11:37:13 字數 1414 閱讀 4409

其實很好理解這個問題,我們要傳送東西給人家,那麼肯定要先給人家打好招呼,這樣對方才可以在收到東西之後給你反饋啊。

tcp連線需要經過「三次握手」的過程,我們先給出這個過程的示意圖,如下圖所示:

第一步:客戶端a中的乙個tcp程序要與伺服器b中的乙個tcp程序建立連線,首先是a中的tcp程序向b中的tcp程序傳送特殊的tcp報文段(標誌位syn被置1,因此該報文段也稱為:syn報文段)。另外,客戶端會隨機地選擇乙個初始序號(client_isn),並且將這個序號作為該報文段中的「序號」欄位的值。

第二步:b收到syn報文段後,會為tcp連線分配tcp快取和變數,並向該客戶tcp程序傳送允許連線的報文段(這裡會引起:syn洪氾攻擊)。該允許報文段包括了三個主要的資料:標誌位syn和ack被置1,確認號字段被賦值為:client_isn+1,伺服器也選擇自己初始序號(server_isn),並且把該初始序號放在允許報文段的序號字段。因此,允許報文段又稱為:synack報文段。

第三步:收到synack報文段後,客戶端也給該連線分配快取和變數,並且還要傳送乙個確認報文段給伺服器。這個報文段是建立連線傳送的最後乙個報文段,報文段中的ack被置1,確認號為:server_isn+1,同時要注意:此時連線已經建立了,所以標誌位syn是被置為0的。ok,到這裡tcp連線已經被建立了,可以進行資料傳輸了。

如果a向b請求連線,b同意了為此次連線分配了資源和變數,然後,會返回允許報文段給a,若b的應答沒有到達a端,a認為連線未建立,而b認為建立了。b會在一段時間內保留分配的資源,如果大量a這樣請求,b會崩潰(syn洪氾攻擊就是這個原理)。而「三次握手」的話,我們就可以知道這次連線是沒有建立成功的。

為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤。這個主要是因為syn報文段在傳輸過程中耽誤了太久的時間,客戶端a就以為丟失了,已經重新傳送了syn報文段,建立好了連線。但是我們的伺服器b不知道這個事情,同樣會為它分配資源,並且返回確認報文,但是客戶端收到後,看到後不會去理會它,這樣就會出現和第一種一樣的情況,,a認為連線未建立,而b認為建立了。b會在一段時間內保留分配的資源,如果大量a這樣請求,b會崩潰。

這個很容易解釋,我們三次可以搞定的東西,為啥還要四次了。

利用偽造的ip位址向被攻擊者傳送tcp連線請求,而被攻擊者會為這些請求分配資源和變數並且會傳送應答報文給傳送者,但是這些報文永遠都無法到達目的地。那這個tcp連線就處於掛起狀態,也就是所謂的半連線狀態,伺服器收不到再確認的話,還會重**送ack給攻擊者。如果攻擊者傳送大量的這樣的tcp連線的話,就會造成伺服器因為資源不夠而崩潰。

降低syn timeout時間,使得主機盡快釋放半連線的占用

採用syn cookie設定,如果短時間內連續收到某個ip的重複syn請求,則認為受到了該ip的攻擊,丟棄來自該ip的後續請求報文

tcp的三次握手目的是同步連線雙方的序列號確認號並交換 tcp 視窗資訊。其中我們需要知道syn和rst兩個標誌位都是和建立tcp連線有關的。

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

TCP 三次握手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手

1.伺服器準備好接受外來連線。passive open 被動開啟 需呼叫 socket bind listen 函式來完成。2.客戶端通過呼叫 connect 主動開啟 active open 這使得客戶 tcp傳送乙個 syn 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...