Anycast 科普:一个 IP,全球都有

1.1.1.1 在全球任何地方 ping 都是低延迟,一个 IP 怎么做到的?小够讲清 Anycast 任播的原理、和单播的区别、它的缺点,以及和买 VPS 的关系。

我是小够。今天讲个听起来像魔法、原理却很朴素的技术:Anycast(任播)。

一个神奇的现象

Cloudflare 的公共 DNS 1.1.1.1,你在北京 ping 它延迟 20ms,在洛杉矶 ping 它延迟 10ms,在法兰克福 ping 它延迟 15ms。一个 IP 地址,怎么在全球各地都这么快?

答案就是 Anycast:同一个 IP 地址,在全球多个地方同时广播。BGP 选路时,你的请求会被自动送到离你最近(按路由度量)的那个节点。你在北京,就去了亚洲的节点;他在洛杉矶,就去了美西的节点。大家用的都是 1.1.1.1,但连的根本不是同一台机器。

先讲单播,才懂任播

平时 VPS 用的 IP 叫 Unicast(单播):一个 IP 只属于一台机器,全世界 ping 它,数据都要跑到那台机器去。北京 ping 洛杉矶的 VPS,150ms 跑不掉,因为数据真的飞了一万公里。

Anycast 反过来:IP 是共享的,离谁近就去谁那。DNS 根服务器(全球 13 组根,靠 Anycast 扩展出上千个实例)、Cloudflare、Google 的 8.8.8.8,玩的都是这一套。

BGP 是怎么实现的

技术上很简单:多个地方的路由器向 BGP 通告"我能到 1.1.1.1",BGP 按 AS 路径长短选最优,每个地区的流量就去了最近的通告点。不需要什么黑魔法,就是 BGP 的基本功。

任播的缺点

天下没有免费的午餐,Anycast 有两个硬伤:

  1. 不适合长连接:如果 BGP 路由发生变化,你的下一次请求可能被送到另一个节点,之前的会话状态就没了。所以 Anycast 只适合无状态的服务(DNS 查询),不适合需要保持连接的业务。
  2. 排错困难:出问题时,你都不知道自己连的是哪个节点,抓包定位一头雾水。

这就是为什么你的 VPS 不用 Anycast:网站、SSH、数据库都要长连接,Anycast 玩不转。

和买VPS的关系

说实话,关系不大,但要知道它的存在,免得被忽悠:

  1. VPS 极少用 Anycast:你的 VPS 要跑网站、跑服务,需要固定连到同一台机器。商家如果拿 Anycast 当卖点卖 VPS,多半是在凑字数。
  2. CDN 场景是它的主场:Cloudflare 这类 CDN 用 Anycast 让全球用户都连到最近的节点,这就是为什么套了 CDN 的网站全球访问都快。建站时套 CDN,相当于免费蹭了 Anycast 的好处。
  3. DDoS 防护也用它:攻击流量被分散到全球多个清洗节点,这也是高防服务能扛大流量的原理之一。anycast + 清洗中心,是高防的标准架构。

任播的部署:比想象中简单

技术上就是 BGP 的基本功:多地路由器通告"我能到 1.1.1.1",BGP 按 AS 路径选最优,各地流量去最近的点。不需要黑魔法。

部署方要做的:在全球多机房放同样的服务,通告同样的 IP。Cloudflare 几百个节点,1.1.1.1 的实例遍布各大洲,这就是它哪里都快的原因。

任播的局限:状态是难题

任播不适合有状态的长连接:TCP 会话绑在某台服务器上,路由一切换,会话就断了。所以任播多用于 DNS、CDN 这种无状态或短连接场景。

选 VPS 时:任播 IP 适合做 DNS、做入口,不适合跑需要长连接的业务。场景对了才是神器。

一句话总结

Anycast 是"一个 IP,多地服务"的技术,DNS 和 CDN 的标配,和你买 VPS 的决策基本无关。知道它,下次看到有人拿它吹 VPS,你能会心一笑;建站套 CDN 时,你能明白快的原理。