ZDNS
作者ZDNS·2021-11-17 16:54
其它·zdns

DNS云学堂 | 递归、迭代查询如何在具体场景下灵活使用?

字数 2483阅读 1338评论 0赞 0

在互联网蓬勃发展的今天,你刷的每条短视频,下的每个订单,看的每篇新闻,背后都有 DNS 系统默默支撑。但你知道我们每天都离不开的 DNS 系统,到底做了哪些工作吗?今天我们就回归基础,介绍一下 DNS 的两种查询方式:递归查询和迭代查询以及如何在具体场景下灵活使用。 enjoy :

1 关键定义

1 )递归查询

递归查询是一种 DNS 服务器的查询模式,在该模式下 DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果 DNS 服务器本地没有存储查询 DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。

2 )迭代查询

DNS 服务器另外一种查询方式为迭代查询, DNS 服务器会向客户机提供其他能够解析查询请求的 DNS 服务器地址,当客户机发送查询请求时, DNS 服务器并不直接回复查询结果,而是告诉客户机另一台 DNS 服务器地址,客户机再向这台 DNS 服务器提交请求,依次循环直到返回查询的结果为止。

2 DNS查询流量分解

在公网上,一台终端需要访问域名: www.zdns.cn 时,会向本地配置的 LocalDNS 发起域名查询,遵循公网域名解析逻辑,总体流程如下:

  1. 客户端向 Local DNS 发起域名 www.zdns.cn 查询;
  2. Local DNS 先向已知的公网 13 个根服务器发起域名 www.zdns.cn 查询;
  3. 根服务器不会回应 www.zdns.cn 的域名结果,而是告知 .cn 的权威 DNS 地址;
  4. Local DNS 向 .cn 的权威 DNS 地址发起域名 www.zdns.cn 查询;
  5. .cn 的权威 DNS 依旧没有 www.zdns.cn 的结果,而是告知 .zdns.cn 的权威 DNS 地址;
  6. Local DNS 向 .zdns.cn 的权威 DNS 地址发起域名 www.zdns.cn 查询;
  7. 这时权威域名记录结果由 .zdns.cn 的权威 DNS 进行响应,返回域名对接的查询结果;
  8. Local DNS 查询到 www.zdns.cn 的结果以后,将结果告知客户端;

根据上述的流量图可以发现,客户端到 LocalDNS 之间,只有一问一答的关系,根据前面介绍我们可以得知,客户端到 LocalDNS 之间是递归查询;

我们再看 LocalDNS 向后端的三台权威 DNS 的解析流量,三次会话的前两次都没有查询到想要的结果,符合第二种查询方式,所以 LocalDNS 到其他权威 DNS 之间是迭代查询;

3 场景拓展

上文中讲述的是比较理想化状态下的 DNS 解析场景,那有没有可能让终端发起迭代请求,或者说让 LocalDNS 发起递归请求呢?其实都是可以实现的。

场景一:终端发起迭代查询

普通终端可以依靠 DNS 查询软件,例如: dig 工具,在查询域名时,加上 +trace 参数,即可完成迭代查询的全部动作,该功能常用于验证公网域名发布后的解析逻辑是否正常。

场景二: LocalDNS 发起递归查询

在网速日益提升的今天,大部分企业都会依靠 CDN 或者智能选路来实现公网应用的访问提速,优先返回最近的镜像站点或者同运营商的公网 IP ,就近访问实现网络提速。

当企业具备多条运营商的出口链路时,只是简单的通过流量负载设备就行分流,就可能出现访问目是电信的地址,却从移动的链路出网访问,这时候就会出现我们常说的跨网访问的情况。如何更好的解决流量负载问题,就需要自建一套本地的 LocalDNS 了,通过对访问域名的多种调度手段,并与出口的流量负载设备配合实现精细化转发,基本上就可以避免跨网访问的情况出现,实现出口链路的高效利用。

在这种场景下, LocalDNS 发起的就是递归查询,被转发的设备可以是其他 LocalDNS ,也可以是一台权威 DNS ,这一点区别于迭代查询。

4 案例分享

由上面的场景我们可以得知,发起何种查询并不是一成不变的,可以根据实际需要发起递归查询或者迭代查询。那我们再来思考另外一个问题,假如我发起了迭代的查询,但查询设备并不是一台权威 DNS ,而是一台 LocalDNS ,这时会发生什么现象呢?

下面我们来看这样一个案例,某企业公司总部在北京,分公司在深圳,企业内部自建了一套 DNS 体系,顶级域名为 .abc ,权威服务器在北京,深圳分公司有个子域名为 sz.abc ,也在本地建立了权威服务器,北京的 .abc 权威 DNS 需要提供 abc 后缀所有域名的查询服务,包括深圳域名的查询服务

在 .abc 的权威 DNS 上,与公网迭代查询需要的配置一样,只配置了 sz.abc 域名的子域授权,但子域授权的地址却是深圳分公司的一台 LocalDNS ,这台 LocalDNS 做了一条 sz.abc 域名的转发策略,指向了 sz.abc 的权威 DNS :逻辑图如下:

该案例的部署结构并不满足上面讲述的任何一种场景,访问也出现了问题。用户找到 abc 的权威 DNS ,需要查询 www.sz.abc 的域名, abc 权威发现本地有 sz.abc 的子域委派配置,会发起迭代查询,请求流量到达深圳分公司的 LocalDNS 时, LocalDNS 却不会响应,这是因为 LocalDNS 只会响应递归查询,对迭代查询直接进行了丢弃。

那有没有可能在保留深圳 LocalDNS 的情况下,实现北京总部对深圳域名的访问呢?其实很简单,如下图方案一种所示,在现有配置不变的情况下, abc 权威 DNS 上再添加一条 sz.abc 的转发策略,让迭代查询变成递归查询即可正常解析;

如果是需要保持子域委派的查询逻辑,需要如何调整呢?如下图方案二中所示,就需要调整 abc 权威上对 sz.abc 域名的子域委派策略,直接指向 sz.abc 权威 DNS 的地址。

DNS 的查询看似简单,实际包含了很多使用条件,不管是递归查询还是迭代查询,都有自己独特的使用场景,如果对其理解不够,在 DNS 系统的建设上,就会出现问题。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广