CDN:我的 DNS 怎么会根据访问者的位置提供不同的 IP?

CDN:我的 DNS 怎么会根据访问者的位置提供不同的 IP?

我发现这个解释CDN 的工作原理。但有一件事我不太明白。假设我在我的位置设置了多个 DNS 服务器,它们使用名称服务器域dns1.example.comdns2.example.comdns3.example.com。这些 DNS 服务器能够根据访问者的位置(ping、地理数据库、浏览器语言等)提供服务器 IP。现在我www.example.org在注册中心为我的域名更新此名称服务器设置。

现在,第一个带有www.example.org过期 TTL 的请求尝试解析该域。它询问:

  1. 本地 .hosts/DNS,如果 TTL 已过期:
  2. 如果 TTL 已过期,则互联网提供商 DNS:
  3. 如果 TTL 已过期,则根 DNS:
  4. 我的本地dns1.example.com

但如果我理解正确的话,新的 IP 会被添加到所有这些名称服务器缓存中,直到 TTL 再次过期。那么如何根据访问者的位置向其发送其他 IP?

这个答案theandym 说请求是“转发”,但我不认为 CDN 是这样工作的,因为“转发”意味着延长传输路径,从而延长加载时间。或者 CDN 是否要求域名的 TTL 为零?

更新1
通过这个问题我发现谷歌的文档描述了他们如何优化 CDN 性能。它没有解释 CDN 的一般工作原理,但有一些有趣的解释,例如:

此后,每当客户端尝试获取 CDN 上托管的内容时,客户端都会被重定向到确定为其前缀具有最小延迟的节点。但是,此重定向基于与 DNS 名称服务器的 IP 地址相对应的前缀,该服务器代表客户端解析内容的 URL,通常与客户端位于同一位置。

这意味着 Google 首先检查所有 IP 前缀的延迟,并为所有可用前缀定义 DNS 解析表 (?)。如果访问者拥有 IP,则198.51.100.231使用 Google 服务器 IP,这是针对前缀设置的198.51.100.0。但同样:Google 的 DNS 如何知道访问者正在使用哪个 IP?大多数访问者通过其互联网提供商解析 Google 域名,并且解析是通过那些外部 DNS 服务器完成的,还是不是?

再举一个例子:如果我使用不同的在线工具(托管在不同的国家/地区)启动域名的 DNS 解析,facebook.com则会将其解析为具有不同域名的不同 IP,例如:

  • 31.13.92.36 反向:edge-star-mini-shv-01-frt3.facebook.com
  • 31.13.76.68 反向:edge-star-mini-shv-01-sea1.facebook.com
  • 31.13.69.228 反向:edge-star-mini-shv-01-iad3.facebook.com
  • 157.240.2.35 反向:edge-star-mini-shv-01-ort2.facebook.com

之后我认为这可能取决于访问者使用的 DNS 服务器位置,但我尝试了我自己的服务器(德国电信,德国)、谷歌的服务器(8.8.8.8)以及法国的一个主要服务器(Orange),它们都返回了facebook.comIP 31.13.92.36

答案1

好的,看来我现在可以粗略地回答我自己的问题了。安努拉格·巴蒂亚CDN 的工作方式有两种:

DNS

让 DNS 发挥神奇的作用,即当来自网络 ISP A 的用户查找 cdn.website.com 时,他们应该得到缓存 A 的单播 IP 地址,同样对于来自 ISP B 网络的用户,应该返回缓存 B 的单播 IP。

假设我们有一个 IP 位于美国的服务器和一个 IP位于德国的1.2.3.4缓存服务器。现在,访问者尝试解析域名。如果他没有更改网络设置,他将使用其互联网服务提供商 (ISP) 的 DNS 服务器。此 ISP 现在向(域名的名称服务器)询问 IP。现在它取决于 ISP 的位置。如果位于德国,则返回,如果位于美国,则返回。2.3.4.5example.orgdns1.example.comdns1.example.com2.3.4.51.2.3.4

但这种方法可能有一个缺点:每次用户更改网络设置并使用 EDNS0(参见 IETF 草案)不兼容的 DNS 提供商(例如企业的中央 DNS 服务器)dns1.example.com将使用距离这些 DNS 位置最近的 IP 再次应答,但这一次访问者很可能位于不同的位置,从而导致更高的延迟。

兼容 EDNS0DNS 提供商正在传递有关用户的信息到权威 DNS 服务器。因此权威 DNS 服务器可以使用用户所在位置旁边的 IP 进行响应:

如今,如果您使用 OpenDNS 或 Google Public DNS 访问网站或使用全球互联网加速计划中某个参与网络或 CDN 提供的服务,那么您的 IP 地址的截断版本将添加到 DNS 请求中。互联网服务或 CDN 将使用此截断 IP 地址来做出更明智的响应决策,以便您可以连接到最佳服务器。

...

; EDNS: version: 0, flags:; udp: 512
; CLIENT-SUBNET: 130.89.89.0/24/21

任播

根据“任播路由”概念,让路由路由到最近的缓存节点。此处缓存 A、缓存 B 和缓存 C 将使用相同的 IP 地址,路由将负责到达最近的缓存节点。

由于 BGP 等原因,我不太了解 Anycast,但我认为 Anurag Bhatia 的进一步解释给出了它如何工作的想法:

  1. 优化基于 BGP 路由和公告,DNS 的作用很小。
  2. 这种设置很难建立和扩展,因为要使任播在全球范围内完美运行,每个位置都需要大量的对等和一致的传输提供商。如果任何对等点将路由泄露给上游或其他对等点,则由于任播中断,给定集群上可能会出现大量意外流量。
  3. 此设置不依赖于 DNS 递归器,因此 Google DNS 或 OpenDNS 可以正常工作。
  4. 由于多个位置使用相同的池,因此可以节省大量 IP 地址。

任播也有一个缺点:路由很灵活。虽然在 TCP 会话开始时目标节点可能位于网络 A,但也可能更改为网络 B。因此,任播在实践中仅用于 UDP。UDP 是一种无会话协议。

大多数 CDN 使用 DNS 来传输 HTTP/HTTPS 流量,并使用 Anycast 来传输 DNS 请求。

答案2

您的应用程序将指向 CDN(用于资产、图像、API 等)。然后 CDN 将使用缓存或从您的服务器获取数据/文件。在您的示例中,您将指向 cdn.example.com,CDN 会将其路由到 dns1.example.com。cdn.example.com 将从任播网络上的最近位置获取数据,因此 IP 可以不同。

来源:

https://www.youtube.com/watch?v=JX2qrdp0WT4

https://www.akamai.com/blog/developers/how-cdn-can-make-your-apis-more-powerful

相关内容