TCP三次握手与DDOS攻击原理

 

TCP三次握手与DDOS攻击原理
做者:冰盾防火墙 网站:www.bingdun.com 日期:2014-12-09
 
在TCP/IP协议中,TCP协议提供可靠的链接服务,采用三次握手创建一个链接。 

    第一次握手:创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 

    完成三次握手,客户端与服务器开始传送数据,在上述过程当中,还有一些重要的概念: 

    未链接队列:在三次握手协议中,服务器维护一个未链接队列,该队列为每一个客户端的SYN包(syn=j)开设一个条目,该条目代表服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的链接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。 
    Backlog参数:表示未链接队列的最大容纳数目。 

    SYN-ACK 重传次数 服务器发送完SYN-ACK包,若是未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,若是重传次数超过系统规定的最大重传次数,系统将该链接信息从半链接队列中删除。注意,每次重传等待的时间不必定相同。 

    半链接存活时间:是指半链接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是全部重传请求包的最长等待时间总和。有时咱们也称半链接存活时间为Timeout时间、SYN_RECV存活时间。
 
DDOS全名是Distribution Denial of service ( 分布式拒绝服务攻击),不少DOS攻击源一块儿攻击某台服务器就组成了DDOS攻击。DoS的攻击方式有不少种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使服务器没法处理合法用户的指令。
SYN-Flood是目前最流行的DDoS攻击手段,早先的DoS的手段在向分布式这一阶段发展的时候也经历了浪里淘沙的过程。
 
假设一个用户向服务器发送了SYN报文后忽然死机或掉线,那么服务器在发出SYN+ACK应答报文后是没法收到客户端的ACK报文的(第三次握手没法完成),这种状况下服务器端通常会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的链接,这段时间的长度咱们称为SYN Timeout,通常来讲这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常致使服务器的一个线程等待1分钟并非什么很大的问题,但若是有一个恶意的攻击者大量模拟这种状况,服务器端将为了维护一个很是大的半链接列表而消耗很是多的资源----数以万计
的半链接,即便是简单的保存并遍历也会消耗很是多的CPU时间和内存,况且还要不断对这个列表中的IP进行SYN+ACK的重试。实际上若是服务器的TCP/IP栈不够强大,最后的结果每每是堆栈溢出崩溃---即便服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP链接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率很是之小),此时从正常客户的角度看来,服务器失去响应,这种状况咱们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)
相关文章
相关标签/搜索