TCP三次握手及其背後的缺陷

2022-09-01 09:15:06 字數 2866 閱讀 5229

概述

總結一下tcp中3次握手過程,以及其原生的缺陷 引起的syn flood的介紹

tcp三次握手

syn flood

幾個概念:

seq:序號。佔4個位元組,範圍[0,4284967296],因為tcp是面向位元組流的。在乙個1個tcp連線中傳送位元組流中國的每個位元組都依照順序編號。此外序號是迴圈使用的

ack: 僅當ack=1時確認欄位才有效,當ack=0時確認字段無效,而且tcp規定,在連線建立後全部的傳送報文段都必需要把ack置為1

syn:同步序列號,用來發起乙個連線。

當syn=1而ack=0時表明這是乙個請求報文段;若對方允許連線,則響應報文中syn=1,ack=1

fin :用來釋放乙個連線,當fin=1表示此報文段的傳送方已經傳送完成。

並要求釋放鏈結

服務端的tcp程序先建立傳輸控制塊tcb。準備接受client程序的連線請求,然後服務端程序處於listen狀態,等待client的連線請求,如有,則作出響應。

1、client的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn=1,ack=0。同一時候選擇乙個初始序號 seq=i。tcp規定。syn=1的報文段不能攜帶資料,但要消耗掉乙個序號。這時,tcp客戶程序進入syn—sent(同步已傳送)狀態。這是 tcp連線的第一次握手。

2、服務端收到client發來的請求報文後,假設允許建立連線,則向client傳送確認。確認報文中的syn=1。ack=1,確認號ack=i+1。同一時候為自己 選擇乙個初始序號seq=j。相同該報文段也是syn=1的報文段,不能攜帶資料,但相同要消耗掉乙個序號。

這時,tcp服務端進入syn—rcvd(同 步收到)狀態。這是tcp連線的第二次握手。

3、tcpclient程序收到服務端程序的確認後,還要向服務端給出確認。確認報文段的ack=1。確認號ack=j+1,而自己的序號為seq=i+1。 tcp的標準規定,ack報文段能夠攜帶資料,但假設不攜帶資料則不消耗序號。因此。假設不攜帶資料。則下乙個報文段的序號仍為seq=i+1。這 時。tcp連線已經建立。client進入established(已建立連線)狀態。這是tcp連線的第三次握手,能夠看出第三次握手client已經能夠傳送攜帶

資料的報文段了。

當服務端收到確認後。也進入established(已建立連線)狀態。

前倆比較easy理解。第三次握手看似多餘事實上不然。這主要是為了防止已失效的請求報文段突然又傳送到了服務端而產生連線的誤判

比 如:client傳送了乙個連線請求報文段a到服務端,可是在某些網路節點上長時間滯留了,而後client又超時重發了乙個連線請求報文段b該服務端,而後 正常建立連線。傳輸資料完成,並釋放了連線。

可是請求報文段a延遲了一段時間後。又到了服務端,這本是乙個早已失效的報文段,可是服務端收到後會誤以為客 戶端又發出了一次連線請求。於是向client發出確認報文段,並允許建立連線。那麼問題來了。假如這裡沒有三次握手,這時服務端僅僅要傳送了確認,新的

連線就建立了,但因為client沒有發出建立連線的請求,因此不會理會服務端的確認,也不會向服務端傳送資料,而服務端卻覺得新的連線已經建立了。並在 一直等待client傳送資料,這樣服務端就會一直等待下去,直到超出保活計數器的設定值,而將client判定為出了問題,才會關閉這個連線。這樣就浪費了非常多服務 器的資源。而假設採用三次握手,client就不會向服務端發出確認。服務端因為收不到確認,就知道client沒有要求建立連線,從而不建立該連線。

syn- flood攻擊是當前網路上最為常見的ddos攻擊。也是最為經典的拒絕服務攻擊。它就是利用了tcp協議實現上的乙個缺陷,通過向網路服務所在port傳送 大量 的偽造源位址的攻擊報文。就可能造成目標server中的半開連線佇列被佔滿,從而阻止其它合法使用者進行訪問。

這樣的攻擊早在2023年就被發現,但至今仍然顯示 出強大的生命力。非常多作業系統,甚至防火牆、路由器都無法有效地防禦這樣的攻擊。並且因為它能夠方便地偽造源位址。追查起來非常困難。它的資料報特徵通常

是。源傳送了大量的syn包。而且缺少三次握手的最後一步握手ack回覆。

原理:攻擊者首先偽造位址對 server發起syn請求。server回應(syn+ack)包,而真實的ip會覺得,我沒有傳送請求,不作回應。服務 器沒有收到回應,這種話,server不知 道(syn+ack)是否傳送成功,預設情況下會重試5次(tcp_syn_retries)。這種話。對於server的記憶體,頻寬都有非常大的消耗。攻擊者 假設處於公網。能夠偽造ip的話,對於server就非常難依據ip來推斷攻擊者,給防護帶來非常大的困難。

主要通過下面3種方式

1. 無效連線監視釋放

這樣的方法不停的監視系統中半開連線和不活動連線。當達到一定閾值時拆除這些連線,釋放系統資源。這樣的絕對公平的方法往往也會將正常的連線的請求也會被釋放掉,」傷敵一千,自損八百「

2. 延緩tcb分配方法

syn flood關鍵是利用了,syn資料報文一到。系統馬上分配tcb資源,從而占用了系統資源,因此有倆種技術來解決這一問題

syn cache技術

這樣的技術在收到syn時不急著去分配tcb。而是先回應乙個ack報文,並在乙個專用的hash表中(cache)中儲存這樣的半開連線,直到收到正確的ack報文再去分配tcb

syn cookie技術

syn cookie技術則全然不使用不論什麼儲存資源,它使用一種特殊的演算法生成sequence number,這樣的演算法考慮到了對方的ip、port、己方ip、port的固定資訊,以及對方無法知道而己方比較固定的一些資訊,如mss、時間等。在收到對方 的ack報文後,又一次計算一遍,看其是否與對方回應報文中的(sequence number-1)同樣,從而決定是否分配tcb資源

原理:對試圖穿越的syn請求進行驗證之後才放行

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協議採用了三次握手策略。如圖 客戶端傳送帶有syn標誌的連線請求報文段,然後進入syn send狀態,等待服務端的確認。服務端接收到客戶端的syn報文段後,需要傳送ack資訊對這個syn...

TCP 三次握手

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