一文理解 DDoS:流量型、协议型和应用层攻击有什么区别?

一文理解 DDoS:流量型、协议型和应用层攻击有什么区别?

_

DDoS,全称是 Distributed Denial of Service,中文通常叫“分布式拒绝服务攻击”。

它的核心目的不是窃取数据,而是让服务不可用。攻击者会通过大量请求或异常流量,耗尽目标系统的某类资源,让正常用户无法访问网站或接口。

常见被耗尽的资源包括:

- 网络带宽
- TCP 连接数
- 防火墙或负载均衡状态表
- Web 服务器连接池
- 应用线程池
- CPU 和内存
- 数据库连接池
- Redis、搜索服务等后端依赖

DDoS 通常可以分成三类:

1. 流量型 DDoS
2. 协议型 DDoS
3. 应用层 DDoS

图 1:DDoS 三种类型总览

一、流量型 DDoS:把路堵住

流量型 DDoS 的目标是 **网络带宽**。

可以把服务器理解成一家店,公网带宽就是通往这家店的路。如果这条路只能承载 `100 Mbps` 的流量,而攻击流量达到 `5 Gbps`,那么正常用户的请求还没到服务器,入口链路就已经被堵住了。

正常访问链路大概是:

正常用户请求
    ↓
公网入口带宽
    ↓
服务器

攻击时变成:
大量攻击流量
    ↓
公网入口带宽被打满
    ↓
正常用户请求进不来

很多人容易误解一点:服务器不返回资源,是不是就不会占用带宽?

答案是否定的。

因为流量分为两个方向:

用户 -> 服务器:服务器入站流量
服务器 -> 用户:服务器出站流量

服务器拒绝响应,最多只能减少出站流量。但攻击流量已经从外部网络打到了服务器入口,这部分入站流量已经占用了链路。

所以对于大规模流量型 DDoS,如果流量已经到了你的服务器,本机防火墙再丢弃往往已经太晚。正确的防御位置应该更靠上游,比如 CDN、高防节点、云厂商清洗中心或运营商侧。

典型特征

流量型 DDoS 常见表现包括:

  • 公网带宽突然打满

  • 正常用户访问超时

  • 应用服务本身可能还没明显处理请求

  • 流量来源分散

  • 入站流量远超平时水平

常见防御方式

防御流量型 DDoS,核心是 上游清洗:

  • CDN

  • 高防 IP

  • 云厂商 DDoS 防护

  • 运营商流量清洗

  • Anycast 网络

  • 黑洞路由或流量牵引


二、协议型 DDoS:把门口登记系统挤爆

协议型 DDoS 攻击的是 网络协议和连接状态资源。

要理解它,先要理解 TCP 连接。

大多数 Web 请求都基于 TCP。浏览器访问网站时,不是直接发送 HTTP 请求,而是先建立 TCP 连接。TCP 建立连接需要三次握手:

客户端 -> 服务器:SYN
服务器 -> 客户端:SYN-ACK
客户端 -> 服务器:ACK

连接建立后,浏览器才会发送真正的 HTTP 请求:

GET /index.html HTTP/1.1

问题在于,服务器在连接建立过程中需要维护状态,比如:

  • 来源 IP 和端口

  • 连接进行到了哪一步

  • 超时时间

  • socket 信息

  • 半连接队列

  • 防火墙状态表

  • 负载均衡连接表

协议型 DDoS 的思路就是制造大量异常连接或半连接,让服务器、网关、防火墙或负载均衡器忙于维护这些连接状态,最终正常用户无法建立连接。

可以用一个类比理解:

流量型 DDoS:把通往店铺的路堵住
协议型 DDoS:很多人在门口登记到一半就不动,登记台被占满
应用层 DDoS:进店后疯狂要求工作人员处理复杂业务

典型特征

协议型 DDoS 不一定会把带宽打满,但会出现:

  • 新连接建立失败

  • 半连接数量异常升高

  • 连接队列被占满

  • 防火墙或负载均衡状态表压力变大

  • 业务代码可能还没开始处理请求,连接层已经出问题

常见防御方式

协议型 DDoS 的防御重点是 连接保护:

  • SYN cookies

  • 连接数限制

  • 缩短异常连接超时

  • 单 IP 或单网段限流

  • 防火墙状态表保护

  • 负载均衡层防护

  • CDN / 高防清洗

其中 SYN cookies 可以简单理解为:服务器先不急着保存完整连接状态,而是把必要信息编码进响应里,等客户端真的完成握手后,再正式建立连接。这样可以降低半连接资源被耗尽的风险。


三、应用层 DDoS:拖垮业务系统

