我发现了这个解释CDN 是如何工作的。但有一件事我真的不明白。假设我在我的位置设置了多个 DNS 服务器,它们使用名称服务器域dns1.example.com
,dns2.example.com
并且dns3.example.com
. 该 DNS 服务器能够根据访问者的位置(ping、地理数据库、浏览器语言或其他)提供服务器 IP。www.example.org
现在我在注册表中为我的域更新此名称服务器设置。
现在,www.example.org
带有过期 TTL 的第一个请求会尝试解析域。它问:
- 本地 .hosts/DNS,如果 TTL 过期:
- 互联网提供商 DNS,如果 TTL 过期:
- 根 DNS,如果 TTL 过期:
- 我当地的
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
。