AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 835660
Accepted
mgutt
mgutt
Asked: 2017-03-02 06:36:49 +0800 CST2017-03-02 06:36:49 +0800 CST 2017-03-02 06:36:49 +0800 CST

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

  • 772

我发现了这个解释CDN 是如何工作的。但有一件事我真的不明白。假设我在我的位置设置了多个 DNS 服务器,它们使用名称服务器域dns1.example.com,dns2.example.com并且dns3.example.com. 该 DNS 服务器能够根据访问者的位置(ping、地理数据库、浏览器语言或其他)提供服务器 IP。www.example.org现在我在注册表中为我的域更新此名称服务器设置。

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

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

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

在this answer theandym说请求是“转发”的,但我不认为这是CDN的工作方式,因为“转发”意味着延长传输方式导致更长的加载时间。或者 CDN 是否要求域的 TTL 为零?

Update1
通过这个问题,我找到了Google 的文档,描述了他们如何优化 CDN 性能。它没有解释 CDN 的一般工作原理,但有一些有趣的解释,如下所示:

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

这意味着 Google 首先会检查所有 IP 前缀的延迟,并为所有可用的前缀定义一个 DNS 解析表 (?)。如果访问者拥有 IP 198.51.100.231,则使用 Google 服务器 IP,即为 prefix 设置198.51.100.0。但又一次:Google 的 DNS 如何知道访问者使用的是哪个 IP?大多数访问者通过他们的互联网提供商解析谷歌的域,并且解析是通过那些外部 DNS 服务器完成的?

作为另一个示例:如果我facebook.com使用不同的在线工具(托管在不同的国家/地区)为域启动 DNS 解析,则会将其解析为具有不同域的不同 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)和法国的主要服务器(橙色),他们都返回facebook.com了知识产权31.13.92.36。

domain-name-system http nameserver cdn
  • 2 2 个回答
  • 8761 Views

2 个回答

  • Voted
  1. Best Answer
    mgutt
    2017-03-02T15:18:52+08:002017-03-02T15:18:52+08:00

    好吧,看来我现在可以粗略回答我自己的问题了。Anurag Bhatia说 CDN 的工作方式有两种:

    域名系统

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

    假设我们有一个 IP1.2.3.4位于美国的服务器和一个 IP2.3.4.5位于德国的缓存服务器。现在访问者尝试解析域example.org。如果他没有更改他的网络设置,他会使用他的互联网服务提供商 (ISP) 的 DNS 服务器。这个 ISP 现在向dns1.example.com(域的名称服务器)询问 IP。现在它取决于 ISP 的位置。如果它位于德国dns1.example.com返回2.3.4.5,如果它位于美国返回1.2.3.4。

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

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

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

    ...

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

    任播

    基于“任播路由”概念,路由到最近的缓存节点。在这里,缓存 A、缓存 B 和缓存 C 将使用相同的相同 IP 地址,并且路由将负责到达最近的 IP 地址。

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

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

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

    大多数 CDN 使用 DNS 处理 HTTP/HTTPS 流量,使用 Anycast 处理 DNS 请求。

    • 10
  2. Manish Jain
    2022-05-09T14:42:12+08:002022-05-09T14:42:12+08:00

    您的应用程序将指向 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

    • 0

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve