迭代DNS查询和递归DNS查询的区别

迭代DNS查询和递归DNS查询的区别

作者:Sarath Pillai

日期:2013月1月12日

原文:https://www.slashroot.in/difference-between-iterative-and-recursive-dns-query

翻译:tommwq

译文:http://tommwq.tech/blog/2021/05/06/349

DNS是最关键的基础设施,它对所有人都是公开可用的。实际上可以这么说,如果DNS发生故障,足以摧毁万维网。

我曾经在文章中阐述了DNS的工作原理。然而,仅用一篇或数篇文章,无法总结全部的相关话题。所以我会继续发表关于DNS主题的文章。分开发表是为了让读者更容易理解。

阅读:DNS是如何工作的

在这篇文章中,我们将介绍不同的DNS查询类型。客户端使用不同类型的查询,从DNS服务器获取不同类型的信息。

1 DNS查询有哪些不同类型?

DNS查询可以根据请求被处理的方式进行分类。通常查询可以分为以下几类:

  1. 递归查询。
  2. 迭代查询或非递归查询。
  3. 反向查询。

1.1 什么是递归查询?

在递归查询中,接收客户端请求的DNS服务器将完成全部的工作,然后返回结果。在工作过程中,DNS服务器可能代表客户端,向internet上的其他DNS服务器查询,以获得答案。

让我们通过以下步骤了解递归查询的整个过程。

假设你想浏览www.example.com网站,并且/etc/resolve.conf文件包含以下条目:

[root@myvm ~]# cat /etc/resolv.conf
nameserver 172.16.200.30
nameserver 172.16.200.31

这份resolve conf文件表是DNS服务器是172.16.200.30和172.16.200.31。无论你使用什么应用程序,操作系统都将向这两个DNS服务器发送查询请求。

步骤1:你在浏览器中输入www.example.com。操作系统向DNS服务器172.16.200.30发送请求,查询A记录。

步骤2:DNS服务器172.16.200.30在接收到查询后,检查本地缓存表,查找域名www.example.com的IP地址(A记录),没有找到。

步骤3:因为DNS服务器172.16.200.30上没有查询到信息,这个DNS服务器发送请求到一台根服务器查询答案。这里的一个重要事实在于,根服务器只支持迭代查询。

相关:DNS根服务器及其位置

步骤4:DNS根服务器返回一组DNS服务器地址,这些服务器负责处理.com顶级域名。

步骤5:我们的DNS服务器172.16.200.30将从根服务器返回的列表中选择一个顶级域名服务器继续查询www.example.com的IP地址。

步骤6:与根服务器类似,顶级域名服务器的也是迭代的。它返回给172.16.200.30另一组DNS服务器地址列表。这些DNS服务器(权威authoritative域名服务器)负责查询域名www.example.com。

相关:DNS区域文件及其内容

步骤7:现在我们的DNS服务器将从权威域名服务器列表中选择一个IP,向其查询www.example.com的A记录。权威域名服务器查询后,回复如下的A记录:

www.example.com = <XXX:XX:XX:XX>(某个IP地址)

步骤8:DNS服务器172.16.200.30把IP、域名对(以及其他可用资源)返回给我们。现在浏览器将向给定的IP发送请求,获取网页www.example.com。

下面图表可能会使概念更清楚。 递归DNS查询 如上图所示,DNS服务器172.16.200.30代表我们向其他DNS服务器进行查询。

注:上面解释的递归查询场景之所以会发生,是因为我们的DNS服务器172.16.200.30被配置为递归DNS服务器。你也可以禁用DNS服务器的递归查询功能。

1.2 递归查询时如何选择要查询的下一个DNS服务器?

在上面的例子中你已经看到,DNS服务器172.16.200.30需要多次从一个服务器列表中选择一个服务器进行查询。

例如有13台根服务器(我们常说一共有13台根服务器。13是全部服务器地址的数量。实际上在世界各地一共有数百台服务器。这13个根服务器地址是anycaste地址),要从那个根服务器查询信息呢?

相关:什么是IP Anycast,它是如何工作的?

几乎所有的DNS服务器都使用某种算法从列表中进行选择,以便以便分配负载,降低响应时间。

最著名的DNS服务器软件BIND使用一种称为RTT度量(Round Trip Time metric)的技术。使用这种技术,服务器跟踪每个根服务器的往返时间,并选择RTT较低的那个。

2 什么是迭代查询或非递归查询?

在开始解释迭代查询之前,需要注意的一点是,所有DNS服务器都必须支持迭代(非递归)查询。

在迭代查询中,名字服务器不会去获取完整的答案,而是返回其他可能直到答案的DNS服务器地址。在前面的示例中,DNS服务器172.16.200.30代表我们取查询信息,并为我们提供最终结果。

但是如果我们的DNS服务器不是递归的(这意味着它是迭代的),如果答案在它的记录中,它会告诉我们答案。否则它会告诉我们根服务器的地址(它本身不会查询根服务器或其他服务器)。

现在,操作系统中解析程序的任务是查询根服务器、.COM顶级域名服务器和权威名字服务器,以获得答案。

让我们来看看所涉及的步骤。

步骤1:你在浏览器中输入www.example.com。操作系统的解析程序向DNS服务器172.16.200.30发送请求,查询A记录。

步骤2: DNS服务器172.16.200.30在接收到查询后,查看缓存表,查找www.example.com的IP地址(A记录)。但没有找到。

步骤3:现在,我们的DNS服务器不再查询根服务器,而是把根服务器列表返回给我们。操作系统的解析程序将查询根服务器,寻求答案。

接下来的步骤同上文一样。迭代查询的唯一区别是:

  • 如果DNS服务器没有答案,它将不会向其他服务器查询答案,而是返回DNS根服务器的地址。
  • 如果DNS服务器有答案,它将返回答案(这在迭代查询和递归查询中是一样的)。
  • 在迭代查询中,从其他DNS服务器中查询答案的任务由操作系统的解析程序完成。

迭代DNS查询 从上图可以清楚地看出,在迭代查询中,DNS服务器不会为你向其他服务器查询答案(但如果已经有答案,则会告诉你答案)。但是会告诉你的解析程序其他DNS服务器的地址(在我们的例子中是根服务器地址)。

我们将在另一篇文章中讨论反向查询。希望这篇文章有助于理解迭代(非递归)和递归DNS查询。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值