如果你用过公共 DNS,可能注意到一个现象:8.8.8.8、1.1.1.1、223.5.5.5 这些地址似乎"无处不在",无论你在中国、美国还是欧洲,访问的都是同一个 IP,延迟却都很低。这背后靠的就是 Anycast(任播)技术——同一个 IP 地址被宣告在多个地理位置,网络会把你的请求路由到"离你最近"的那个节点。
Anycast 是现代互联网基础设施里非常核心却容易被忽视的技术:全球 DNS 根服务器、主流公共 DNS、大型 CDN、部分 DDoS 防护都是基于它构建的。理解 Anycast,你就能明白"为什么这些服务能做到全球低延迟""为什么攻击流量会被分散"这些问题。这篇文章从原理讲到应用,再讲到它的局限和运维注意事项,面向想搞懂网络架构的运维和开发者。
需要先说清楚一个容易混淆的点:Anycast 是"多个节点共享同一个 IP",这和传统的"一个 IP 对应一台机器"完全不同。它依赖路由协议(主要是 BGP)来动态决定流量走向,所以它的行为高度依赖互联网的路由环境,也因此有独特的优点和坑。
一、Anycast 的基本原理
要理解 Anycast,先分清三个"cast":
| 类型 | 含义 | 例子 |
|---|---|---|
| Unicast(单播) | 一个地址对应一个接收者 | 普通服务器 IP |
| Multicast(多播) | 一个地址对应一组接收者,同时送达 | 视频会议、路由协议 |
| Broadcast(广播) | 一个地址对应同网段所有主机 | 局域网 ARP |
| Anycast(任播) | 一个地址在多个位置宣告,送达最近的一个 | DNS 根、CDN、公共 DNS |
Anycast 的做法是:多个分布在不同地理位置的节点,同时用 BGP 向互联网宣告同一个 IP 前缀。互联网上的路由器各自维护路由表,当它们看到同一个前缀有多个可达路径时,会按 BGP 选路规则(主要看 AS 路径长度、MED、本地优先级等)选择一条"最优"路径。由于不同区域的路由器看到的路径不同,"最优"的定义也不同,于是全球的流量就被自动导向了各自最近/最优的那个节点。
关键在于"最近"不是在物理距离意义上,而是在 BGP 路由的度量意义上——通常等价于网络跳数少、延迟低,但不绝对。多数情况下 BGP 的最优路径也确实是延迟较低的路径,所以 Anycast 实际效果接近"就近接入"。更严谨地说,Anycast 实现的是"路由就近",效果取决于 ISp 之间的互联关系。
二、Anycast 的关键特性
Anycast 有几个区别于普通单播的重要特性,理解了它们才能用好它:
特性一:请求就近,但回程未必对称。 客户端到 Anycast 节点的去程通常是最优路径,但回程走的是另一套路由,未必是同一条路。这个不对称在某些应用里要注意,对无状态的请求应答服务(DNS 查询)完全无影响。
特性二:无状态协议最适合。 Anycast 的致命限制是:如果同一个 TCP 连接的不同数据包被路由到了不同节点,连接就会断。因为 BGP 路由变化时,同一个客户端到同一 IP 的流量可能突然被导向另一个节点,而那个节点没有这个连接的状态。所以 Anycast 最适合同一个请求-应答在一个包内完成的无状态服务(如 DNS over UDP),或者做了会话保持/共享状态的服务。TCP 长连接用 Anycast 需要额外机制(如一致的会话粘性、连接迁移),这也是为什么 DNS over TCP、HTTP 用 Anycast 要更小心。
特性三:天然抗 DDoS 分散。 攻击者打一个 Anycast IP,流量会被分散到全球各个节点,每个节点只承受一部分。这也是大型 DNS 和 CDN 抗攻击能力强的原因之一——攻击流量被摊薄了。
特性四:故障自动切换。 某个 Anycast 节点宕机后,它宣告的 BGP 路由被撤销,全球路由器会自动把流量改导向其他节点。对客户端来说,IP 没变,只是延迟可能略增,感知很小。这提供了很高的可用性。
三、Anycast 的典型应用
应用一:公共 DNS 与根域名服务器。 这是 Anycast 最经典的舞台。全球 13 组根服务器(A 到 M)每一个实际上都是 Anycast 集群,在全球有大量镜像节点。你查根域时,请求会到离你最近的镜像。公共 DNS 服务(如 Cloudflare 的 1.1.1.1、Google 的 8.8.8.8、国内的 223.5.5.5 和 119.29.29.29)也都用 Anycast 在全球部署。
应用二:CDN 边缘节点。 CDN 把静态内容缓存在全球边缘节点,用 Anycast(或基于 DNS 的 GSLB)把用户导向最近节点。Anycast 的好处是不依赖客户端 DNS,直接由网络层决定就近,响应更快、更抗 DNS 污染。
应用三:DDoS 防护清洗。 高防 IP 用 Anycast 把攻击流量分散到全球清洗中心,单点不会被压垮。
应用四:全球服务接入。 一些全球化 API、游戏服务器、物联网平台用 Anycast 做统一入口,让全球用户以低延迟接入同一服务地址,同时获得就近容灾。
下表对比 Anycast 和传统的基于 DNS 的流量调度:
| 维度 | Anycast | DNS 调度(GSLB) |
|---|---|---|
| 决策层 | 网络层(BGP 路由) | 应用层(DNS 应答) |
| 就近依据 | 路由最优路径 | 解析来源 IP、探测延迟 |
| 切换速度 | 秒级~分钟级(BGP 收敛) | 受 TTL 影响,可能较慢 |
| 客户端依赖 | 无,IP 不变 | 依赖 DNS,可能被污染/缓存 |
| 状态保持 | 需要额外机制 | 天然按会话(DNS 固定解析) |
| 典型用途 | DNS 根、公共 DNS、CDN 入口 | 多机房业务调度、灰度 |
四、Anycast 的局限与运维注意
Anycast 不是万能药,它有几个必须知道的局限:
局限一:路由抖动导致连接中断。 BGP 路由不稳定时(抖动),流量可能在节点间来回切换,破坏有状态连接。对于 TCP 服务,这会表现为连接莫名重置。所以 TCP + Anycast 需要对连接状态做共享或粘性处理。
局限二:路由"就近"未必延迟最低。 BGP 选路基于策略而非延迟,某些情况下会出现"绕远路":客户端被导向了地理上更远但 BGP 路径更短的节点。企业网络、跨运营商互联质量差的地区尤其容易碰到。
局限三:节点一致性要求高。 Anycast 的多个节点要对客户端表现为"同一个服务",配置、证书、内容、会话必须一致或共享。任何一个节点配置不一致,都会导致部分用户拿到错误结果,而且难以复现(因为不知道用户被导到了哪个节点)。
局限四:调试困难。 你无法轻易知道某个用户被导到了哪个 Anycast 节点,排查问题要依赖节点的日志聚合和带客户端信息的上报。
运维 Anycast 服务时的注意事项:
- 统一配置与发布:所有节点用同一套配置模板和自动化发布,证书同步更新,避免"部分节点旧配置"。
- 健康检查与路由自动撤销:节点要能检测自身故障并主动撤销 BGP 宣告,把流量让给健康节点。常用工具如 ExaBGP、BIRD 配合健康检查脚本。
- 监控每个节点:单独监控各节点的流量、延迟、错误率,因为总量正常不代表每个节点正常。
- 写清客户端 IP 归属:Anycast 场景下客户端看到的源 IP 可能因节点不同而异,做访问控制、限速、日志分析时要考虑这一点。
# 运维 Anycast 边缘节点时常用的一些观测命令(以 Linux 为例)
# 1. 确认本节点宣告的地址和 BGP 状态(以 BIRD 为例)
birdc show protocols all
birdc show route
# 2. 确认地址绑在回环网卡上(Anycast 节点常把服务 IP 绑在 lo,避免被当作本地地址处理)
ip addr show lo | grep
# 3. 健康检查脚本思路:服务异常时撤销路由宣告
# 例如检测到本地 web 进程不健康,调用 birdc disable
五、自己能不能用 Anycast?
个人或中小企业想自己搭 Anycast,也不是完全不行,但门槛比普通部署高:
- 需要 AS 号和 IP 前缀:要有自己的公网 IP 前缀(通常 /24 起,IPv6 可以更小)和 Autonomous System Number,才能对上游做 BGP 宣告。
- 需要多个位置的节点和上游支持:至少两个不同机房/地区,且这些机房的上游允许你宣告同一前缀(有些 IDC 不支持)。
- 需要路由运维能力:配置 BGP(BIRD、FRR、ExaBGP 等)、处理路由聚合和过滤,运维复杂度不低。
- 替代方案:如果只是想要"全球低延迟接入",用现成 CDN(本身就是 Anycast)或云厂商的全球加速(Global Accelerator)产品,比自建 Anycast 省事得多。主流云厂商都有这类加速服务,把流量接入其全球 Anycast 网络,无需自己维护 BGP。
结论是:自建 Anycast 适合有网络团队和明确需求的场景(如自营 DNS、游戏加速);普通业务用 CDN 或云厂商的全球加速产品即可享受 Anycast 好处,不必自己造轮子。
六、Anycast 与 DNS 的结合细节
DNS 是最典型的 Anycast 用户,这里再深入一点它的特殊性。
DNS 查询多数走 UDP,单个请求-应答在无状态层面完成,天然适合 Anycast。但 DNS 也有走 TCP 的场景:应答太大超过 UDP 限制时会用 TCP 重试(或在 EDNS0 协商后自动切换),区域传送(AXFR/IXFR)也走 TCP。这些 TCP 连接在 Anycast 下要注意会话一致性。现代公共 DNS 通常对 TCP 查询做就近处理,并通过合理的实现让同一个 TCP 连接不轻易跨节点迁移。
另一个细节是 EDNS Client Subnet(ECS)。CDN 和智能 DNS 为了准确判断用户位置,会在 DNS 查询里携带客户端子网信息。ECS 是应用层机制,和网络层的 Anycast 就近是互补的:Anycast 决定"查询打到哪个 DNS 节点",ECS 帮助 DNS 决定"返回哪个 CDN 节点"。两者配合才能实现端到端的最优解析。
# 观察 DNS 查询经过的 Anycast 节点(查看返回的服务器地址)
dig www.example.com +short
dig @1.1.1.1 www.example.com +stats # 看 SERVER 字段和相关统计
# 对比不同来源解析同一域名的结果,观察 CDN 就近效果
dig @223.5.5.5 www.example.com A +short
常见问题
Q:Anycast IP 到底"在哪台服务器上"?
没有唯一答案。这个 IP 同时存在于多个节点,具体哪台为你服务取决于你所在网络的路由决策。同一个人换个网络环境,可能连的是不同节点。
Q:Anycast 和 CDN 是一回事吗?
不是。Anycast 是一种网络层寻址技术,CDN 是一套内容分发的体系。CDN 可以用 Anycast 做入口调度,也可以用 DNS 调度,两者是"工具"和"方案"的关系。
Q:为什么 Anycast 服务不适合长连接?
因为 BGP 路由变化会让同一连接的数据包被送到不同节点,而各节点没有彼此连接的状态,连接会断。除非做会话共享或连接粘性,否则长连接(如 WebSocket、数据库)要慎用 Anycast。
Q:Anycast 真的能抗 DDoS 吗?
能分散,不是免疫。攻击流量会被 BGP 路由分散到多个节点,降低单点压力,但攻击总量若超过整体容量仍会出问题。它的价值在于"摊薄"和"无单点"。
Q:中小企业需要自建 Anycast 吗?
通常不需要。用 CDN 或云厂商的全球加速产品即可获得 Anycast 带来的就近接入和抗攻击能力,自建需要 AS 号、IP 前缀、BGP 运维能力,成本高。
总结
Anycast 是"同一 IP 在多个地理位置宣告、由 BGP 路由决定就近送达"的网络技术,与单播"一 IP 一机"的模式根本不同。
它的核心优势是就近低延迟、天然抗 DDoS 分散、节点故障自动切换;核心局限是有状态连接(尤其 TCP 长连接)容易被路由抖动打断,且"就近"基于路由而非延迟,可能绕远。
典型应用包括 DNS 根与公共 DNS、CDN 边缘入口、高防清洗、全球服务接入;DNS 场景因多为无状态 UDP 查询而最契合,配合 EDNS Client Subnet 可实现端到端最优解析。
运维 Anycast 的关键是统一配置与自动发布、节点健康检查自动撤销路由、逐节点监控流量和错误率,并注意客户端 IP 归属差异对访问控制和日志的影响。
个人和中小企业不必自建 Anycast,用 CDN 或云厂商的全球加速产品即可享受其收益;自建需 AS 号、IP 前缀和 BGP 运维能力,只适合有明确需求和技术团队的场景。
企业QQ咨询




