DOS拒绝式服务攻击原理浅析
作者:zhanhailiang 日期:2014-10-26
TCP三次握手协议
TCP协议是一种可靠的连接,为了保证连接的可靠性,TCP的连接要分为几个步骤。我们把这个连接过程称为“三次握手”。 下面我们从一个实例来分析建立连接的过程。
第一步客户端向服务器发送一个TCP数据包,表示请求建立连接。为此,客户端将数据包的SYN位设置为1,并且设置序列号seq=1000(假设为1000)。
第二步服务器收到了数据包,并从SYN位为1知道这是一个建立请求的连接。于是服务器也向客户端发送一个TCP数据包。因为是响应客户端的请求,于是服务器设置ACK为1,sak_seq=1001(1000+1)同时设置自己的序列号seq=2000(假设为2000)。
第三步客户端收到了服务器的TCP,并从ACK为1和ack_seq=1001知道这是从服务器来的确认信息。于是客户端也向服务器发送确认信息。客户端设置ACK=1,和ack_seq=2001,seq=1001,发送给服务器。至此客户端完成连接。
最后一步服务器受到确认信息,也完成连接。
通过上面几个步骤,一个TCP连接就建立了。当然在建立过程中可能出现错误,不过TCP协议可以保证自己去处理错误的。
DOS拒绝式服务攻击原理
客户端先进行第一个步骤。服务器收到后,进行第二个步骤。按照正常的TCP连接,客户端应该进行第三个步骤。
不过攻击者实际上并不进行第三个步骤。因为客户端在进行第一个步骤的时候,修改了自己的IP地址,将一个实际上不存在的IP填充在自己IP数据包的发送者的IP一栏。这样因为服务器发的IP地址实际上是没有人接收的,所以服务端会收不到第三个步骤的确认信号,这样服务器端会在那边一直等待TIME_WAIT,直到超时。
这样当有大量客户发出类似的请求后,服务端会有有大量处于等待TIME_WAIT的TCP连接,直到把所有的服务器资源用光,从而无法分配资源来接收其它客户端的请求。
这样当正常的用户向服务器发出请求时,由于没有了资源而不能成功。于是就产生了DOS拒绝式服务攻击。
总结
DOS拒绝式服务攻击原理主要原因在于TCP连接建立的过程是一个阻塞式的过程,所以当第二步服务器端发送数据包后一直无法收到客户端的确认数据包就会一直等待,导致大量占用服务器资源,从而无法为合法有效的请求提供资源。