DNS 查找

当我们在浏览器中键入一个网站的 URL 后点击回车键,浏览器会尝试向连接到该 URL 的服务器发出请求。这个服务器包含我们在屏幕上显示数据所需的文件:比如一个 HTML 文件,可能还有 CSS 或者 JavaScript 文件。最终的目标用一种非常简化的方式就是:

不过,在与服务器对话之前,我们得找到它的位置。这就是我们在 DNS 查找期间要做的事情:试图找到最终要想其发出 HTTP 请求的服务器的位置。通常,当访问一个网站时,是通过用它的域名来访问。域名是,比如 www.google.comwww.facebook.comwww.airbnb.com 等等容易记住的名字!

不过,域名实际上对计算机是不友好的。想像一下你有朋友:你不想把他们所有的电话号码记在心里,而是将他们的真实姓名存在手机里面,这样通常更容易记住。不过最后,你的手机依然需要知道他们的实际电话号码,而不是他们的人名。我们要访问一个网站时,也会发生类似的事情:可以把你朋友的名字和域名相比较,他们的电话号码与叫做 IP 地址的东西相比较。

互联网上的每个设备都有一个 IP 地址,这是一个唯一的地址,我们可以用它来定位互联网上的设备。把这个和你的家庭地址相比较:它完全是独一无二的,这对那些需要知道你的披萨送到哪里的送货员来说是很有用的。DNS 查找这个词听起来很吓人,但是本质上只是试图找到与域名相对应的 IP 地址。

要理解我们要做什么,请在终端中键入以下内容:

你会看到类似如下的东西:

现在在浏览器的地址栏中输入该 IP 地址。它应该与你键入 www.google.com 完全一样!这是因为当我们试图到达 www.google.com 时,实际上是向在这个 IP 地址的服务器发出请求。不过,好在我们不需要记住这个 IP 地址。

用我们在上图中看到的 nslookup 命令,实际上就是在终端中执行 DNS 查找。那么,当我们进行 DNS 查找时,到底会发生什么呢?只提供域名,如何得到 IP 地址呢?下面我们只重点关注从浏览器执行 DNS 查找(通过在地址栏中键入 www.google.com)。

DNS 查找实际上包含 8 个步骤。在谈到可怕的术语之前,我们先将我们要做的事情可视化一下。

好吧,现在这可能根本没有意义。是时候被晦涩的 IT 术语搞的不知所措了,不过不要绝望,你很快就会理解它们(而且它们并不像听起来那么可怕):

  1. 浏览器向递归 DNS 服务器发送一个 DNS 查询,这个服务器在你的 ISP 那里。
  2. 递归 DNS 服务器向 DNS 根名称服务器发出请求。
  3. DNS 根名称服务器返回顶级域(TLD)服务器的 IP 地址。
  4. 递归 DNS 服务器向 TLD 服务器发出请求。
  5. TLD 服务器返回权威 DNS 服务器的 IP 地址。
  6. 递归 DNS 服务器向权威 DNS 服务器发出请求。
  7. 权威 DNS 服务器返回该域名的 IP 地址。
  8. 递归 DNS 服务器把该域名的 IP 地址返回给浏览器。

下面我们一个一个看看这些步骤:


浏览器向递归 DNS 服务器发送一个 DNS 查询,这个服务器在你的 ISP 那里。

这句话有三个重要的术语:DNS 查询递归 DNS 服务器以及 ISP

DNS查询其实就是浏览器问:“喂,递归 DNS 服务器,我在尝试获取这个域名的 IP 地址。请帮我找到它!”. 然后递归 DNS 服务器通过递归地询问不同类型的名称服务器,帮助浏览器找到相应的 IP 地址,因而其名称中有“递归”。ISP(Internet 服务提供商)是提供互联网服务的公司。如果想知道你的 ISP 是谁,可以在这里查看https://www.whoismyisp.org/.


递归 DNS 服务器向 DNS 根名称服务器发出请求。DSN 根名称服务器返回顶级域(TLD)服务器的 IP 地址。

递归 DNS 服务器首先向 DNS 根名称服务器发出请求。世界上只有 13 种根名称服务器,它们的不同副本分布在世界各地。默认情况下,递归 DNS 服务器有到达这个根名称服务器的信息,因此好在我们不必担心这一点。

递归 DNS 服务器发出请求后,根域名服务器查看 URL 的扩展名,比如 .com.net.org。然后,根名称服务器返回 TLD 服务器的 IP 地址列表,这些 TLD 服务器处理我们正在查找的域的扩展,在本例中为com


递归 DNS 服务器向 TLD 服务器发出请求。TLD 服务器返回权威 DNS 服务器的 IP 地址。

根据根名称服务器为我们提供的 IP 地址,我们可以联系到相应的 TLD 服务器。

TLD 服务器包含有该特定扩展名的所有域的权威 DNS 服务器的信息,在本例中为 com。TLD 服务器将 google.com 的权威 DNS 服务器的 IP 地址返回给递归 DNS 服务器。


递归 DNS 服务器向权威 DNS 服务器发出请求。权威 DNS 服务器返回该域的 IP 地址。

最后,我们知道在哪里可以找到权威 DNS 服务器。

这是最后一步:权威 DNS 服务器包含其服务的域的信息。它查找处理 IP 地址的 DNS 记录:A 记录。 此 A 记录指定哪个 IP 地址属于该域。浏览器需要此 IP 地址,以便向相应的服务器发出请求。此服务器包含我们需要的文件。


递归 DNS 服务器将域的 IP 地址返回给浏览器。

最后,有了这张简单的图片,我们离一切开始的地方更近了一步:

我们还没有做到这一点,因为我们还没有发出从该服务器获取数据的请求,但至少现在浏览器知道该服务器位于何处,以及将 HTTP 请求实际发送到何处!

https://www.lydiahallie.dev/blog/beyond-the-bootcamp-dns-lookup

欢迎关注我的其它发布渠道