本节内容
一、TCP协议浅谈
1、HTTP连接
HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议,所有的WWW文件都必须遵守这个标准。
HTTP协议是一个客户端和服务器端请求和应答的标准,是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
- 在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
- 在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种短连接
,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次保持连接
的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端在线
。若服务器长时间无法收到客户端的请求,则认为客户端,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
2、SOCKET原理
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:
- 连接使用的协议
- 本地主机的IP地址
- 本地进程的协议端口
- 远程主机的IP地址
- 远程进程的协议端口
应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
3、TCP介绍
(1) TCP简介
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI(Open System Interconnection,开放式系统互联)模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
OSI七层模型:
我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层。在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。同时,我们需要简单的知道,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封装的过程。OSI七层模型中,每一层的作用和对应的协议如下:
TCP/IP四层、五层模型与OSI七层协议模型:
(2) TCP报文段的首部格式
上图就是TCP协议头部的格式,其每个字段的详细说明如下:
- Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号,用于区别主机中的不同进程,而IP地址是用来区分不同的主机的。源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接。
- Sequence Number(序号):用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号,主要用来解决网络报乱序的问题。
- Acknowledgment Number(确认号):32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。主要用来解决丢包的问题
- Offset(数据偏移):给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。
- TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。
- Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制。
TCP Flags每个标志位的解释:
- URG:表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据。
- ACK:表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0。
- PSH:表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。
- RST:表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包。
- SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当客户端请求连接时,SYN=1,ACK=0;连接被服务端响应的时候,SYN=1,ACK=1。这个标志的数据包经常被用来进行端口扫描,扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口。但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手。
- FIN:表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。
4、TCP连接的三次握手与四次挥手
(1) 介绍
根据3中介绍我们可以得到三个重要的标志位:
- ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。
- SYN(SYNchronization): 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
- FIN(finis):用来释放一个连接。当FIN = 1时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
TCP状态转换图:
TCP连接过程图:
名词解释:
1) 三次握手
三次握手过程说明如下:
- 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x。然后,客户端进入
SYN_SEND
状态,等待服务器的确认。 - 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1)。同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入
SYN_RECV
状态。 - 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入
ESTABLISHED
状态,完成TCP三次握手。
2) 四次挥手
完成了三次握手,客户端和服务器端就可以开始传送数据。当数据传送完毕,就需要断开TCP连接,断开连接的四次挥手过程说明如下:
- 第一次挥手:主机1(可以是客户端,也可以是服务器端)设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段。此时,主机1进入
FIN_WAIT_1
状态,这表示主机1没有数据要发送给主机2了。 - 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1,主机1进入
FIN_WAIT_2
状态。主机2告诉主机1,我同意你的关闭连接请求,主机2进入CLOSE_WAIT
状态。 - 第三次挥手:主机2在确认没有要向主机1发送的信息后,向主机1发送FIN报文段,请求关闭连接,此时主机2进入
LAST_ACK
状态。 - 第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入
TIME_WAIT
状态。主机2收到主机1的ACK报文段以后,就关闭连接。此时,主机1等待2MSL后依然没有收到回复,则证明主机2已正常关闭。那好,主机1也可以关闭连接了。
2MSL是什么?MSL(Maximum Segment Lifetime)即报文最大生存时间,RFC 793中规定MSL为2分钟,实际应用中常用的是30秒、1分钟和2分钟等。2MSL即两倍的MSL。
TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。
(2) 作用
1) 为什么要三次握手
在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。在谢希仁著《计算机网络》书中同时举了一个例子,如下图:
简单的来说就是为了防止服务器一直等待其实已经失效的连接,造成资源的浪费。
2) 为什么要四次挥手
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
四次挥手中状态变化:
- FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。当TCP连接在ESTABLISHED状态时,想主动关闭连接的一方(在这里称其为A)向对方(在这里称其为B)发送了FIN报文,此时A进入到FIN_WAIT_1状态。而当B回应ACK报文后,A则进入到FIN_WAIT_2状态。当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat命令看到。
- FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的TCP连接表示半连接,即有一方要求close连接,另外还告诉对方,我暂时还有点数据需要传送给你(ACK信息),稍后再关闭连接。
- CLOSE_WAIT:这种状态的含义其实是表示在等待关闭。当A(主动关闭连接的一方)发送FIN报文给B时,B会回应一个ACK报文给A(B确认收到了A关闭连接请求),此时B进入到CLOSE_WAIT状态。CLOSE_WAIT状态下B察看是否还有数据要发送给A,如果没有的话,那么B发送FIN报文给A,表示我没有数据要发送了,可以关闭连接。
- LAST_ACK:B(被动关闭连接一方)在发送FIN报文后,最后等待A的ACK报文(A确认收到了B的关闭连接请求)。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
- TIME_WAIT:A(主动关闭连接的一方)收到了B的FIN报文,并发送出了ACK报文,等2MSL后即可回到CLOSED可用状态了。如果A在FINWAIT1状态下,收到了B同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
- CLOSED::表示连接断开。
二、DDOS
1、什么是DDOS
DoS(Denial of Service,拒绝服务),造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。
DDoS(Distributed Denial of Service,分布式拒绝服务),指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
DRDoS(Distributed Reflection Denial of Service,分布反射式拒绝服务)是DDoS攻击的变形。
2、攻击原理
(1) 各种攻击的原理
DoS攻击、DDoS攻击和DRDoS攻击都是利用TCP三次握手的漏洞进行攻击的。
1) SYN攻击
SYN攻击是当前网络上最为常见DDos攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其它合法用户进行访问。这种攻击早在1996年就被发现,但至今仍然显示出强大的生命力。很多操作系统,甚至防火墙、路由器都无法有效地防御这种攻击,而且由于它可以方便地伪造源地址,追查起来非常困难。它的数据包特征通常是,源发送了大量的SYN包,并且缺少三次握手的最后一步握手ACK回复。
DDoS攻击它的原理说白了就是群殴,用好多的机器对目标机器一起发动DoS攻击,但这不是很多黑客一起参与的,这种攻击只是由一名黑客来操作的。这名黑客不是拥有很多机器,他是通过他的机器在网络上占领很多的"肉鸡",并且控制这些"肉鸡"来发动DDoS攻击,要不然怎么叫做分布式呢。还是刚才的那个例子,你的机器每秒能发送10个攻击数据包,而被攻击的机器每秒能够接受100的数据包,这样你的攻击肯定不会起作用,而你再用10台或更多的机器来对被攻击目标的机器进行攻击的话,那结果就可想而知了。
2) DRDoS攻击
在介绍DRDoS攻击之前,我们先来了解下Smurf攻击。Smurf攻击的作用原理是基于广播地址与回应请求的。一台计算机向另一台计算机发送一些特殊的数据包如ping请求时,会接到它的回应;如果向本网络的广播地址发送请求包,实际上会到达网络上所有的计算机,这时就会得到所有计算机的回应。这些回应是需要被接收的计算机处理的,每处理一个就要占用一份系统资源,如果同时接到网络上所有计算机的回应,接收方的系统是有可能吃不消的,就象遭到了DDoS攻击一样。不过是没有人笨到自己攻击自己,不过这种方法被黑客加以改进就具有很大的威力了。黑客向广播地址发送请求包,所有的计算机得到请求后,却不会把回应发到黑客那里,而是发到被攻击主机。这是因为黑客冒充了被攻击主机。黑客发送请求包所用的软件是可以伪造源地址的,接到伪造数据包的主机会根据源地址把回应发出去,这当然就是被攻击主机的地址。黑客同时还会把发送请求包的时间间隔减小,这样在短时间能发出大量的请求包,使被攻击主机接到从被欺骗计算机那里传来的洪水般的回应,就像遭到了DDoS攻击导致系统崩溃。黑客借助了网络中所有计算机来攻击受害者,而不需要事先去占领这些被欺骗的主机,这就是Smurf攻击。
DRDoS分布反射式拒绝服务攻击这是DDoS攻击的变形,它与DDoS的不同之处就是DrDoS不需要在攻击之前占领大量的"肉鸡"。它的攻击原理和Smurf攻击原理相近,不过DRDoS是可以在广域网上进行的,而Smurf攻击是在局域网进行的。DRDoS攻击利用与Smurf攻击原理,黑客同样利用特殊的发包工具,首先把伪造了源地址的SYN连接请求包发送到那些被欺骗的计算机上,根据TCP三次握手的规则,这些计算机会向源IP发出SYN+ACK或RST包来响应这个请求。同Smurf攻击一样,黑客所发送的请求包的源IP地址是被攻击主机的地址,这样受欺骗的主机就都会把回应发到被攻击主机处,造成被攻击主机忙于处理这些回应而瘫痪。
(2) DDoS如何攻击
目前最流行也是最好用的攻击方法就是使用SYN-Flood进行攻击,SYN-Flood
也就是SYN洪水攻击
。SYN-Flood不会完成TCP三次握手的第三步,也就是不发送确认连接的信息给服务器。这样,服务器无法完成第三次握手,但服务器不会立即放弃,服务器会不停的重试并等待一定的时间后放弃这个未完成的连接,这段时间叫做SYN timeout
,这段时间大约30秒-2分钟
左右。若是一个用户在连接时出现问题导致服务器的一个线程等待1分钟并不是什么大不了的问题,但是若有人用特殊的软件大量模拟这种情况,那后果就可想而知了。一个服务器若是处理这些大量的半连接信息而消耗大量的系统资源和网络带宽,这样服务器就不会再有空余去处理普通用户的正常请求(因为客户的正常请求比率很小)。这样这个服务器就无法工作了,这种攻击就叫做SYN-Flood攻击。
使用netstat命令可以看到有大量处于SYN_RECV
状态的TCP连接:
1 2 3 4 5 6 7 |
|
3、防护方法
到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。不过这不等于我们就没有办法阻挡DDoS攻击,我们可以尽力来减少DDoS的攻击。下面就是一些防御方法:
1. 及早发现系统存在的攻击漏洞,及时安装系统补丁程序。对一些重要的信息(例如系统配置信息)建立和完善备份机制。对一些特权账号(例如管理员账号)的密码设置要谨慎。通过这样一系列的举措可以把攻击者的可乘之机降低到最小。
2. 在网络管理方面,要经常检查系统的物理环境,禁止那些不必要的网络服务和端口。建立边界安全界限,确保输出的包受到正确限制。经常检测系统配置信息,并注意查看每天的安全日志(网络设备和主机/服务器)。
3. 利用网络安全设备(例如:防火墙)来加固网络的安全性,配置好这些设备的安全规则,过滤掉所有可能的伪造数据包。
- 禁止对主机的非开放服务的访问
- 限制特定IP地址的访问
- 启用防火墙的防DDoS的属性
- 严格限制对外开放的服务器的向外访问
- 运行端口映射程序祸端口扫描程序,要认真检查特权端口和非特权端口
4. 限制同时打开的SYN半连接数目。
5. 缩短SYN半连接的time out 时间。
6. 与网络服务提供商协调工作,让网络服务提供商帮助实现路由的访问控制和对带宽总量的限制。
7. 建立抗DDoS攻击盾机,当用户发现自己正在遭受DDoS攻击时,将攻击导向盾机。
8. 当用户发现自己正在遭受DDoS攻击时,应当启动自己的应对策略,尽可能快地追踪攻击包,并且及时联系ISP和有关应急组织,分析受影响的系统,确定涉及的其他节点,从而阻挡从已知攻击节点的流量。
9. 如果用户是潜在的DDoS攻击受害者,并且用户发现自己的计算机被攻击者用作主控端和代理端时,用户不能因为自己的系统暂时没有受到损害而掉以轻心。攻击者一旦发现用户系统的漏洞,这对用户的系统是一个很大的威胁。所以用户只要发现系统中存在DDoS攻击的工具软件要及时把它清除,以免留下后患。
4、其他攻击方式了解
(1) ACK Flood攻击
ACK Flood攻击是在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的,主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告诉对方此端口不存在。
(2) UDP Flood攻击
UDP Flood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。 100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
(3) ICMP Flood攻击
ICMP Flood 的攻击原理和ACK Flood原理类似,属于流量型的攻击方式,也是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文,因此ICMP Flood出现的频度较低
(4) Connection Flood攻击
Connection Flood是典型的并且非常有效的利用小流量冲击大带宽网络服务的攻击方式,,这种攻击方式目前已经越来越猖獗。这种攻击的原理是利用真实的IP地址向服务器发起大量的连接,并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的连接。
其中一种攻击方法是每秒钟向服务器发起大量的连接请求,这类似于固定源IP的SYN Flood攻击,不同的是采用了真实的源IP地址。通常这可以在防火墙上限制每个源IP地址每秒钟的连接数来达到防护目的。但现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个IP地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了拒绝服务的效果。
(5) HTTP Get攻击
用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露攻击者的IP地址。
(6) UDP DNS Query Flood攻击
UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。
根据微软的统计数据,一台DNS服务器所能承受的动态域名查询的上限是每秒钟9000个请求。而我们知道,在一台P3的PC机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的DNS服务器瘫痪,由此可见DNS 服务器的脆弱性。同时需要注意的是,蠕虫扩散也会带来大量的域名解析请求。
DDOS补充:
OSI又叫网络七层协议,一共有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是:7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。DDoS攻击按其攻击的OSI层进行分类,虽然共有七层,但在DDoS攻击期间只有三层是目标:第3层,第4层和第7层。
1、第3层攻击
在OSI模型中,第3层是网络层。第3层攻击的重点是使目标站点的带宽饱和,以使站点无法使用。攻击的大小以每秒位数(Bps)为单位。包括:
UDP泛洪攻击:UDP泛洪会占用主机资源,导致站点无法访问。
ICMP泛滥:也称为“ping泛洪”。持续和传出的带宽受到该类型攻击影响,导致系统整体放缓。
2、第4层攻击
OSI模型的第4层与传输协议有关。第4层攻击的目标是占用服务器资源,或防火墙和负载平衡器的资源。它以每秒数据包为单位进行测量。包括:
SYN flood:恶意占用资源,拒绝合法用户的服务。
死亡Ping:溢出内存缓冲区,从而导致崩溃、重启和拒绝合法用户的服务。
反射攻击:最具灾难性的攻击类型之一,攻击可能涉及数千台计算机,所有计算机都将数据ping回单个目标,导致大规模减速和服务拒绝。
3、第7层攻击
第7层是应用层和最靠近用户的层。这些攻击更复杂,因为它们模仿人类行为与用户界面交互。它们通过使用似乎合法的崩溃Web服务器的请求来针对OpenBSD、Windows、Apache和其他软件的漏洞。应用层攻击的大小以每秒请求数来衡量。包括:
Slowloris:使所有连接保持开启状态,这会使最大并发连接池超载,从而导致拒绝服务。
HTTP泛滥:利用貌似合法的HTTP GET或POST请求来攻击服务器或应用程序。这种攻击需要的带宽较少。
我们无法完全避免DDoS攻击,但可以通过一些防护手段来缓解DDOS攻击给企业造成的损害,最常见的防御技术有两大类:硬防和流量清洗。一个是直接抗住攻击,一个是通过对攻击流量进行过滤清洗,隐藏源IP。企业可以根据自身的实际情况和需求来选择适合自己的防御措施。
参考:
http://www.cnblogs.com/ziqian9206/p/7159044.html
http://netsecurity.51cto.com/art/201710/553893.htm