详解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,如需转载请自行联系原作者




相关文章
|
域名解析 网络协议
DNS服务工作原理
文章详细介绍了DNS服务的工作原理,包括FQDN的概念、名称解析过程、DNS域名分级策略、根服务器的作用、DNS解析流程中的递归查询和迭代查询,以及为何有时基于IP能访问而基于域名不能访问的原因。
2239 2
DNS服务工作原理
|
负载均衡 网络协议 安全
DNS解析中的Anycast技术:原理与优势
【9月更文挑战第7天】在互联网体系中,域名系统(DNS)将域名转换为IP地址,但网络规模的扩张使DNS解析面临高效、稳定与安全挑战。Anycast技术应运而生,通过将同一IP地址分配给多个地理分布的服务器,并依据网络状况自动选择最近且负载低的服务器响应查询请求,提升了DNS解析速度与效率,实现负载均衡,缓解DDoS攻击,增强系统高可用性。此技术利用动态路由协议如BGP实现,未来在网络发展中将扮演重要角色。
1493 0
|
监控 安全 BI
【亮剑】摄像头组播技术,一种一对多通信方式,通过特殊组播地址实现信息源向多个目的地同时发送数据
【4月更文挑战第30天】摄像头组播技术,一种一对多通信方式,通过特殊组播地址实现信息源向多个目的地同时发送数据,节省带宽,降低延迟。应用于安全监控、交通管理、商业分析、远程教育和智能家居等领域,提高效率,保障安全。技术关键包括组播地址管理、路由选择和成员管理,以及网络拥塞和错误控制。随着技术发展,其在数字化世界中的作用将日益显著。
744 1
|
网络协议 安全 网络安全
|
存储 缓存 JavaScript
vue代码优化方案
【7月更文挑战第13天】 **Vue.js 优化要点:** 分解大组件以提高复用性和加载速度;利用计算属性与侦听器优化数据处理;使用Object.freeze()减少响应式数据;借助Vuex或Composition API管理状态;实现虚拟滚动和无限加载提升长列表性能;路由懒加载减少初始加载时间;用Vue DevTools检测性能瓶颈;定期代码审查与重构;应用缓存策略;遵循最佳实践与团队规范,提升应用整体质量。
410 2
|
网络协议 网络性能优化
第十二问:TCP慢起动详细解释
TCP的慢启动是其拥塞控制的一部分,旨在防止网络拥塞。在连接建立初期,TCP逐步增加发送的数据量,通过接收方的ACK确认来调整拥塞窗口(cwnd)。初始阶段cwnd较小,每收到一个ACK,cwnd增加1个MSS,发送速率大致翻倍。当cwnd达到慢启动阈值(ssthresh)时,进入拥塞避免阶段,cwnd改为线性增长。若发生数据丢失或网络拥塞,TCP会减小cwnd,重新进入慢启动。慢启动通过动态调整发送速率,确保网络不被瞬时大流量压垮。
|
缓存 算法 网络协议
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
1440 0
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回查询
本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。
1026 4
|
域名解析 网络协议 安全
【域名解析DNS专栏】DNS递归查询与迭代查询的区别及影响
【5月更文挑战第24天】DNS的递归查询与迭代查询是域名解析的两种方式。递归查询由客户端发起,DNS服务器负责全程解析,速度快但可能增加服务器负载和安全风险。迭代查询则需客户端参与多次查询,虽慢但分散负载,提高安全性。理解两者差异有助于优化网站访问体验和安全性。
3816 0
【域名解析DNS专栏】DNS递归查询与迭代查询的区别及影响