SCTP防止SYN Flooding攻擊的原理

2021-05-22 23:18:57 字數 1816 閱讀 8918

1.

tcp中的

syn flooding

攻擊原理:

要明白這種攻擊的基本原理,還是要從

tcp連線建立的過程開始說起。由於

tcp基於連線的,為了在服務端和客戶端之間傳送

tcp資料,必須先建立乙個虛擬電路,也就是

tcp連線,建立

tcp連線的過程也就是我們熟悉的「三次握手」過程:首先,請求端(客戶端)傳送乙個包含

syn標誌的

tcp報文,表示客戶端欲發起通訊連線;第二步,伺服器在收到客戶端的

syn報文後,將返回乙個

syn+ack

的報文,表示客戶端的請求被接受;第三步,客戶端也返回乙個確認報文

ack給伺服器端,到此乙個

tcp連線完成。問題就出在

tcp連線的三次握手中,假設乙個使用者向伺服器傳送了

syn報文後突然宕機或掉線,那麼伺服器在發出

syn+ack

應答報文後是無法收到客戶端的

ack報文的,這種情況下伺服器端一般會重試(再次傳送

syn+ack

給客戶端)並等待一段時間後丟棄這個未完成的連線,這段時間的長度我們稱為

syn timeout

,一般來說這個時間是分鐘的數量級(大約為30秒

-2分鐘);如果有乙個惡意的攻擊者大量模擬這種情況,伺服器端將為了維護乙個非常大的半連線列表而消耗非常多的資源,最終導致伺服器端忙於處理攻擊者偽造的

tcp連線請求而無暇理睬客戶的正常請求,此時從正常客戶的角度看來,伺服器失去響應,這種情況我們稱作:伺服器端受到了

syn flooding

攻擊。

2.

sctp

是如何防止

syn flooding

攻擊的:

sctp

是通過「四次握手」的方法來建立乙個

sctp

鏈結的。具體過程如下:首先請求端傳送乙個

init

訊息到服務端;服務端收到這個

init

訊息後,準備好建立本次連線所需要的相關資訊,並將這些資訊放在乙個叫「

state cookie

」的資料塊中,接下來服務端給請求端傳送乙個

init_ack

的訊息,

init_ack

中包含了這個「

state cookie

」,同時服務端會把和本次鏈結相關的所有資源釋放掉,不維護任何資源和狀態;請求端收到

init_ack

後會把裡面的「

state cookie

」資訊取出來重新封裝乙個

cookie_echo

發往服務端;服務端收到

cookie_echo

訊息後再次去除其中的「

state cookie

」,依據「

state cookie

」中儲存的資訊建立本次鏈結,並向請求端傳送

cookie_ack

訊息。由此可見

sctp

為了避免

syn flooding

攻擊採用了一種比較聰明的辦法就是:服務端不維護半鏈結資訊,而是把半鏈結資訊傳送給請求端(存放在「

state cookie

」中),如果請求端確實需要建立這個鏈結,那麼請求端需要再把半鏈結資訊回送給服務端,這時服務端便可以根據返回的半鏈結資訊建立連線了。

3.

tcp和

sctp

建立連線過程示意圖:

SCTP程式設計

原文 sctp協議在unp第2版中還未提及,是在第3版中新增加的,在第9 10 23章介紹sctp。sctp就好象是tcp和udp的綜合體,既可以單播也能多播,而且連線建立過程使用4次握手而不是tcp的3次握手,在相當程度上防止了類似tcp中的syn flood的攻擊方法。sctp是面向訊息而不是面...

流控制傳輸協議 SCTP

流控制傳輸協議 sctp,stream control transmission protocol 是一種在網路連線兩端之間同時傳輸多個資料流的協議。sctp提供的服務於udp和tcp類似 sctp在客戶和伺服器之間提供關聯 association 並像tcp那樣給應用提供可靠性 排序 流量控制以及...

流量控制傳輸協議 SCTP

sctp在客戶和伺服器之間提供管理,並像tcp那樣給應用提供可靠性,排序,流量控制以及全雙工的資料傳送,sctp支援多宿而涉及不止兩個位址。sctp是面向訊息的。提供各個記錄的按序遞送服務。與udp一樣。由傳送端寫入的每條記錄的長度隨資料一道傳遞給接收端。同時sctp不會因為乙個訊息的丟失阻塞統同一...