DOS是Denial of Service的简称,用中文简单翻译就是拒绝服务。DOS攻击的目的是:经过耗尽服务器的CPU、内存和网络带宽等资源使服务器没法为用户提供正常服务或使得服务质量降低。总结下就是攻击服务器,使得服务器拒绝为正常的用户请求提供服务。(这样已解释,感受DOS这个名字还取得挺形象的,哈哈~)java
在网上找了个比较详细的解释:算法
做个形象的比喻来理解DoS。街头的餐馆是为大众提供餐饮服务,若是一群地痞流氓要DoS餐馆的话,手段会不少,好比霸占着餐桌不结帐,堵住餐馆的大门不让路,骚扰餐馆的服务员或厨子不能干活,甚至更恶劣……相应的计算机和网络系统则是为Internet用户提供互联网资源的,若是有黑客要进行DoS攻击的话,能够想象一样有好多手段!今天最多见的DoS攻击有对计算机网络的带宽攻击和连通性攻击。带宽攻击指以极大的通讯量冲击网络,使得全部可用网络资源都被消耗殆尽,最后致使合法的用户请求没法经过。连通性攻击指用大量的链接请求冲击计算机,使得全部可用的操做系统资源都被消耗殆尽,最终计算机没法再处理合法用户的请求。json
DOS拒绝服务攻击根据攻击手段,主要可分为两类:安全
1. SYN FLOOD(属于半开链接攻击)
利用服务器的链接缓冲区(Backlog Queue),利用特殊的程序,设置TCP的Header,向服务器端不断地成倍发送只有SYN标志的TCP链接请求。当服务器接收的时候,都认为是没有创建起来的链接请求,因而为这些请求创建会话,排到缓冲区队列中。服务器
若是你的SYN请求超过了服务器能容纳的限度,缓冲区队列满,那么服务器就再也不接收新的请求了。其余合法用户的链接都被拒绝掉。能够持续你的SYN请求发送,直到缓冲区中都是你的只有SYN标记的请求。网络
2. 带宽DOS攻击
若是你的链接带宽足够大而服务器又不是很大,你能够发送请求,来消耗服务器的缓冲区消耗服务器的带宽。这种攻击就是人多力量大了,配合上SYN一块儿实施DOS,威力巨大。不过是初级DOS攻击。app
3. Hash碰撞攻击
这个安全弱点利用了各语言的Hash算法的“非随机性”能够制造出N多的value不同,可是key同样数据,而后让你的Hash表成为一张单向链表,而致使你的整个网站或是程序的运行性能以级数降低(能够很轻松的让你的CPU升到100%)。关于Hash碰撞DOS攻击,这篇博客已经总结的很全面了,就不本身再造个轮子了。jsp
我本身作了个简单的实验,写了下面这个Controller分布式
@RequestMapping("/convertJSONAndValid") public Object convertJSON(@RequestBody JSONObject jspan){ Map<String,Object> map = new HashMap<>(); map.put("key1","value"); return map; }
经过Postman向这个接口一次性发送1000000个"xx":"1"这样的键值对,经过任务管理器看到CPU瞬间就飙升到了88%。这个攻击仍是很是恐怖的。下面代码用于生成1000000个键值对。
public static void main(String[] args) throws Exception { FileWriter fs = new FileWriter("D:\\json.txt"); fs.write("{\r\n"); int count = 1000000; for(int i=0;i<count;i++){ if(i!=count-1){ fs.write("\"xx\":\"1\",\r\n"); }else { fs.write("\"xx\":\"1\"\r\n"); } } fs.write("}"); fs.close(); }
传统上,攻击者所面临的主要问题是网络带宽,因为较小的网络规模和较慢的网络速度的限制,攻击者没法发出过多的请求。虽然相似“the ping of death”的攻击类型只须要较少许的包就能够摧毁一个没有打过补丁的UNIX系统,但大多数的DoS攻击仍是须要至关大的带宽的,而以我的为单位的黑客们很难使用高带宽的资源。为了克服这个缺点,DoS攻击者开发了分布式的攻击。攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial of Service)攻击。
不管是DoS攻击仍是DDoS攻击,简单的看,都只是一种破坏网络服务的黑客方式,虽然具体的实现方式变幻无穷,但都有一个共同点,就是其根本目的是使受害主机或网络没法及时接收并处理外界请求,或没法及时回应外界请求。
总结下:
DDOS攻击就是控制多台分布普遍的机器对目标机器发起DOS攻击