浅谈 DNS 递归解析和迭代解析之间的区别
DNS 解析是互联网中的重要环节,承担着将域名翻译为可由计算机直接读取的 IP 地址的基础功能。根据查询对象不同,DNS 解析可分为递归解析和迭代解析两种方式,接下来,中科三方将简单介绍下两种查询方式的流程以及两种方式的区别。
什么是递归查询?
“递归解析”是最常见也是默认的一种解析方式。在这种解析方式中,如果客户端配置的本地域名服务器(Local DNS 服务器)不能解析的话,则后面的查询过程全部由本地域名服务器代替 DNS 客户端进行查询,直到本地域名服务器从权威域名服务器得到了正确的解析结果,然后由本地域名服务器告诉 DNS 客户端查询的结果。
在整个递归查询过程中,除一开始客户端向本地域名服务器发起查询请求外,其余各个环节均是以本地域名服务器为中心进行迭代查询,DNS 客户端一直处于等待状态,直到本地域名服务器发回最终查询结果。相当于,在整个查询环节中本地域名服务器承担了中介代理的角色。
递归解析的查询过程大致如下:
1.客户端向本机配置的本地域名服务器发起 DNS 域名查询请求;
2.本地域名服务器收到请求后,会先查询本地缓存,如果有记录值会直接返回给客户端;如果没有记录,则本地域名服务器会向根域名服务器发起请求;
3.根域名服务器收到请求后,会根据所要查询域名中的后缀将所对应的顶级域名服务器(如.com、.cn 等)返回给本地域名服务器;
4.本地域名服务器根据返回结果向所对应的顶级域名服务器发起查询请求;
5.对应的顶级域名服务器在收到 DNS 查询请求后,也是先查询自己的缓存,如果有所请求域名的解析记录,则会直接将记录返回给本地域名服务器,然后本地域名服务器再将记录返回给客户端,完成整个 DNS 解析过程。
6.如果顶级域名服务器没有记录值,就会将二级域名对应的服务器地址返回给本地域名服务器,本地域名服务器再次对二级域名服务器发起请求,如此类推,直到最终对应区域的权威域名服务器返回结果给本地域名服务器。然后本地域名服务器将记录值返回给 DNS 客户端,同时缓存本地查询记录,以便在 TTL 值内用户再次查询时直接将记录返回给客户端。
什么是迭代查询?
从上面的介绍中我们看到了,递归查询除在一开始客户端发起查询请求外,其他环节都是由本地域名服务器代替客户端进行的。而迭代查询则是指所有查询工作全部由客户端自己进行,除此之外,整个查询路径和步骤与递归查询没有太大区别。
DNS 迭代查询流程图
首先客户端向本地域名服务器发起请求,如果本地域名服务器没有缓存记录,客户端便会依次对根域名服务器、顶级域名服务器和二级域名服务器等发起迭代查询,直到获得最终的查询结果。
在以下条件之一满足时,就会采用迭代解析方式:
1.在查询本地域名服务器时,如果客户端的请求报文中没有申请使用递归查询,即在 DNS 请求报文中的 RD 字段没有设置为 1。
2.客户端在 DNS 请求报文中申请使用递归查询,但所配置的本地域名服务器禁止使用递归查询,即在应答 DNS 报文头部的 RA 字段设置为 0。
评论