我很难想象 DNS 架构。我看到 DNS 客户端联系 DNS 服务器,后者联系根服务器以启动名称查询。运行时,ipconfig /all
我看到 DNS 服务器 IP 与路由器相同。
哪个实体是 DNS 客户端,哪个是 DNS 服务器?我的笔记本电脑是客户端,路由器是服务器,还是我的网络之外的组件之一,位于 ISP 网络中?如果我的路由器是 DNS 服务器,它如何知道根服务器的 IP 地址?
答案1
简单的答案是,这要视情况而定。
从您的本地网络的角度来看,您的计算机是 DNS 客户端,而示例中的路由器是解析发送给它的任何请求的 DNS 服务器。
棘手的是,DNS 服务器可以用多种方式解析地址。它可以完全自行解析地址,例如联系根服务器等(如您提到的),也可以将请求转发给另一台 DNS 服务器。
在大多数本地网络中,后者最为常见,这就是为什么在设置路由器时,您要设置的详细信息之一是它应该使用的 DNS 服务器。路由器接收来自您 PC 的请求,然后将该请求转发到已配置的 DNS 服务器之一以获取答案。一旦收到该答案,它就会在本地缓存它,因此如果它在设定的时间段内(DNS 记录的 TTL)从您的机器或网络上的另一台机器收到对同一地址的另一个请求,它可以立即响应而无需进行另一次查找。
请注意,路由器查询的 DNS 服务器也可能执行相同的操作,例如,只是转发请求,或者自行处理。
更全面的 DNS 服务器将维护根 DNS 服务器列表(目前 IPv4 DNS 上有 13 个),并且能够通过定期更新 BIND、Windows 或它们正在运行的任何系统来更新该列表(如果这些地址发生变化,它们很少这样做)。利用该列表,他们可以自行处理解析地址的整个过程。
因此,最终 DNS 服务器会被分为 DNS 转发器和 DNS 解析器。就客户端而言,两者对地址请求的响应方式相同,但实现方法可能不同。
答案2
当我运行 ipconfig /all 时,我看到 DNS 服务器 IP 与路由器相同。哪个实体是 DNS 客户端,哪个是 DNS 服务器。我的笔记本电脑是客户端,路由器是服务器,还是我的网络之外的组件之一,位于 ISP 网络中?
可以有两个以上的实体:
- 您的笔记本电脑是 DNS 客户端(仅支持与单个服务器对话的“存根解析器”);
- 您的路由器是一个 DNS 服务器,它仅作为缓存代理工作,并将请求转发到另一台服务器(通常是您的 ISP,有时是公共服务器);
- 最后,您的 ISP 运行一个“递归解析器”DNS 服务器,从根开始执行所有查询。
(当然,DNS 根服务器本身就是......DNS 服务器;托管各种域的区域数据的服务器也是如此。这些是“权威”服务器。)
因为路由器只是一个代理,所以你可以为了简单起见,完全跳过它,并将笔记本电脑配置为直接充当某个解析器服务器的客户端。(尽管您会失去路由器的“LAN 域”功能 - 这是它除了作为普通代理之外的一项额外功能。)
另一方面,路由器本身可以从技术上讲,它是“服务器”(完整/递归解析器)——它不需要太多资源——但使用 ISP 提供的共享解析器及其已经“热”的缓存效率要高得多。因此,大多数家用路由器只是进行简单的转发,同时在上面添加自己的本地缓存。但是,例如,使用 Unbound 设置 Pi-Hole 的人确实拥有这一点(Unbound 有能力成为递归解析器)。
如果我的路由器是 DNS 服务器,它如何知道根服务器的 IP 地址是什么?
你的路由器通常不是 DNS 服务器,但如果是,那么它将附带已预定义的根服务器列表。
该列表很少更改,因此可以包含在软件本身中(例如,您会发现它嵌入在 Unbound 或 BIND 中),即使它确实发生了变化,在下一次软件更新之前它仍然会有 12 个工作条目 - 只需一个工作服务器就可以刷新列表的其余部分。(该列表称为“根提示文件”。因此。)