从我目前得到的信息来看,我们有所谓的“名称服务器”(权威的),它们保存有关其域(或区域)的数据。例如,域.com
有一个权威名称服务器,它保存有关 的所有子域的信息com
。同样,google.com
域有一个权威名称服务器,它保存其负责的所有记录,等等。
在客户端,我们有一个叫做 a 的东西,DNS resolver
它是我机器上的一个软件(为了方便),它从我的浏览器获取请求,以查找我在 URL 栏中输入的域名的某个 IP 地址。据我所知,解析器能够访问根名称服务器,然后迭代访问后续名称服务器以查找我需要的 IP 地址。
现在我还知道我的操作系统(特别是我的网络接口)配置为使用某个“DNS 服务器”,并向其发送 DNS 查询。
我不明白的是,为什么我既需要 DNS 解析器又需要 DNS 服务器?这个 DNS 服务器是什么?它有什么用?它是某种代理解析器吗?
答案1
我不明白的是,为什么我同时需要 DNS 解析器和 DNS 服务器?
这不是你应该持有的区别。
DNS 服务器中的重要区别在于:
- 权威域名服务器
- 递归名称服务器
(您还可以找到其他类似“存根”解析器和组合;请参阅 RFC 8499 了解完整定义)。
权威名称服务器拥有一个或多个区域的完整数据(并且区域通常具有两个、有时具有更多个权威名称服务器,用于负载平衡/故障转移)。
递归名称服务器基本上没有数据(启动时),并将代表客户端执行查询,并递归跟踪所有委托和 CNAME 记录,直到到达错误或客户端查询的答案。
您使用的递归名称服务器(在您的机器上,或者您的 ISP 上,或者一些远程名称服务器,如 Google Public DNS 或 Cloudflare 等)知道根名称服务器,并将联系它们以获取有关 TLD 名称服务器的数据,依此类推,最终解析您需要的名称。
每个权威名称服务器仅包含其管理的区域的数据。如果您向其查询其他任何内容,它可能会拒绝回复(在 DNS 级别回复 REFUSED 代码),或者回复委托,让您知道您(此处的您是执行查询的递归名称服务器)应该联系另一个权威名称服务器。
“DNS 解析器”和“DNS 服务器”的含义不明确。“DNS 解析器”也是“DNS 服务器”,因为它运行一个充当服务器(接受查询和响应)的“DNS”软件。DNS 的设计使得同一端口 (53) 用于权威操作和递归操作,这会产生一些混淆(在命名上,对计算机来说没有问题)。
一些名称服务器软件在设计上仅具有权威性(例如:NSD、Yadifa、KnotDNS),一些仅具有递归性(例如:Unbound),一些可以以任一模式配置(例如:Bind、PowerDNS),即使建议不要在同一进程内混合使用两种操作模式。
RFC 8499 确实是一座信息宝库,值得推荐一读。