一个 IP 对应一台服务器,还是对应多台
单播
一个 IP 恰好对应一台服务器
任播
一个 IP,从多个位置同时通告
任播 DNS 详解
通常情况下,一个 IP 地址对应一台特定的机器,通过一条特定的网络路径到达。任播(anycast)有意打破了这一假设:同一个 IP 地址会同时从全球多个物理上相互独立的地点对外通告,再由互联网路由把每个请求送到在拓扑上离发送方最近的那个通告地点。这里的“最近”不一定是物理距离最近,而是网络路径上最近。
DNS 基础设施为何如此依赖任播
1.1.1.1 和 8.8.8.8 这样的公共解析器都是任播地址。您在东京查询 1.1.1.1,另一个人在柏林查询同一个地址,双方实际连到的是不同的物理服务器,也就是各自网络上最近的那一台,而两边配置里填写的却是完全相同的 IP 地址。正因如此,一个好记的 IP 就能在全球范围内持续提供低延迟,而不是让所有人不论身在何处,都路由到同一个物理数据中心。
| 单播 | 任播 | |
|---|---|---|
| 一个 IP 对应 | 恰好一台物理服务器 | 同时对应多台物理服务器 |
| 路由的决定方式 | 一条固定的路径 | 拓扑上最近的那个通告地点 |
| 某个地点下线时 | 服务变得不可达 | 流量转移到次近的地点 |
| DDoS 风险 | 攻击流量集中在单一目标上 | 攻击流量自然分散到每个地点 |
- 韧性:某个任播地点下线时,路由会直接转向次近的地点,客户端往往毫无察觉。
- 它并非 DNS 独有,CDN 和其他一些对延迟敏感的服务也采用同样的底层技术。
实际意义
要从任播中获益,您不需要做任何不同的配置。它完全发生在网络路由层,发起查询的应用对此毫无感知。了解它的主要价值在于解释一个现象:大型公共解析器能在全球保持快速、可用,而您不必像选择云数据库或计算实例那样,去挑选某个特定区域的端点。
“拓扑上最近”的背后机制是 BGP
“网络路径上最近”并不是由某种实时测量物理距离的机制决定的。每个通告任播地址的网络,都是通过 BGP 来通告的。BGP 是把互联网上各个独立网络连接起来的路由协议,沿途每台路由器都会按 BGP 自己的度量标准,选出当前看起来最短的那条通往该地址的路径,通常指经过的网络跳数最少,而不是公里数最少。实际中,这通常与物理上的就近大体吻合,但并不完全一致:如果某条路径在 BGP 看来恰好更短,请求偶尔会被路由到稍远一些的地点,尤其是在网络故障或存在特殊对等互联安排的情况下。
为什么任播并不适用于所有场景
任播非常适合单次 DNS 查询与应答这类简短、无状态的交互:即便后续的数据包恰好被路由到与第一个包不同的物理服务器,也没有什么可损失的。但它不适合长时间保持的有状态连接:如果底层网络路径在连接中途发生变化(路由抖动、对等关系调整),一个 TCP 会话就可能被送到与起始端点不同的另一台物理服务器,由于新服务器根本不知道这个连接存在过,连接就会直接中断。这也是任播与 DNS 及其他基于 UDP 的请求-响应协议联系如此紧密,却很少用于长时间运行的数据库连接或视频流的原因之一。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
相关阅读
为什么查询结果显示的是 CDN,而非源站
访客
查询该域名
CDN 边缘节点
104.21.x.x
DNS 返回的就是它
源站服务器
真实 IP,从不暴露
CDN 如何借助 DNS 调度全球流量
内容分发网络真正的奥妙发生在 DNS 层,早在任何一个字节的内容被请求之前,流量的去向就已经决定了。
一个主机名,多条 A 记录
第 1 个答案
93.184.216.34
第 2 个答案
93.184.216.35
第 3 个答案
93.184.216.36
解析器会返回所有记录,通常按轮换顺序
DNS 轮询详解:在多个 IP 之间分担流量
了解 DNS 轮询如何返回多个地址,它在负载分配方面能做什么、不能做什么,以及缓存如何影响实际观察到的结果。
一个主机名,多条 A 记录
第 1 个答案
93.184.216.34
第 2 个答案
93.184.216.35
第 3 个答案
93.184.216.36
解析器会返回所有记录,通常按轮换顺序
DNS 负载均衡:方法、优势与局限
对比基于 DNS 的流量分配与应用负载均衡器,了解 TTL、健康检查和区域化应答如何影响服务可用性。