借助dig命令分析DNS解析过程
DNS(Domain Name System,域名系统),是一种用于将域名解析为IP的服务器系统,当你上网时输入一个网址,它之所以能够找到该网址指向的服务器地址,都是靠域名系统来进行解析的。
先来讲讲域名。以mail.dlut.edu.cn为例,一个域名,其实是从最右端开始逐层向下的,也就是说.cn是最高级的域名,往下才是.edu,然后到.dlut,最后mail是网站服务器的主机名,通过这样一层一层就能找到你需要访问的服务器地址。
当我们输入一个网址时,DNS帮我们找到这个网址对应的服务器的过程是怎样的呢?
1、首先要知道,我们每一部连上Internet的电脑都需要配置当前网络的DNS服务器地址,例如你开通校园网时,学校会给你分配IP,以及告诉你几个DNS(默认、备用)的地址让你填好,这个就是直接为你服务的DNS。但是,单靠这个DNS是无法直接解析域名的,在它之上还有更高级的DNS,这些DNS协同运作最终为你找到你需要的域名所在的服务器,下面来讲讲具体过程。
执行dig命令:
|
1 |
dig mail.dlut.edu.cn +trace |
|
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 49 |
[root@iZm5eef03d3t5i0uciwpfxZ ~]# dig mail.dlut.edu.cn +trace ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> mail.dlut.edu.cn +trace ;; global options: +cmd . 170257 IN NS l.root-servers.net. . 170257 IN NS d.root-servers.net. . 170257 IN NS i.root-servers.net. . 170257 IN NS k.root-servers.net. . 170257 IN NS h.root-servers.net. . 170257 IN NS c.root-servers.net. . 170257 IN NS a.root-servers.net. . 170257 IN NS g.root-servers.net. . 170257 IN NS f.root-servers.net. . 170257 IN NS e.root-servers.net. . 170257 IN NS m.root-servers.net. . 170257 IN NS j.root-servers.net. . 170257 IN NS b.root-servers.net. . 515895 IN RRSIG NS 8 0 518400 20180328200000 20180315190000 41824 . gZKff74Th31jl+jS470MQHNVnV0txz48FChiDL/brOf2CXl6XPyIRQ1C 22qzr69/S6pDoO8oPW0nS+2IBxXOhnbU8tfNjHSOVS6yvnmoP0SHEV+B yi5WUyJDF4GN+dS5aNW30RM1dtaQkunLpjY2jTIDkzstV9BmnQnKcYr0 2oltImSStLNxGxKwXzksXJ3rIAhBHKdc1bVSQyyLqbz9y7A8sLOiqUy5 yahLzv2zuIMcuMYvF7Sy72MwfQUnPZ4yR4DP2cvccVYbOox4V4smc9Uy 3Ncabk05gdceltRwgZ2t1c+8StNVR1oKLRUE9wkhyT1zVrBcQqy5pyB2 W9HBgQ== ;; Received 1097 bytes from 10.143.22.116#53(10.143.22.116) in 528 ms cn. 172800 IN NS g.dns.cn. cn. 172800 IN NS f.dns.cn. cn. 172800 IN NS a.dns.cn. cn. 172800 IN NS c.dns.cn. cn. 172800 IN NS d.dns.cn. cn. 172800 IN NS ns.cernet.net. cn. 172800 IN NS b.dns.cn. cn. 172800 IN NS e.dns.cn. cn. 86400 IN DS 57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD 97C67044 cn. 86400 IN RRSIG DS 8 1 86400 20180329050000 20180316040000 41824 . JkfiIM4SbN5vOPKNgj2tab1q19l8zukWPAVJj9ehRHSNdcgOa0he++AE 1YbI6pegq8a/SG3Ml9ntBLRc89LBHqwgETqY3tg9bvlkewbrqEqfLIVQ ovGIRatb7Y65vIBZzXyPTM+KWu8ggwZBvmoMsZ2HDbslIZPXZ13tdQIW TE4A7MtndY7b2DIWVYvaNJa+xsU06xRxn16lCVei7YyhREOnS2JHSlsf dHgGQA2zDY50MJkP858If7KIpzyabY/fuAoIK53XCvGs4K88kQeqbpOK +KzSZoFebNm4XilBMikMAj4+CTYx8EsmuZ8eO4qKH4/hC1WRMOS+Qrex zjzCzQ== ;; Received 707 bytes from 199.7.91.13#53(d.root-servers.net) in 926 ms edu.cn. 172800 IN NS ns2.cuhk.hk. edu.cn. 172800 IN NS dns.edu.cn. edu.cn. 172800 IN NS dns2.edu.cn. edu.cn. 172800 IN NS deneb.dfn.de. edu.cn. 172800 IN NS ns2.cernet.net. 3QDAQA092EE5BELP64A74EBNB8J53D7E.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QLMP0QRNQ96G5AFGOPNB7U7IJ4MBP4B NS SOA RRSIG DNSKEY NSEC3PARAM 3QDAQA092EE5BELP64A74EBNB8J53D7E.cn. 21600 IN RRSIG NSEC3 8 2 21600 20180414071442 20180315061442 54393 cn. TyFkIRKNz+qGiQKl96Zna2GpPZtoosr1HrTZ5dEjVChS33jVepckPOQY LJrbUGwjoSWNbjRudUDvubTO7vYROb/Hzb5Ei7ceBffoKg1TN7nWrnM4 jAyyVkA+5eFPvTq89z1EzU6YsuGUTq335UrmRzhCAHM7lKehyiG6EVng oe0= 39RHJMG7OQR8QCTU59OBQ62NRDQE045I.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3A62EEG57NMMFHK1O7347GBEBUJUESOH CNAME RRSIG 39RHJMG7OQR8QCTU59OBQ62NRDQE045I.cn. 21600 IN RRSIG NSEC3 8 2 21600 20180414071442 20180315061442 54393 cn. oC5IrpU7pt6ZSnHcz6rl4WnZ+zuPiA6mlxhBMoCpKnql3ko7V2ehgNeV 3ODMqCEExljSpQbNiIYjE0yZ9qlYmUluCn4V1wnel+gQn5ed90ocyJDw TNM2idT33Xrxf7Ml0OY3t5JiVPBZB7kuhnkvclgLdnW6aNGNZ9DYJa8E D6c= ;; Received 684 bytes from 195.219.8.90#53(f.dns.cn) in 1963 ms dlut.edu.cn. 172800 IN NS cedrus.dlut.edu.cn. dlut.edu.cn. 172800 IN NS gingko.dlut.edu.cn. ;; Received 119 bytes from 192.76.176.9#53(deneb.dfn.de) in 573 ms mail.dlut.edu.cn. 86400 IN A 202.118.66.82 ;; Received 61 bytes from 202.118.66.6#53(cedrus.dlut.edu.cn) in 30 ms |
补充:
如果机器上用不了dig命令的话,使用下面方式安装:
Fedora / Centos:
|
1 |
yum install bind-utils |
Ubuntu:
|
1 |
sudo apt-get install dnsutils |
Debian:
|
1 2 |
# apt-get update # apt-get install dnsutils |
安装后也会包含nslookup命令。
2.看上面执行过程,第一层消息:
|
1 |
Received 1097 bytes from 10.143.22.116#53(10.143.22.116) in 528 ms |
10.143.22.116这个IP是什么呢?查看一下本机DNS:
|
1 2 3 4 5 6 7 |
[root@iZm5eef03d3t5i0uciwpfxZ ~]# nslookup > ; Server: 10.143.22.116 Address: 10.143.22.116#53 ** server can't find ;: NXDOMAIN > |
没错,就是本机DNS
这时直接为本机的DNS(10.143.22.116)首先会将请求报告给DNS系统的最高等级服务器“. ”,没错,就是一个小数点,这个最高等级DNS服务器称为root。
3、得到这个响应之后,DNS系统的最高等级服务器(199.7.91.13)会将请求报告给.cn的DNS。
4、然后,.cn的DNS(195.219.8.90)会给.edu.cn的DNS提交请求。
5、然后,.edu.cn的DNS(192.76.176.9)会给dlut.edu.cn的DNS提交请求。
6、最后,dlut.edu.cn的DNS(202.118.66.6)向mail.dlut.edu.cn的DNS 提供请求,终于能够找到这个网址对应的IP(202.118.66.82)了。
整个域名解析过程就是如此,可能你会觉得,这样不是很繁琐吗,为什么不直接找到dlut.edu.cn的DNS呢?
这是不可能的,因为单一的DNS不可能记住所有域名对应的IP,这样会使整个服务器变得很臃肿,也就变得不可靠。采用这种分层的方法,就可以实现分层管理,从而达到效率提高的目的。
其实dig命令更简单的用法是:
|
1 |
dig www.baidu.cn |
|
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 |
[root@iZm5eef03d3t5i0uciwpfxZ ~]# dig www.baidu.cn ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> www.baidu.cn ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52884 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 5 ;; QUESTION SECTION: ;www.baidu.cn. IN A ;; ANSWER SECTION: www.baidu.cn. 600 IN CNAME www.a.shifen.com. www.a.shifen.com. 133 IN A 220.181.111.188 www.a.shifen.com. 133 IN A 220.181.112.244 ;; AUTHORITY SECTION: a.shifen.com. 14 IN NS ns1.a.shifen.com. a.shifen.com. 14 IN NS ns4.a.shifen.com. a.shifen.com. 14 IN NS ns5.a.shifen.com. a.shifen.com. 14 IN NS ns3.a.shifen.com. a.shifen.com. 14 IN NS ns2.a.shifen.com. ;; ADDITIONAL SECTION: ns1.a.shifen.com. 514 IN A 61.135.165.224 ns2.a.shifen.com. 514 IN A 180.149.133.241 ns3.a.shifen.com. 428 IN A 61.135.162.215 ns4.a.shifen.com. 514 IN A 115.239.210.176 ns5.a.shifen.com. 428 IN A 119.75.222.17 ;; Query time: 0 msec ;; SERVER: 10.143.22.116#53(10.143.22.116) ;; WHEN: Fri Mar 16 14:56:16 CST 2018 ;; MSG SIZE rcvd: 262 [root@iZm5eef03d3t5i0uciwpfxZ ~]# |
开头是一些统计信息,可以不用管,我们看一看后面的SECTION
QUESTION SECTION 这部分是提问,显示你要查询的域名
ANSWER SECTION 即答案,显示查询到的域名对应的IP
AUTHORITY SECTION 这部分显示的是直接提供这个域名解析的DNS服务器,不包括更高级DNS服务器
ADDITIONAL SECTION 这部分显示的是这些直接提供解析的服务器的IP地址
最后面的是一些统计信息,其中SERVER指的是直接为你服务的本地DNS服务器的IP。
除了这些内容之外,还有:
1、中间的5指的是ttl(time to live ,暂存时间),表示这次请求会在服务器上保存多久时间(单位:秒)。
2、IN是固定关键词
3、CNAME是别名,意思是这个域名还有另外一个名字,两者指向同一个IP。 A指的是Address,即IP地址。 NS指的是服务器主机名,在AUTHORITY SECTION里面的服务器主机名,都会在ADDITIONAL SECTION里给出该主机的IP地址。
在上面的dig命令我们可以看到,在解析一个域名的时候,往往会发现有多个DNS服务器提供解析服务,这是因为DNS服务器要求一般至少有两个,以防发生服务器宕机无法提供域名解析的情况。那么多个服务器,谁来响应这个DNS请求呢?这就要看服务器管理者怎么设置各个服务器的主从关系(Master-Slave)了,通过dig命令也可以查看DNS服务器的主从关系。
|
1 |
dig -t soa www.baidu.com |
|
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 |
[root@iZm5eef03d3t5i0uciwpfxZ ~]# dig -t soa www.baidu.com ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t soa www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29911 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.baidu.com. IN SOA ;; ANSWER SECTION: www.baidu.com. 830 IN CNAME www.a.shifen.com. ;; AUTHORITY SECTION: a.shifen.com. 600 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1803160001 5 5 2592000 3600 ;; Query time: 15 msec ;; SERVER: 10.143.22.116#53(10.143.22.116) ;; WHEN: Fri Mar 16 14:57:08 CST 2018 ;; MSG SIZE rcvd: 126 [root@iZm5eef03d3t5i0uciwpfxZ ~]# |
SOA是start of authority的简称,提供了DNS主服务器的相关信息,在soa之后我们可以看到7个参数,依次是:
1、DNS主服务器名
2、管理员的E-mail,这里是baidu.dns.master@baidu.com,由于@在数据库文件里有特殊作用,所以这里是用.代替的。
3、更新序号。表示数据库文件的新旧,一般是用时间来表示,这里1703230011表示的是2017年3月23日进行了一次更新,当天更新编号0011.
4、更新频率。 表示每5秒,slave服务器就要向master服务器索取更新信息。
5、失败重试时间,当某些原因导致Slave服务器无法向master服务器索取信息时,会隔5秒就重试一次。
6、失效时间。如果一直重试失败,当重试时间累积达到86400秒时,不再向主服务器索取信息。
7、缓存时间。默认的TTL缓存时间。
参考资料:
http://blog.csdn.net/a583929112/article/details/66499771
http://1www.71j.cn/archives/115

