SCTP防止SYN Flooding攻击的原理

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防止SYN Flooding攻击的原理_第1张图片

你可能感兴趣的:(tcp,服务器,存储)