假设我的域名的名称服务器注册如下:
ns1.domain.com.
ns2.domain.com.
ns3.domain.com.
每个服务器的物理位置如下:
ns1.domain.com. - in Tokyo
ns2.domain.com. - in San Francisco
ns3.domain.com. - in Europe
- DNS 查找是否会一次查询所有名称服务器?
- 当用户访问网站时,它会只查询 1 台服务器,还是查询所有服务器(并接受回复最快的服务器的响应)?(如果它只查询 1 台服务器,它会如何选择?)
- 例如,当居住在加利福尼亚州的用户首次使用 Web 浏览器访问网站时,它会查询哪个名称服务器?它会以某种方式知道 ns2 是最近的服务器,并会先查询该服务器,还是只查询该服务器?
- 假设 ns1(位于东京)拥有最便宜、最慢且最有限的硬件,并且处于重负载或遭受 DoS/DDoS 攻击,而 ns2 和 ns3 是功能强大的机器并且运行良好。当这种情况发生时,它会如何影响我网站的 DNS 响应?
(我在 FreeBSD 上使用 PowerDNS,但我认为这更像是一个通用 DNS 问题,与操作系统或 DNS 软件无关。)
答案1
当用户访问网站时,浏览器不会直接查询权威名称服务器,而是(通常是间接地,通过操作系统解析器库)向RD
已配置的(通常通过 DHCP 填充)解析器名称服务器发送请求递归(设置标志)的查询,该解析器名称服务器代表其客户端执行整个查找过程(带有缓存)并返回最终答案。
因此,关于您的问题,大多数问题似乎都集中在此解析器服务器的行为上,而不是客户端计算机上通常发现的任何内容。至于答案,其中许多问题都是特定于实现的;具体策略通常不在标准中规定。
- 随机访问多个权威服务器并不是常态。更常见的情况是,客户端随机与多个已配置的解析器服务器进行通信。
- 根据规范,权威服务器的选择是任意的。通常有特定于实施的策略在起作用,例如,解析器服务器可以根据以前的经验在不同程度上跟踪哪些权威服务器是好的/坏的。
- 浏览器查询已配置的解析器(通常由 ISP 提供),该服务器可能已经缓存了其他用户查询相同内容的完整答案,否则可能缓存了通向答案的某些部分路径。在完全冷缓存的情况下,这可能是完全任意的选择。
- 在完全冷缓存的情况下,延迟响应的风险实际上为 33%。一旦“您的”解析器服务器发现此权威服务器没有响应,它可能会知道(在有限的时间内)放弃该服务器,不让它影响进一步的查询。考虑到缓存,在大多数情况下,用户不太可能看到“冷缓存、没有先验知识、运气不好随意选择“错误”的服务器”导致的额外延迟。
答案2
当客户端请求解析您的域名时,tld 服务器将向客户端提供所有名称服务器的列表,客户端将随机选择一个。因此,它可能在第一次查询时选择 ns1,第二次查询时选择 ns3,第三次查询时选择 ns1,第四次查询时选择 ns2 等等。
某些服务(如 cloudflare)可以声明为您的唯一名称服务器,然后它会根据地理位置或通过您真正的实名服务器或它们自己的服务器(它们也可以提供名称解析)上的负载平衡来智能地路由查询。事实上,几乎 40% 的 DNS 流量都是通过 cloudflare dns 基础设施路由的。