我家楼下有家火锅店,生意一直火爆,直到某天出了怪事:正赶饭点,呼啦啦涌进来一群人,不点菜、不喝水,占着座位刷手机,还有人故意堵在门口排队。真正的顾客被挡在外面进不来,后厨的菜一盘盘炒好却送不出去,店长急得直跺脚。更诡异的是,这些人像约好了似的,分拨从不同方向涌来,查不出谁是领头。这种“挤店”攻击,就是互联网世界的 DDoS(分布式拒绝服务攻击):攻击者操纵成千上万台被植入木马的“肉鸡”电脑,同时向一家网站发起请求,把它的带宽、连接、处理器资源全部耗尽,让正常用户无法访问。好消息是,对付“挤店”有一套成熟的四件套:门口加保安(流量清洗)识别坏人、限时放行(速率限制)控制进门速度、多开分店(Anycast 分流)摊薄人流、生意太好就扩张后厨(弹性扩容)提升容量。这篇文章就用这套“防挤店”方法论,带你把 DDoS 的常见手法、检测手段和层层防御的部署思路拆个明明白白。

岗位关联

对 AI 从业者而言,理解 DDoS 防御是保障模型推理服务与训练集群高可用的基本功;掌握流量清洗、速率限制与弹性扩容的协同设计,能显著提升生产系统的鲁棒性与稳定性。

目录
  1. 可视化演示
  2. 攻击原理:为什么“挤店”能搞垮一家店
  3. 常见手法:恶意顾客的三种“配方”
  4. 检测识别:从嘈杂人声中认出“挤店团伙”
  5. 流量清洗:保安的“逐客令”
  6. 速率限制:给店门装上“限流护栏”
  7. 弹性扩容:开分店与“加后厨”
  8. 部署策略:一套完整的“防挤店”预案
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示DDoS攻击分类、多层防御架构和流量清洗过程,三种模式交互切换。

本节配有交互动效(进入视口后自动加载,约 3KB)。

DDoS三大攻击类型 流量型:UDP洪泛+DNS放大,耗尽带宽 协议型:SYN洪泛,耗尽半连接队列 应用层:HTTP洪泛+Slowloris,耗尽资源 三类攻击分别针对带宽、协议栈和应用资源

攻击原理:为什么“挤店”能搞垮一家店

恶意顾客的手法其实很简单:不点菜、不结账,就是占着座位和过道,让真正的食客没地方坐。他们的可怕之处不在个人,而在“量大”——一个人来无所谓,一万个人同时挤进来,店就瘫了。DDoS 攻击的底层逻辑与此完全一致:攻击者预先控制大量“肉鸡”(被植入木马的联网设备),在约定时刻让它们同时向目标服务器发起请求。这些请求不是来“消费”的,而是来占坑的。

从技术视角看,任何服务都有容量上限 C:带宽(门口马路的宽度)、半连接队列(服务员手里的等位本)、CPU 与内存(后厨的炉灶)。攻击流量 V_attack 叠加在正常流量 V_normal 之上,一旦总量逼近甚至超过 C,服务就进入“饱和”状态,新请求被拒之门外,老请求也被拖得极慢。

这样再看“挤店”就清晰了:它本质不是入侵(没有破门盗取),而是耗尽——把容量 C 撑满,让系统在机制上主动拒绝所有来客,包括真正的顾客。带宽、连接、处理器,三样里只要有一项被打满,整条服务链都会跟着瘫痪,这正是 DDoS 最阴险的地方。

S=Vnormal+VattackC\displaystyle S=\frac{V_{\text{normal}}+V_{\text{attack}}}{C}
这个公式用“饱和度 S”描述系统被撑满的程度:分子是涌进店的总客流量,分母是店能同时接待的上限。S > 1 时,店就“挤爆”了。
  1. 分子总流量:将正常流量与攻击流量相加,得到单位时间进入系统的全部请求量
    Vnormal+Vattack\displaystyle V_{\text{normal}}+V_{\text{attack}}
  2. 分母系统容量:C 是系统能承载的最大请求量,超过它就会出现排队与丢弃
    C\displaystyle C
  3. 比值判定过载S 大于 1 表示需求超过供给,系统进入饱和状态,服务不可用
    Vnormal+VattackC>1\displaystyle \frac{V_{\text{normal}}+V_{\text{attack}}}{C}>1

常见手法:恶意顾客的三种“配方”

