详解DNS递归查询与迭代查询

简介:

关于01月23日全国范围内DNS污染,域名解析故障的根源,资深的IT人士都知道原因是什么,并非国家

互联网应急中心发出的遭受攻击一说。

因此这里介绍一下DNS服务器的查询原理,也就是递归查询和迭代查询。


下图比较简明的描述了DNS服务器为客户端解析主机www.163.com的全过程.

wKioL1LgjkrDu3gqAAKJlJWz1tA163.jpg



根域名服务器:互联网域名解析系统(DNS)中最高级别的域名服务器,全球有386台根服务器,被编号为A到M共13个标号。中国北京有两台编号为F的根服务器镜像,编号为I、J、L的各一,共5台镜像,在香港有A、F、I、J、L五台根服务器镜像,全部借由任播(Anycast)技术,所有编号相同的根服务器都是同一个IP,386台根服务器总共只使用了13个IP,因此可以抵抗针对其所进行的分布式拒绝服务攻击(DDoS)。


根域名服务器列表: (a-m.root-servers.net)

wKiom1LgpmuwjkANAACjjH6idLg846.jpg


客户端通过域名访问站点时,必须要有DNS服务器解析到指定的IP地址上,才能进行下一步的

访问。客户端发起访问请求后,首先检查本地host文件,检查是否存在对应的IP映射关系,如果有则

直接通过映射的IP进行访问;如果没有则将请求发送给首选的DNS服务器。


客户端和DNS服务器之间使用的是递归查询,而DNS服务器之间使用的是迭代查询.


递归查询时要求所请求的DNS服务器应答给客户端所请求的域名和IP的映射关系;

迭代查询时所请求的DNS服务器应答给客户端的不一定是域名和IP地址的映射关系,也可以是另一台

DNS服务器,让客户端再将请求发送到另一台DNS服务器.


下面按上图根据实例介绍DNS解析全过程.


客户端发起访问请求www.163.com:

1.查看本地hosts文件,发现没有www.163.com IP 映射关系,将请求发送给本地DNS服务器

                                  ----递归查询----

2.本地DNS服务器不包含163.com的权威域,不存在对应的www记录,因此将请求转发到根域名服务器

(假如  a.root-servers.net.)                                  

3.根域名DNS服务器会返回负责.com域解析的服务器(假如 a.gtld-servers.net.)给本地DNS服务器,

本地DNS服务器再将请求发送给 a.gtld-servers.net                                  

4..com域名服务器只能返回负责163.com域的解析服务器(如 ns1.nease.net.)给本地DNS服务器,本地

DNS服务器再将请求发送给ns1.nease.net.                                

5.由ns1.nease.net.域名服务器返回www.163.com 的 IP映射关系给本地DNS服务器

                         (2-5过程)----迭代查询----

6.本地DNS服务器将结果保存到本地缓存,并保持TTL时间,同时将结果应答给客户端.

                                  ----递归查询---- ----查询结束----


7.当其他客户端再次向本地DNS服务器查询www.163.com时,在TTL时间内,本地DNS服务器不再向根

域名服务器转发请求,而是直接从缓存中读取数据应答给客户端. 如果已经超过TTL时间,则本地DNS

服务器会再次经历一次上诉2-6的过程.


本地DNS服务器在代替客户端向其他服务器查询时,客户端完全处于等待状态。

递归查询时,返回的结果只有两种:查询成功或查询失败.

迭代查询,又称作重指引,返回的是最佳的查询点或者主机地址.


了解了以上原理,就可以很容易的判断DNS解析故障了,甚至于前日的全国DNS污染问题。


当然了解原理后,还需要了解相关的工具和命令: dig,nslookup,host等.其中以dig命令的功能最为强大和灵活.


dig命令典型应用形如


     dig  @server   name  type

@server: 指定域名服务器

name:指定查询请求资源的域名

type:指定查询类型,如A、CNAME、SRV、MX、SIG等,如果不指定type,默认为A


比如:

默认情况下DNS使用UDP查询,我们使用查询选项设置为TCP查询


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[shizhenning@zabbix ~]$  dig  @8.8.8.8  163.com +tcp
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com +tcp
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR,  id : 36041
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;163.com.                       IN      A
;; ANSWER SECTION:
163.com.                277     IN      A       123.58.180.8
163.com.                277     IN      A       123.58.180.7
;; Query  time : 54 msec
;; SERVER: 8.8.8.8 #53(8.8.8.8)
;; WHEN: Thu Jan 23 13:56:25 2014
;; MSG SIZE  rcvd: 57


查询MX记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[shizhenning@zabbix ~]$  dig  @8.8.8.8  163.com MX
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com MX
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR,  id : 41000
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;163.com.                       IN      MX
;; ANSWER SECTION:
163.com.                13741   IN      MX      50 163mx00.mxmail.netease.com.
163.com.                13741   IN      MX      10 163mx01.mxmail.netease.com.
163.com.                13741   IN      MX      10 163mx02.mxmail.netease.com.
163.com.                13741   IN      MX      10 163mx03.mxmail.netease.com.
;; Query  time : 41 msec
;; SERVER: 8.8.8.8 #53(8.8.8.8)
;; WHEN: Thu Jan 23 14:01:02 2014
;; MSG SIZE  rcvd: 136


