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不會因為乙個訊息的丟失阻塞統同一...