挤店也有不同流派:有人堵门(打带宽),有人缠着服务员聊天不点菜(占连接),还有人把菜单翻来覆去却不下单(耗应用逻辑)。对应到 DDoS 世界,就是三类招牌手法。第一种是 SYN 洪泛:攻击者伪造海量“握手请求”发给服务器,只发 SYN 包却从不完成三次握手,服务器的半连接队列(等位本)被占满,正常用户握不上手,只能干等。第二种是放大攻击:攻击者把源 IP 伪造成受害者的地址,向 DNS、NTP 等公共服务器发送很小的查询,这些服务器会把大得多的响应包“反射”到受害者头上,小流量瞬间被放大几十上百倍。

第三种是 HTTP 洪泛,专打应用层:攻击者发送大量看似正常的 GET/POST 请求,或者把请求速度压到极慢,占住后端的连接线程不放,让 Web 服务器疲于应付。放大攻击的“威力”可以用公式估算:

知道“配方”才好对症下药:SYN 洪泛靠清洗层的连接代理与 SYN Cookie 化解,放大攻击靠关闭开放解析器与近源过滤抑制,HTTP 洪泛靠限流与挑战应答拦截。如同老中医先辨证再开方,防御 DDoS 的第一步永远是识别对方用的是哪一路“挤店拳法”。

B=∑i=1nAi×Pi\displaystyle B=\sum_{i=1}^{n}A_i \times P_i
放大攻击总带宽 B,等于每台反射服务器放大倍数 A_i 与其响应载荷 P_i 乘积的总和。攻击者只需发出小小的 P_i,服务器还他 A_i 倍的流量,n 台服务器一叠加,就成了一门“流量大炮”。
  1. 反射器数量n 表示攻击者可利用的开放反射服务器总数,例如开放的 DNS 解析器
    ∑i=1n\displaystyle \sum_{i=1}^{n}
  2. 单台放大倍数每台反射器对查询的响应放大倍数 A_i,DNS 可达几十倍
    Ai×Pi\displaystyle A_i \times P_i
  3. 累加求和把所有反射器贡献的放大流量加总,得到汇聚到受害者的总攻击带宽
    B=∑i=1nAi×Pi\displaystyle B=\sum_{i=1}^{n}A_i \times P_i

检测识别:从嘈杂人声中认出“挤店团伙”

火锅店的老保安有个绝活:干了十年,眼睛一瞟就知道今天人流正不正常——平时饭点排队二十桌,今天突然排到路口拐角,那一定有问题。DDoS 检测也是一样的思路,只不过把保安的“经验直觉”换成了可量化的统计学指标。核心概念叫流量基线:系统持续记录历史流量,算出平均值 μ 和波动幅度 σ,这两个数字就相当于“平时这个点应该有几十人、波动不超过几个人”的经验值。

一旦当前流量 x 明显偏离基线,检测系统就拉响告警。最常用的度量是 Z 分数,它表示“当前值比平均值高出了几个标准波动”:

检测的意义在于“抢时间”。攻击流量从发起到达峰往往只有几十秒,早一分钟发现,清洗和限流就能早一分钟生效。保安的直觉被量化成 Z 分数和 DPI 规则后,就能交给机器 7×24 小时盯着大门口,一有异动立刻喊人。

Z=x−μσ\displaystyle Z=\frac{x-\mu}{\sigma}
Z 分数把“偏离程度”归一化:Z 越大说明越反常。通常 Z > 3 就被视为异常——类比于今天门口排队的人数,比平时均值高出三个“正常波动幅度”以上,保安就该报警了。
  1. 偏离量计算用当前观测值减去基线均值,得到“多了多少”的绝对偏离
    x−μ\displaystyle x-\mu
  2. 按波动归一化除以标准差 σ,把绝对偏离换算成“几个正常波动”的相对量
    x−μσ\displaystyle \frac{x-\mu}{\sigma}
  3. 阈值判定Z 超过 3 触发异常告警;配合深度包检测(DPI)检查数据包载荷特征,可进一步确认是不是攻击流
    Z=x−μσ>3\displaystyle Z=\frac{x-\mu}{\sigma}>3

流量清洗:保安的“逐客令”

检测出异常后,火锅店的应对是“安检逐客”:保安在门口核对名单、查验身份,确认可疑的人带到旁边小黑屋,绝不放进就餐区。流量清洗(Traffic Scrubbing)就是这个动作的工程化版本。由于攻击流量直接打到源站时已无法招架,常见做法是用 BGP 路由协议把流量“牵引”到专门的清洗中心,而不是让它们直达源站——就像把疑似客人都先引到安检通道。

