怎么更好的理解DNS的迭代查询与递归查询

注意,这篇文章并不会详细的介绍DNS的解析过程,只是讲其中的迭代查询和递归查询该怎么理解.

咱们知道DNS解析的过程当中有涉及到向域名解析服务器查询的过程.这种查询主要分两种:迭代查询和递归查询.
关于这两种解析方式书上也好,网上也好通常都会这么解释:编程

  • 主机向本地域名服务器通常递归查询
  • 本地域名服务器向根域名服务器使用迭代查询

但是,这里面提到的递归查询和迭代查询到底该怎么理解呢?我看过好多遍都记不住这两个查询的区分,每次用到都须要从新查一次.不过好在,我最近在作开发的时候忽然有了点灵感.结合咱们开发过程当中的一些经验和思想,能够抛出这样的一个理解方式,简单总结就是:服务器

结论先行

迭代查询是请求方不变(上下文环境)的查询,递归查询的请求方(上下文环境)一直在改变.
此话怎讲呢,咱们结合DNS的查询过程理解一下.递归

第一个阶段: 主机向本地域名服务器的请求使用通常使用递归查询

在这个阶段,主机向本地域名服务器发起请求,若是本地域名服务器不知道请求方想要的东西,那么本地域名服务器会向别的根域名服务器发起请求.若是按照这种方式不断持续进行下去的话,那么每次请求发起方都会改变.
这个过程就有点像咱们编程里面的递归,在递归的屡次执行中,每次的执行环境都在发生变化.开发

第二阶段:本地域名服务器向根域名服务器请求使用迭代查询

在这个阶段,本地域名服务器向根域名服务器发起请求,若是根域名服务器不知道请求方想要的东西,那根域名服务器会给请求方指定一个域名服务器让其去查询.这个过程请求方始终是本地域名服务器.
这就有点像咱们开发时候的版本迭代,咱们始终是在一个项目上进行的迭代开发,开发的项目始终是不变的.跟这里的请求发方不变一个道理.域名

再通俗点,不严谨的总结一下,就是:
迭代查询是在同一个主体的基础上进行的,而递归查询每次都在变动查询主体.基础

固然这是我我的琢磨出来的一种理解思路,目的是为了更好的区分这两种查询方式.不是很严谨.但愿能够给你们提供一种说人话的理解方法,能够帮到你们.域名解析