应用层 DDoS 攻击的是 Web 应用和后端业务逻辑。

这类攻击请求通常已经进入了 Web 服务,甚至进入了后端代码和数据库。

典型链路是:

互联网
  ↓
CDN / 负载均衡
  ↓
Nginx / 网关
  ↓
Java / Node / Python 后端
  ↓
MySQL / Redis / 搜索服务

应用层 DDoS 的请求可能看起来很正常,例如:

GET /api/search?keyword=phone
POST /login
GET /api/report/export
GET /api/products?filter=...

问题在于,这些接口背后可能非常消耗资源:

  • 搜索接口会查搜索引擎或数据库

  • 登录接口会校验密码、创建 session

  • 报表接口会进行大量统计计算

  • 商品筛选接口可能触发复杂 SQL

  • 下单接口可能涉及库存、优惠券、风控、支付等多个系统

所以应用层 DDoS 不一定需要很大的带宽。它可能只用相对较小的流量,就能把 CPU、线程池、数据库连接池或缓存系统拖垮。

典型特征

应用层 DDoS 常见表现包括:

  • 带宽不一定很高

  • HTTP 请求量突然暴涨

  • 某些 URL 被集中访问

  • CPU 升高

  • 数据库慢查询增多

  • 数据库连接池耗尽

  • Redis 或搜索服务压力异常

  • 5xx 错误和超时明显增加

常见防御方式

应用层 DDoS 的防御更偏 业务和架构层:

  • WAF

  • 接口限流

  • 账号风控

  • 验证码或挑战页面

  • Redis 缓存热点数据

  • 页面和接口缓存

  • 数据库查询优化

  • 高成本接口排队

  • 熔断和降级

  • 异步任务

  • 权限校验

  • 请求行为分析

比如搜索、登录、注册、短信验证码、报表导出这类接口,通常都应该做更严格的限流和风控。


四、三种 DDoS 的核心区别

可以用一张表总结:

类型

攻击目标

主要消耗资源

典型表现

防御重点

流量型 DDoS

网络入口

带宽

带宽打满,正常请求进不来

CDN、高防、上游清洗

协议型 DDoS

网络协议和连接状态

半连接队列、连接表、socket

新连接失败,连接状态异常

SYN cookies、连接限制、负载均衡防护

应用层 DDoS

Web 应用和业务接口

CPU、线程池、数据库、缓存

某些接口压力暴涨,后端超时

WAF、限流、缓存、熔断、业务风控

一个实用的判断方式是看哪个资源先被打满:

带宽满了:偏流量型
连接数/半连接/状态表满了:偏协议型
CPU/线程池/数据库满了:偏应用层
多个资源都满:混合型

现实中的 DDoS 攻击经常不是单一类型,而是混合型。攻击者可能同时制造大流量、异常连接和高成本业务请求。因此防御也不能只靠某一个手段。


五、真实系统如何防御 DDoS

一个比较完整的防御体系通常是分层的:

用户 / 攻击流量
    ↓
CDN / 高防 / 云厂商清洗
    ↓
WAF
    ↓
负载均衡
    ↓
Nginx / API 网关
    ↓
后端服务
    ↓
数据库 / Redis / 搜索服务

每一层解决不同问题:

  • CDN 和高防负责吸收大流量

  • WAF 负责识别异常 HTTP 请求

  • 负载均衡负责分摊流量

  • 网关负责限流、鉴权和熔断

  • 后端负责业务级风控

  • 数据库和缓存负责抗压优化

真正有效的 DDoS 防御,不是某一个配置项,而是一套体系:

上游清洗 + 连接保护 + WAF + 限流 + 缓存 + 监控告警 + 熔断降级

六、总结

DDoS 的本质是 资源耗尽攻击。

三种常见类型可以这样记:

流量型 DDoS:堵路,让正常流量进不来
协议型 DDoS:卡门,让正常连接建不起来
应用层 DDoS:进门后消耗业务系统,让请求处理不了

如果只是个人博客、小型网站或普通业务系统,最现实的防护方式通常是:

  • 使用成熟云厂商

  • 接入 CDN

  • 开启基础 DDoS 防护

  • 对登录、搜索、短信、报表等接口做限流

  • 尽量缓存静态资源和热点数据

  • 做好监控告警

  • 遇到异常流量时能快速降级

理解 DDoS 不只是为了知道攻击怎么发生,更重要的是理解系统中哪些资源是瓶颈,以及应该在哪一层做防护。

我的博客访问统计方案:用 Umami 看清网站流量 2026-06-04
我的博客图床方案:用 CloudFlare-ImgBed 管理文章图片 2026-06-20

评论区