清洗中心内部有几样工具:黑洞路由(Blackhole Routing)是极端情况下的“壮士断腕”,把所有流量(包括正常流量)直接丢进黑洞,宁可错杀也不让服务崩溃;指纹识别根据数据包大小、协议行为、TLS 指纹等特征区分人还是机器;DPI 则深入检查报文内容,识别应用层攻击特征。清洗的终极难题是“误杀”——误把正常用户当攻击者。衡量清洗质量用精确率:

对保安而言,最忌讳的是把整条街的人都当坏人。清洗策略必须在召回率与精确率之间反复调优:阈值设严了误杀多,设松了漏洞大。这也是为什么流量清洗总要配合机器学习——让模型在海量流量中学习“好人”与“坏人”的细微差别。

P=TPTP+FP\displaystyle P=\frac{TP}{TP+FP}
TP 是正确拦截的攻击流量,FP 是被误杀的正常流量。P 越接近 1,说明保安的判别越准:既抓住了坏人,又没冤枉好人。
  1. 正确拦截数TP 是真正被识别并丢弃的攻击性请求,这是清洗的核心成果
    TP\displaystyle TP
  2. 误伤计数FP 是长得很像攻击、实际是正常用户的请求,被误杀就会造成业务损失
    TP+FP\displaystyle TP+FP
  3. 计算精确率被拦截的流量中真正是攻击的比例越高,清洗越精准
    P=TPTP+FP\displaystyle P=\frac{TP}{TP+FP}

速率限制:给店门装上“限流护栏”

商场每逢大促销都会在门口设围栏,顾客排成一队,每隔几秒放进去一批。为什么要限流?因为店内空间有限,一次性涌进太多人,收银台、货架、过道全都超载,体验反而更差。速率限制(Rate Limiting)就是网络世界的“分批放人”:它不区分请求是好人还是坏人,只规定每秒钟最多放行多少个请求,超出的先排队、排队太长就丢弃。

实现限流最经典的算法是令牌桶:系统以固定速率 ρ 往桶里放“令牌”,每个请求必须取走一枚令牌才能通过;桶的容量 B 决定了瞬时能容忍的突发量。时间 Δt 内最多放行的请求数为:

除了令牌桶,还有漏桶(恒定速率流出,像漏水的桶)、黑白名单(直接封禁已知恶意 IP)和挑战应答(CAPTCHA 验证码、滑块验证,把机器人挡在门外)。限流是“防挤店”的缓冲带——宁可让顾客多等一下,也不能让店先垮掉。它和清洗互补:清洗负责把坏人揪出来,限流负责在坏人还没被揪完时,保证店不被冲垮。

Tmax⁡=min⁡(B,ρΔt)\displaystyle T_{\max}=\min\left(B,\rho \Delta t\right)
令牌桶就像商场的放行规则:桶容量 B 是入口大厅能同时站的人数(突发上限),ρΔt 是这段时间新发放的“入场券”数量,二者取小,就是实际操作中放进去的人数上限。
  1. 新增令牌ρΔt 表示在 Δt 时间内按速率 ρ 向桶中补充的令牌数
    ρΔt\displaystyle \rho \Delta t
  2. 桶容量封顶桶最多存 B 个令牌,多出来的令牌直接丢弃,防止积压
    min⁡(B,⋯ )\displaystyle \min\left(B,\cdots\right)
  3. 放行上限取两者较小值,就是该时间段内最多允许通过的请求数
    Tmax⁡=min⁡(B,ρΔt)\displaystyle T_{\max}=\min\left(B,\rho \Delta t\right)

弹性扩容:开分店与“加后厨”

如果恶意顾客实在太多,门口保安和限流护栏都挡不过来,火锅店还有最后一招:开分店,把客流摊到多个门店去。DDoS 防御中的 Anycast 就是这个思路——让多个数据中心共享同一个 IP 地址,互联网路由协议会根据用户所在位置,自动把请求引导到“最近”的那个节点。攻击流量原本集中在一点,现在被天然散开到几十个节点上,每个节点各自消化一小部分,谁也挤不爆。

Anycast 效果可以用简单公式描述:总流量 L_total 被分散到 N 个节点后,每个节点平均承担:

