注意,这篇文章并不会详细的介绍DNS的解析过程,只是讲其中的迭代查询和递归查询该怎么理解.
我们知道DNS解析的过程中有涉及到向域名解析服务器查询的过程.这种查询主要分两种:迭代查询和递归查询.
关于这两种解析方式书上也好,网上也好一般都会这么解释:
- 主机向本地域名服务器一般递归查询
- 本地域名服务器向根域名服务器使用迭代查询
可是,这里面提到的递归查询和迭代查询到底该怎么理解呢?我看过好多遍都记不住这两个查询的区分,每次用到都需要重新查一次.不过好在,我最近在做开发的时候突然有了点灵感.结合我们开发过程中的一些经验和思想,可以抛出这样的一个理解方式,简单总结就是:
结论先行
迭代查询是请求方不变(上下文环境)的查询,递归查询的请求方(上下文环境)一直在改变.
此话怎讲呢,我们结合DNS的查询过程理解一下.
第一个阶段: 主机向本地域名服务器的请求使用一般使用递归查询
在这个阶段,主机向本地域名服务器发起请求,如果本地域名服务器不知道请求方想要的东西,那么本地域名服务器会向别的根域名服务器发起请求.如果按照这种方式不断持续进行下去的话,那么每次请求发起方都会改变.
这个过程就有点像我们编程里面的递归,在递归的多次执行中,每次的执行环境都在发生变化.
第二阶段:本地域名服务器向根域名服务器请求使用迭代查询
在这个阶段,本地域名服务器向根域名服务器发起请求,如果根域名服务器不知道请求方想要的东西,那根域名服务器会给请求方指定一个域名服务器让其去查询.这个过程请求方始终是本地域名服务器.
这就有点像我们开发时候的版本迭代,我们始终是在一个项目上进行的迭代开发,开发的项目始终是不变的.跟这里的请求发方不变一个道理.
再通俗点,不严谨的总结一下,就是:
迭代查询是在同一个主体的基础上进行的,而递归查询每次都在变更查询主体.
当然这是我个人琢磨出来的一种理解思路,目的是为了更好的区分这两种查询方式.不是很严谨.希望可以给大家提供一种说人话的理解方法,可以帮到大家.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。