DNS 工作原理

请注意,任何人都无法记住互联网上每项服务的 IP 地址。幸运的是,有一个协议!域名服务 Domain Name Server(DNS) 通过将人类可读分层名称的映射维护到分布式数据库中的服务的IP地址来解决此问题。因此,当用户输入 http://www.google.com 在浏览器中点击 Enter 键,第一步是使用 DNS 查找名称 www.google.com 的 IP 地址。下图显示了此类查询所需的步骤。在本讨论中,我们将交替使用名称本地 DNS 解析程序本地 DNS 服务器本地 DNS 名称服务器

需要解析名称的应用程序将系统调用 getaddrinfo。这基本上要求操作系统继续执行并解析名称。图中未显示此步骤。接下来的步骤如下:

  1. 通常,网络中的每台计算机都将在文件 /etc/resolv.conf 中配置本地 DNS 服务器。在大多数情况下,这指向 ISP 的 DNS 服务器。也可能是指向家庭 Wi-fi 路由器的 DNS 服务器。在这种情况下,DNS 将透明地代理对 ISP 的DNS 服务器的请求。 然后操作系统将查询该服务器,询问给定的名称 www.google.com 的 IP。
  2. 反过来,本地 DNS 服务器将向预先填充的根名称服务器列表提出相同的问题。这些服务器由 ICANN 维护,其地址众所周知。它们维护顶级域名服务器的地址。这意味着他们知道 .com 域名的名称服务器的地址。
  3. 在此步骤中,根名称服务器将回复. com 域的 TLD 名称服务器的地址。这些服务器维护其自己域中名称服务器的地址列表。
  4. 然后,本地 DNS 服务器联系其中一个并询问相同的问题。
  5. 顶级域名服务器使用 google.com 域中的服务器地址回复。 google.com 域的管理员为该域维护了一堆域名服务器。这些域名服务器对该域中的所有记录具有完全权限,并且每个记录都标记为权威性以指示该域。
  6. 然后本地DNS服务器询问其中一个相同的问题。
  7. (希望)服务器确实知道 www.google.com 的地址。 如果是,则准备响应,将其标记为权威,并将其发送回本地DNS服务器。 答案还可以有一段时间与之关联,以便本地DNS服务器可以将其缓存以供将来使用,并在给定时间结束后将其逐出。如果没有,名称解析将失败,它将发回一个名为 NXDOMAIN 的特殊响应。
  8. 然后,本地 DNS 服务器将相同的响应发送回操作系统,操作系统将其传递给应用程序。本地服务器将响应标记为非授权,表明它从其他地方获得了该答案。

DNS 支持各种记录类型。 A 记录将名称映射到IPv4地址,AAAA 记录将名称映射到IPv6地址,依此类推。使用 PTR 记录支持反向查找。