弹性扩容并不仅仅是“多买几台服务器”,还包括:云清洗中心按需扩容清洗能力、CDN 把静态资源分发到边缘节点、Kubernetes 根据 CPU 和流量指标自动扩展 Pod 数量。开分店、加后厨、临时招人,核心是让容量 C 跟着流量动态变大——挤店的人再多,店越开越多,也就永远挤不爆了。

Li=LtotalN\displaystyle L_i=\frac{L_{\text{total}}}{N}
这是“人多力量大”的反向运用:恶意的人再多,摊到一百家分店,每家也就多排几桌而已。
  1. 总流量L_total 是攻击流量与正常流量之和,也就是所有顾客的总量
    Ltotal\displaystyle L_{\text{total}}
  2. 节点数量N 是参与 Anycast 的机房或清洗节点数目,分店越多分摊越薄
    N\displaystyle N
  3. 平均负载每节点平均承载 L_total 除以 N 的流量,节点数翻倍则单点压力减半
    Li=LtotalN\displaystyle L_i=\frac{L_{\text{total}}}{N}

部署策略:一套完整的“防挤店”预案

单靠任何一招都撑不了一场大型 DDoS 攻击,真正的防线是组合拳。想象火锅店的终极预案:门口保安查证(清洗)、护栏限流(限速)、全城分店联动(Anycast 扩容)、监控室 7×24 值班(检测),一旦触发警报,所有机制同步启动。网络侧的纵深防御也是这样层层设卡。

第一层是近源防护:在靠近攻击源头的 ISP 骨干网或运营商侧部署清洗设备,让攻击流量在源头附近就被丢弃,避免拥堵骨干链路。第二层是云清洗中心协同:当本地设备扛不住时,通过 BGP 把流量牵引到云端的超大带宽清洗集群,洗完后只把干净流量回注源站。第三层是本地限流与业务降级:应用层实施令牌桶、挑战应答,必要时关闭非核心功能,保障核心交易链路。每一层都有各自的拦截率,构筑起层层递进的纵深防御:

除了技术防线,还要有应急预案:明确谁来值守告警、谁来操作 BGP 牵引、业务降级到什么程度、何时联系云服务商。DDoS 防御不是买一个产品就结束,而是一套持续演练的运营体系——就像火锅店的消防演习,平时多流汗,战时才能不流血。

D=1−∏i=1n(1−di)\displaystyle D=1-\prod_{i=1}^{n}\left(1-d_i\right)
每层防御的拦截率是 d_i,漏过去的概率是 (1-d_i)。所有层都漏掉的概率是它们相乘,总防御率 D 就是 1 减去这个“全漏”概率。层与层之间互补,整体防线就几乎滴水不漏。
  1. 单层漏防率每层防线拦截率 d_i,则这一层放跑攻击的概率为 (1-d_i)
    1−di\displaystyle 1-d_i
  2. 全层连乘所有防线都失效的概率是各层漏防率的连乘,层数越多值越小
    ∏i=1n(1−di)\displaystyle \prod_{i=1}^{n}\left(1-d_i\right)
  3. 总防御率用 1 减去“全部漏防”的概率,得到至少有一层拦住的综合防御率
    D=1−∏i=1n(1−di)\displaystyle D=1-\prod_{i=1}^{n}\left(1-d_i\right)

AI 应用场景

场景一:云清洗中心流量调度

阶段:流量清洗与 BGP 牵引

解决的问题:攻击流量直达源站导致业务中断。传统做法靠人工切换路由,动辄数分钟,攻击每秒都在烧钱;AI 自动清洗平台通过实时流量分析识别攻击特征,分钟级完成 BGP 牵引、清洗、回注全流程,把“手工救火”变成“自动防汛”。

具体案例:某电商大促期间遭遇 300Gbps UDP 放大攻击,运维团队启用 Anycast 高防 IP,将流量分散到华北、华东、华南三个清洗节点,各节点自动过滤后仅 20Gbps 到达源站,支付链路全程可用,零订单丢失。

场景二:游戏网关防 SYN/HTTP 洪泛

阶段:检测识别与速率限制

解决的问题:开服瞬间海量连接请求涌入,半连接队列溢出,正常玩家登录超时。传统方案是盲目扩容,成本高且见效慢;现在在网关上用 Z 分数检测 + 令牌桶限流 + 可疑 IP 挑战应答,先识别机器人再放行。