查询CNAME记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[shizhenning@zabbix ~]$  dig  @8.8.8.8  www.163.com CNAME
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 www.163.com CNAME
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR,  id : 27024
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.163.com.                   IN      CNAME
;; ANSWER SECTION:
www.163.com.            347     IN      CNAME   www.163.com.lxdns.com.
;; Query  time : 41 msec
;; SERVER: 8.8.8.8 #53(8.8.8.8)
;; WHEN: Thu Jan 23 14:01:54 2014
;; MSG SIZE  rcvd: 61


查询DRV记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[shizhenning@zabbix ~]$  dig  @8.8.8.8  163.com SRV
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com SRV
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR,  id : 41227
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;163.com.                       IN      SRV
;; AUTHORITY SECTION:
163.com.                1800    IN      SOA     ns4.nease.net. admin.nease.net. 20130823 7200 1800 1209600 3600
;; Query  time : 137 msec
;; SERVER: 8.8.8.8 #53(8.8.8.8)
;; WHEN: Thu Jan 23 14:02:46 2014
;; MSG SIZE  rcvd: 80


我们要查询某个域名解析的全过程:(此时为迭代查询)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[shizhenning@zabbix ~]$  dig  @8.8.8.8  163.com +trace
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 163.com +trace
; (1 server found)
;; global options:  printcmd
.                       19586   IN      NS      a.root-servers.net.
.                       19586   IN      NS      b.root-servers.net.
.                       19586   IN      NS      c.root-servers.net.
.                       19586   IN      NS      d.root-servers.net.
.                       19586   IN      NS      e.root-servers.net.
.                       19586   IN      NS      f.root-servers.net.
.                       19586   IN      NS      g.root-servers.net.
.                       19586   IN      NS      h.root-servers.net.
.                       19586   IN      NS      i.root-servers.net.
.                       19586   IN      NS      j.root-servers.net.
.                       19586   IN      NS      k.root-servers.net.
.                       19586   IN      NS      l.root-servers.net.
.                       19586   IN      NS      m.root-servers.net.
;; Received 228 bytes from 8.8.8.8 #53(8.8.8.8) in 62 ms
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      a.gtld-servers.net.
;; Received 485 bytes from 198.41.0.4 #53(a.root-servers.net) in 134 ms
163.com.                172800  IN      NS      ns2.nease.net.
163.com.                172800  IN      NS      ns3.nease.net.
163.com.                172800  IN      NS      ns4.nease.net.
163.com.                172800  IN      NS      ns5.nease.net.
163.com.                172800  IN      NS      ns6.nease.net.
163.com.                172800  IN      NS      ns1.nease.net.
;; Received 238 bytes from 192.55.83.30 #53(m.gtld-servers.net) in 137 ms
163.com.                600     IN      A       123.58.180.7
163.com.                600     IN      A       123.58.180.8
163.com.                172800  IN      NS      ns2.nease.net.
163.com.                172800  IN      NS      ns5.nease.net.
163.com.                172800  IN      NS      ns6.nease.net.
163.com.                172800  IN      NS      ns3.nease.net.
163.com.                172800  IN      NS      ns4.nease.net.
163.com.                172800  IN      NS      ns1.nease.net.
;; Received 270 bytes from 114.113.197.12 #53(ns2.nease.net) in 34 ms



掌握dig命令后,DNS解析故障就很容易排查了.


关于域名服务器缓存污染只是一种技术,没有对错之分,有时我们企业内部也需要刻意使用这种技

来满足企业需求。关于DNS污染技术在企业中的应用场景,详见 浅谈活动目录域名称空间设计





     本文转自marbury 51CTO博客,原文链接:http://blog.51cto.com/magic3/1354084,如需转载请自行联系原作者




目录
打赏
0
0
0
0
349
分享
相关文章
Hologres 查询队列全面解析
Hologres V3.0引入查询队列功能,实现请求有序处理、负载均衡和资源管理,特别适用于高并发场景。该功能通过智能分类和调度,确保复杂查询不会垄断资源,保障系统稳定性和响应效率。在电商等实时业务中,查询队列优化了数据写入和查询处理,支持高效批量任务,并具备自动流控、隔离与熔断机制,确保核心业务不受干扰,提升整体性能。
186 11
新版本发布:查询更快,兼容更强,TDengine 3.3.4.3 功能解析
经过 TDengine 研发团队的精心打磨,TDengine 3.3.4.3 版本正式发布。作为时序数据库领域的领先产品,TDengine 一直致力于为用户提供高效、稳定、易用的解决方案。本次版本更新延续了一贯的高标准,为用户带来了多项实用的新特性,并对系统性能进行了深度优化。
153 3
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
124 1
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
1160 0
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
221 2
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
421 29
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问