![有没有关于 DNS 系统的良好概述?](https://linux22.com/image/481726/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%85%B3%E4%BA%8E%20DNS%20%E7%B3%BB%E7%BB%9F%E7%9A%84%E8%89%AF%E5%A5%BD%E6%A6%82%E8%BF%B0%EF%BC%9F.png)
我想了解 DNS 系统的工作原理。域名实际上是如何解析的,管理员如何设置域名以便将其正确解析到目标机器。
您通过 Google 找到的资料要么非常技术性,很难正确理解整个系统,要么太过简单,用处不大。有人有好的资料可以全面解释它,但又不必在阅读过程中成为专家吗?
答案1
到目前为止给出的答案都没有做出这些区分,但值得记录:
不同类型的 DNS 服务器:权威服务器
这是保存有关域名的权威信息的服务器。来自此类服务器的权威答案具有AA位设置。
来自权威服务器的答案始终包含实际配置生存时间来自区域文件。例如,如果 TTL 设置为 86400 秒,那么该值将出现在响应中。
ISP 运行权威服务器来主持人他们代表客户管理的域名。顶级域名和国家代码顶级域名运行的名称服务器也是权威服务器,根名称服务器。
递归服务器
递归解析器仅接收来自存根解析器的请求。如果答案在其缓存中,它将立即返回答案。如果答案不在缓存中,它将迭代地向相关的**权威服务器**询问答案,然后将其返回给存根解析器。缓存是递归服务器的基本功能。从权威服务器收到的 TTL 会持续减少,当它达到零时,条目将从缓存中清除。
类似地,从递归服务器收到的答案显示递减值,而不是来自区域的原始值。根据上述示例,如果一小时前收到的记录的 TTL 为 7200 秒,则递归服务器的答案将显示 3600 秒。
ISP 运行递归解析器来解析你的 PC 与之通信的 IP,尽管大多数消费者实际上依赖于DNS 代理在他们的家庭网关中,前锋向 ISP 解析器发出查询。
存根解析器
存根解析器不是通常意义上的服务器,它通常是一个库,对“gethostbyname()”和相关函数的调用只是调用该库中的代码。存根除了与递归解析器,依靠该递归解析器来获取其所有答案。所有此类上游请求都具有研发 (需要递归) 位设置。
一些(但绝不是全部)存根解析器都有缓存。
转发服务器
转发(或代理)服务器通常不缓存。它们用于代理一个网络和另一个网络之间的数据包,通常位于存根解析器和递归解析器之间。答案2
我在网上找不到真正好的资源。O'Reilly 的板球书(“DNS 和 BIND,第 5 版”)内容丰富,但并非完全免费提供...
(TL;DR 版本:它很复杂,这就是为什么系统管理员在早茶时间得到所有好饼干的原因)
“如何查找名称”这个问题的答案基本上是整个系统就像一棵大树——您尝试查找的名称的每个部分都是另一个级别。在顶部,“根”服务器知道哪些 DNS 服务器负责每个“顶级”域(.com、.net、.org、.us、.eu、.uk、.au 等),而负责每个名称的服务器知道哪些 DNS 服务器负责它们下的每个域(因此 .com 服务器知道哪些 DNS 服务器负责 serverfault.com 和 stackoverflow.com,但它们不知道谁负责 hezmatt.org——.org 名称服务器知道这一点)。
当您想知道给定名称对应的内容时,首先要询问根服务器。它们会将您“引荐”到所需的“顶级”名称的正确服务器,然后相应的“顶级”服务器会告诉您从那里去往何处。最终(通常只需几跳,但没有理由说不能更多)您将被引荐到知道您所问问题的实际答案的服务器,然后您将得到答案。
如果你想观察这个过程,你可以使用类似http://squish.net/dnscheck/查找名称并查看所有可以完成的查询。
至于管理员如何设置 DNS 服务器并将其集成到整个系统中,这有点超出上述范围。设置 DNS 服务器来响应给定域后,您需要请求上级 DNS 服务器将该域名“委托”给您的服务器。实际上,当您告诉域名注册商要为您“拥有”的域使用哪些 DNS 服务器时,域名注册商会代表您完成此操作。
答案3
您还需要了解DNS 欺骗性去年年中发生的这次攻击事件。
答案4
好的,第二次回答。希望答案更好!
例如,当用户请求 的地址时serverfault.com
,DNS 客户端软件首先会查看其根服务器列表。此列表内置于每个 DNS 解析客户端[1] 中。根服务器是一种特殊的 DNS 服务器。它们只是告诉 DNS 服务器接下来要请求哪些服务器以获取所要查找的顶级域名(在本例中为.com
)。
这个告诉 DNS 客户端软件下一步要询问哪个内容服务器的过程称为代表团。因此,在这种情况下,根服务器将请求委托给serverfault.com
、a.gtld-servers.net
等b.gtld-servers.net
。在这种情况下,gTLD 代表“全球顶级域名”,指的是.com
、.net
等(与国家代码顶级域名 ccTLD 相反)。
因此,DNS 客户端会向其中一个 gTLD 服务器(与根服务器一样,也是内容 DNS 服务器)请求 的地址serverfault.com
。服务器返回,将请求委托给ns21.domaincontrol.com
和ns22.domaincontrol.com
。然后 DNS 客户端继续向其中一个服务器请求。
当 DNS 客户端询问ns21.domaincontrol.com
或ns22.domaincontrol.com
(它们也是内容 DNS 服务器)时,它们会以serverfault.com
的 IP 地址进行响应69.59.196.212
。这样,我们就完成了。
这里需要考虑一些要点。向 DNS 服务器发出查询请求的每个步骤都有以下三种可能结果之一:
- 请求的数据(本例中为 的地址
serverfault.com
) - 委托给另一个 DNS 服务器(如果这最终没有导致请求的数据,则这种情况称为蹩脚的代表团)
- 错误(例如不存在的域名)
现在,当您尝试运行自己的 DNS 服务器时,您必须有某种方式让人们知道如何与其通信。您可以通过在您感兴趣的顶级域名注册商处注册您的域名以及有关 DNS 服务器地址的信息来实现这一点。您可以从以下网址找到注册商列表互联网名称与数字地址分配机构 (ICANN)。
希望这可以帮助!
[1] 这是一个巨大的简化,因为我不想触及缓存服务器或任何东西。DNS 专家,请原谅。:-)