具体案例:某手游发布新版本,登录网关监测到 Z 分数超过 6 的请求峰值,自动触发限流策略:单 IP 每秒最多 3 次登录尝试,超限弹出滑块验证。恶意流量被挡在业务之外,正常玩家登录成功率保持在 99.5%。

场景三:金融核心系统防 DNS 放大攻击

阶段:弹性扩容与近源防护

解决的问题:DNS 放大攻击动辄数百 Gbps,且难以溯源。金融企业通常在 ISP 近源侧部署清洗设备,同时将权威 DNS 托管到多个云节点(Anycast),攻击流量在源头附近即被丢弃,核心交易系统无感。

具体案例:某银行将域名解析服务接入“三地四中心”的 Anycast 集群,某线路遭受 400Gbps DNS 放大攻击时,路由自动将解析请求分散到其余节点,业务连续率 100%,监管零通报。

Python 演示

python84 行
import timeimport randomfrom collections import deque  class TokenBucket:    """令牌桶限流器:控制每秒放行的请求数"""     def __init__(self, rate, capacity):        self.rate = rate          # 令牌补充速率(个/秒)        self.capacity = capacity  # 桶容量(最大突发)        self.tokens = capacity        self.last = time.time()     def allow(self):        now = time.time()        self.tokens = min(self.capacity,                          self.tokens + (now - self.last) * self.rate)        self.last = now        if self.tokens >= 1:            self.tokens -= 1            return True        return False  class DDoSGuard:    """DDoS 防御:基线检测 + 流量清洗 + 限流"""     def __init__(self, base_rate=100, bucket_rate=120, bucket_cap=200):        self.base_rate = base_rate        self.history = deque(maxlen=60)  # 最近 60 秒流量窗口        self.bucket = TokenBucket(bucket_rate, bucket_cap)     def zscore(self, x):        n = len(self.history)        if n < 10:            return 0.0        mean = sum(self.history) / n        var = sum((v - mean) ** 2 for v in self.history) / n        std = var ** 0.5        return (x - mean) / std if std > 0 else 0.0     def detect(self, rps):        """返回是否处于攻击状态(Z 分数超过 3)"""        return self.zscore(rps) > 3.0     def clean(self, src_ip):        """流量清洗:黑名单中的地址直接丢弃"""        return src_ip.startswith('192.0.2.')  # 假定的攻击 IP 段     def handle(self, src_ip):        if self.clean(src_ip):            return False  # 被清洗丢弃        return self.bucket.allow()  def simulate(seconds=30):    guard = DDoSGuard()    random.seed(42)    attack_ips = ['192.0.2.%d' % i for i in range(1, 11)]     for t in range(seconds):        # 构造流量:前 10 秒建立正常基线,之后攻击流量暴涨        rps = guard.base_rate + random.randint(-10, 10)        if t >= 10:            rps += 800  # 攻击流量瞬间涌入        if t < 10:            guard.history.append(rps)  # 冻结基线,便于演示稳定告警        attacked = guard.detect(rps)         # 模拟每个请求        if attacked:            src = random.choice(attack_ips)        else:            src = '203.0.113.%d' % random.randint(1, 254)         passed = guard.handle(src)        status = '攻击!' if attacked else '正常 '        result = '放行' if passed else '丢弃'        print('t=%2d  rps=%4d  %s  清洗+限流: %s' % (t, rps, status, result))  if __name__ == '__main__':    simulate()
目的:用 30 秒模拟数据演示“基线检测 → 攻击告警 → 清洗黑名单 → 令牌桶限流”的完整防御链路。
  1. self.tokens = min(self.capacity, self.tokens + (now - self.last) * self.rate)令牌按速率补充,但桶容量封顶,防止突发令牌积压
  2. guard.history.append(rps)前 10 秒持续把流量写入滑动窗口,建立“平时客流”基线
  3. def zscore(self, x)用 Z 分数衡量当前流量偏离基线的标准差倍数,是检测告警的核心
  4. if t >= 10: rps += 800模拟攻击流量瞬间暴涨,如同恶意顾客同时涌向店门
  5. guard.handle(src)先过清洗黑名单(丢弃恶意 IP),再进令牌桶(限速),两层联动
  6. random.seed(42)固定随机种子,让每次运行结果一致,方便排查与教学

常见误区

误区以为防火墙或安全组能直接挡住 DDoS,加几条规则就万事大吉,不需要其他防护。

