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.       TCPSCTP建立连接过程示意图:

   SCTP防止SYN Flooding攻击的原理_第1张图片

来源:http://blog.csdn.net/minico/article/details/5706861

你可能感兴趣的:(SCTP防止SYN Flooding攻击的原理)