正解防火墙是有状态会话检查,它必须逐包维护连接状态,面对海量流量时自身就会成为瓶颈。DDoS 的目标是带宽与资源耗尽——带宽被打满时,数据包根本到不了防火墙;半连接队列被打满时,防火墙也无力回天。真正有效的方案是流量清洗、速率限制、弹性扩容多层配合,防火墙只是其中一环。类比火锅店:门口保安再厉害,也挡不住整条街的人流涌过来。

为何常见:防火墙是最常见的边界安全设备,人们容易把所有外网攻击都默认交给它处理,忽略了 DDoS 是“量级碾压”而非“漏洞利用”。

误区把带宽从 1G 升级到 100G,攻击就打不垮我了。

正解带宽只是“马路宽度”,SYN/HTTP 洪泛消耗的是连接表、CPU、应用线程等计算资源,带宽再宽也无济于事。放大攻击还能把 1Mbps 的查询放大成 100Mbps 的响应,任何单链路带宽都可能被瞬间打满。路再宽,红绿灯(连接与计算资源)也能被堵死。

为何常见:从直觉上“攻击 = 堵路”,让人误以为加宽道路就能解决,忽略了资源类型的多样性。

误区清洗和限流都是“丢包”,没啥区别,用一个就行。

正解清洗的核心是“识别恶意并丢弃”,重视区分,依赖 DPI、指纹、基线检测来判断谁是坏人;速率限制的核心是“统一约束总量”,不区分善恶,只保证每秒放行数不超过阈值。一个像保安逐个查证,一个像商场门口分批放人,是两道完全不同的工序。实际防御中两者缺一不可:清洗提高精度,限流兜住总量。

为何常见:从外部视角看,两者都是“拦下了一些包”,底层机制和目标却大不相同,容易混为一谈。

误区买了高防 IP 或云清洗服务,防御就结束了,源站不用再做任何保护。

正解高防 IP 通常只清洗被牵引到它的流量,一旦源站 IP 泄露(例如绕过 CDN 直接解析到源站),攻击者就能绕过防护直捣黄龙。还需要做好源站 IP 隐藏、业务层限流、监控告警和应急预案。好比给火锅店换了防爆大门,后门窗户不锁,恶意顾客照样能溜进来。

为何常见:厂商宣传“一键接入、自动防御”给用户造成了部署即终点的错觉,忽视了攻击者会寻找防御盲区。

面试题

Q1. DDoS 攻击的核心目标是什么?

单选题 · easy

  • A.窃取服务器上的敏感数据
  • B.耗尽目标系统资源使其不可用← 正确答案
  • C.篡改网站页面内容
  • D.在服务器上安装后门程序

答案:B。DDoS 是“分布式拒绝服务”,核心是让服务不可用,而不是窃取或篡改。类比火锅店被挤爆门槛,目的是让顾客进不来,而不是偷菜。A、C、D 分别属于数据窃取、内容篡改、权限维持类攻击,与 DDoS 的“资源耗尽”本质不同。

Q2. SYN 洪泛攻击主要消耗服务器的什么资源?

单选题 · easy

  • A.磁盘存储空间
  • B.CPU 的一级缓存
  • C.半连接队列(内存中的连接表)← 正确答案
  • D.网卡的物理带宽

答案:C。SYN 洪泛发送大量握手请求但不完成三次握手,半连接队列被占满后,正常连接无法建立,这是典型的“连接资源耗尽”。类比恶意顾客只喊“我要点菜”却不真下单,占着服务员的注意力。磁盘、缓存、带宽都不是 SYN 洪泛的首选打击目标。

Q3. 流量基线检测中,Z 分数表示什么?

单选题 · easy

  • A.当前流量与基线均值的偏离程度(以标准差为单位)← 正确答案
  • B.攻击流量的绝对大小
  • C.服务器当前的 CPU 使用率
  • D.单个数据包的字节长度

答案:A。Z 分数 Z=(x-μ)/σ 衡量当前观测值偏离历史均值的标准差倍数,Z>3 判定异常。类比保安发现今天门口排队人数比平时均值高出好几个“正常波动幅度”。B、C、D 描述的是绝对量或资源指标,与 Z 分数的统计意义不符。

Q4. 下列哪项是流量清洗阶段常用的引流技术?

单选题 · mid

  • A.BGP 路由牵引← 正确答案
  • B.令牌桶算法
  • C.CAPTCHA 验证码
  • D.CDN 缓存预热

答案:A。BGP 牵引把原本直达源站的流量改道送入清洗中心,清洗后再回注干净流量,是清洗的“入口”环节。令牌桶属于速率限制,CAPTCHA 属于应用层人机识别,缓存预热属于性能优化,都与“引流到清洗中心”无关。

Q5. 关于 Anycast 抗 DDoS 的原理,正确的说法是?

单选题 · mid

  • A.它会把攻击流量反弹给攻击者
  • B.多个节点共享同一 IP,流量按路由分散到多个节点,单点压力被摊薄← 正确答案
  • C.它加密所有流量,使攻击者无法解析
  • D.它自动封禁所有发起连接的 IP

答案:B。Anycast 让多个机房广播同一 IP,路由协议把请求送到“最近”节点,攻击流量被天然分散。类比开分店,恶意顾客被拆散到各家门店,每家都不至于挤爆。反弹流量、加密、自动封禁都不是 Anycast 的能力。

Q6. 令牌桶算法中,桶容量 B 主要决定什么?

单选题 · mid

  • A.请求的平均处理耗时
  • B.允许的最大突发流量← 正确答案
  • C.服务器的总出口带宽
  • D.黑名单的条目上限

答案:B。令牌桶以固定速率补充令牌,桶容量限制了瞬时突发能取走的令牌总数,B 越大越能容忍突发。类比商场入口大厅能临时容纳的人数。平均耗时、出口带宽、黑名单长度都与桶容量无直接关系。

Q7. 为什么 DDoS 流量清洗很难完全避免“误杀”?

单选题 · hard

  • A.因为清洗设备处理速度一定比攻击流量慢
  • B.因为攻击者常模拟正常行为,特征与正常流量重叠,严格分类会误伤正常用户← 正确答案
  • C.因为清洗中心必须把所有流量都丢弃才能安全
  • D.因为网络协议本身不允许选择性丢弃数据包

答案:B。攻击者会伪装成正常用户(如慢速 HTTP 请求、随机 UA),统计特征与真实用户高度重叠,拦截阈值设严就误伤正常用户,设松就漏放攻击,只能靠精确率 P=TP/(TP+FP) 权衡。类比保安在人群中找可疑分子,动作太大会误拦普通顾客。A、C、D 均不符合实际机制。

Q8. 以下哪些属于常见的 DDoS 攻击手法?

多选题 · mid

  • A.SYN 洪泛← 正确答案
  • B.DNS 放大攻击← 正确答案
  • C.SQL 注入
  • D.HTTP 洪泛← 正确答案

答案:ABD。SYN 洪泛消耗半连接队列,DNS 放大利用开放解析器反射放大流量,HTTP 洪泛打满应用层资源,都是典型 DDoS 手法。SQL 注入属于数据层注入攻击,目标是窃取或篡改数据,不属于拒绝服务类攻击。

Q9. 构建多层 DDoS 防御体系时,正确的做法包括?

多选题 · hard

  • A.在近源侧部署清洗设备,尽早丢弃攻击流量← 正确答案
  • B.只依赖单一云清洗服务商,简化运维
  • C.云清洗中心 + 本地限流 + Anycast 分流协同配合← 正确答案
  • D.攻击发生时人工逐条封禁 IP 地址

答案:AC。近源防护能在源头附近拦截,云清洗、本地限流、Anycast 构成纵深防御,是生产环境的主流组合。单一依赖没有冗余,人工逐条封禁应对海量伪造 IP 也不现实。类比防挤店不能只靠一个保安,要门口、护栏、分店层层设卡。

Q10. 某游戏公司遭遇 HTTP 洪泛攻击,现有防护手段包括 CDN 缓存、令牌桶限流、CAPTCHA 验证码、WAF 规则。以下处置合理的有?

多选题 · extreme

  • A.开启 CDN 缓存静态资源,缓解源站压力← 正确答案
  • B.用令牌桶对单 IP 请求限速← 正确答案
  • C.对可疑请求弹出 CAPTCHA 人机验证← 正确答案
  • D.关闭所有动态接口,业务完全静态化

答案:ABC。CDN 缓存可挡静态洪泛,令牌桶限制单 IP 速率,CAPTCHA 区分人机,都是应对应用层洪泛的合理手段。关闭所有动态接口会让正常用户也无法登录、下单,属于“自损一千”的错误做法。类比火锅店在门口查预约码,而不是把店门直接关了。