DNS域名解析
一、DNS域名解析步骤
下图是DNS域名解析的一个示例图,它涵盖了基本解析步骤和原理。
下面DNS解析步骤进行讲解,后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址栏键入www.baidu.com并敲下回车键之后,域名解析就开始了。
第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址
用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址,当用户再次访问的时候,浏览器就会从缓存中查找该域名对应的IP地址,因为缓存不仅是有大小限制,而且还有时间限制(域名被缓存的时间通过TTL属性来设置),所以存在域名对应的IP找不到的情况。当浏览器从缓存中找到了该网站域名对应的IP地址,那么整个DNS解析过程结束,如果没有找到,将进行下一步骤。对于IP的缓存时间问题,不宜设置太长的缓存时间,时间太长,如果域名对应的IP发生变化,那么用户将在一段时间内无法正常访问到网站,如果太短,那么又造成频繁解析域名。
第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机操作系统是否缓存过IP
如果第一个步骤没有完成对域名的解析过程,那么浏览器会去系统缓存中查找系统是否缓存过这个域名对应的IP地址,也可以理解为系统自己也具备域名解析的基本能力。在Windows系统中,可以通过设置hosts文件来将域名手动绑定到某IP上,hosts文件位置在C:\Windows\System32\drivers\etc\hosts。对于普通用户,并不推荐自己手动绑定域名和IP,对于开发者来说,通过绑定域名和IP,可以轻松切换环境,可以从测试环境切换到开发环境,方便开发和测试。在XP系统中,黑客常常修改他的电脑的hosts文件,将用户常常访问的域名绑定到他指定的IP上,从而实现了本地DNS解析,导致这些域名被劫持。在Linux或者Mac系统中,hosts文件在/etc/hosts,修改该文件也可以实现同样的目的。
前两步都是在本机上完成的,所以没有在上面示例图上展示出来,从第三步开始,才正在地向远程DNS服务器发起解析域名的请求。
第三步:向本地域名解析服务系统发起域名解析的请求
如果在本机上无法完成域名的解析,那么系统只能请求本地域名解析服务系统进行解析,本地域名系统LDNS一般都是本地区的域名服务器,比如你连接的校园网,那么域名解析系统就在你的校园机房里,如果你连接的是电信、移动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商来提供服务。对于本地DNS服务器地址,Windows系统使用命令ipconfig就可以查看,在Linux和Mac系统下,直接使用命令cat /etc/resolv.conf来查看LDNS服务地址。LDNS一般都缓存了大部分的域名解析的结果,当然缓存时间也受域名失效时间控制,大部分的解析工作到这里就差不多已经结束了,LDNS负责了大部分的解析工作。
第四步:向根域名解析服务器发起域名解析请求
本地DNS域名解析器还没有完成解析的话,那么本地域名解析服务器将向根域名服务器发起解析请求。
第五步:根域名服务器返回gTLD域名解析服务器地址
本地DNS域名解析向根域名服务器发起解析请求,根域名服务器返回的是所查域的通用顶级域(Generic top-level domain,gTLD)地址,常见的通用顶级域有.com、.cn、.org、.edu等。
第六步:向gTLD服务器发起解析请求
本地域名解析服务器向gTLD服务器发起请求。
第七步:gTLD服务器接收请求并返回Name Server服务器
gTLD服务器接收本地域名服务器发起的请求,并根据需要解析的域名,找到该域名对应的Name Server域名服务器,通常情况下,这个Name Server服务器就是你注册的域名服务器,那么你注册的域名的服务商的服务器将承担起域名解析的任务。
第八步:Name Server服务器返回IP地址给本地服务器
Name Server服务器查找域名对应的IP地址,将IP地址连同TTL值返回给本地域名服务器。
第九步:本地域名服务器缓存解析结果
本地域名服务器缓存解析后的结果,缓存时间由TTL时间来控制。
第十步:返回解析结果给用户
解析结果将直接返回给用户,用户系统将缓存该IP地址,缓存时间由TTL来控制,至此,解析过程结束。
这里对DNS解析的步骤进行了一个简单的介绍分析,后面将通过命令行的形式来解析一个域名的具体解析过程。
二、DNS域名解析过程分析
在正式开始分析解析过程之前,先来介绍几个基本的域名解析方式的概念。域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录以及TXT记录。
A记录:A代表的是Address,用来指定域名对应的IP地址,比如将map.baidu.com指定到180.97.34.157,将zhidao.baidu.com指定到180.149.131.245,A记录允许将多个域名解析到一个IP地址,但不允许将一个域名解析到多个IP地址上。
MX记录:MX代表的是Mail Exchage,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如baidu.com域名的A记录IP地址是180.97.34.157,如果将MX记录设置为180.97.34.154,即xxx@baidu.com的邮件路由,那么DNS会将邮件发送到180.97.34.154所在的服务器,而正常web请求仍然会解析到A记录的IP地址180.97.34.157。
CNAME记录:CNAME指的就是Canonical Name,也就是别名解析,可以将指定的域名解析到其他域名上,而其他域名就是指定域名的别名,整个解析过程称为别名解析。比如将baidu.com解析到itlemon.cn,将csdn.net解析到itlemon.cn,那么itlemon.cn就是baidu.com和CSDN.net的别名。
NS记录:就是为某个域名指定了特定的DNS服务器去解析。
TXT记录:为某个主机名或者域名设置特定的说明,比如为itlemon.cn设置的的TXT记录为“Lemon的技术笔记”,这个TXT记录为itlemon.cn的说明。
上面概念中的IP地址都是假定的,帮助理解。下面将通过解析域名baidu.com为例,进一步说明域名解析流程。
直接查看域名结果,可以通过命令nslookup加上域名来查看:
[jochebed@localhost code]$ nslookup www.baidu.com
Server: 192.168.43.1
Address: 192.168.43.1#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 183.232.231.172
Name: www.a.shifen.com
Address: 183.232.231.174
上图中Non-authoritative answer表示解析结果来自非权威服务器,也就是说这个结果来自缓存,并没有完全经历全部的解析过程,从某个缓存中读取的结果,这个结果存在一定的隐患,比如域名对应的IP地址已经更变。
这只是一个快捷的解析结果,如果需要浏览全部的解析过程,那么可以使用dig命令来查看解析过程。
[jochebed@localhost code]$ dig www.baidu.com +trace
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> www.baidu.com +trace
;; global options: +cmd
. 430045 IN NS b.root-servers.net.
. 430045 IN NS m.root-servers.net.
. 430045 IN NS e.root-servers.net.
. 430045 IN NS h.root-servers.net.
. 430045 IN NS g.root-servers.net.
. 430045 IN NS j.root-servers.net.
. 430045 IN NS k.root-servers.net.
. 430045 IN NS f.root-servers.net.
. 430045 IN NS a.root-servers.net.
. 430045 IN NS d.root-servers.net.
. 430045 IN NS i.root-servers.net.
. 430045 IN NS l.root-servers.net.
. 430045 IN NS c.root-servers.net.
;; Received 239 bytes from 192.168.43.1#53(192.168.43.1) in 423 ms
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20190322190000 20190309180000 16749 . oKX1uB7l/3h5vz4z51mby3fCqXCxvavjTK2IScCM1z8L/KCuXw5CjenG gFQGMXKh4LQMkUP2Pw9h4WlN6qTz7abo7IZingTivUVLjB8d5OCsFhSI llSVBEM3V12nHX1yH6P+EHlZEYg4dfbXxf/4s8/r7TLQ5lWXNWHNaRuq BzpqHO6lglg9QnP8b0X50suDg8aAqAkBm8+8cOGjF+/E4dysaKC2Tsbe DZTdIIH48u0K+WloniQIsxBMJB/CiPpfBrBqXlvk3JFMIts/LyOSTCHr kzWFNXaeTGxLPE0eR1tMWuPEcS66GXqIBZKOfJQElQNOWdihltqtAjJJ x5AtrA==
;; Received 1173 bytes from 202.12.27.33#53(m.root-servers.net) in 8880 ms
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20190316044521 20190309043521 16883 com. DHkCBLG4YbAgDR7yj/Qu+LD/prXqR7NdPThP3mqis2aQcYw2WC6Y5Baq fCdYF1c1bgT9oBe/SusdZgqT56CzrXoF+G1MwRIrMdHCUHvR6BU28GCw 2rJJ9wcmrri2+mWHA0W1qBpt8bm0K3/V2FmLDtit0bJyUyZkfQ8BtRBB hZ8=
HPVV2B5N85O7HJJRB7690IB5UVF9O9UA.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6 NS DS RRSIG
HPVV2B5N85O7HJJRB7690IB5UVF9O9UA.com. 86400 IN RRSIG NSEC3 8 2 86400 20190314050640 20190307045640 16883 com. XX04tPfd5pleVD87AY2qAQtmom5vrpmIMRdA1W/DcrMa9F9yFfcktAMK YDEBkRnHn3ZtZleCug2qDPSc+DDEf8xmPnS7ylkr/PqQroUDOrMRV9e2 zqXHq9u8Z6NMlZ5JAKNhbAshcRa2AcuF9BpNalcaUfT/k9RSC+JWzgm7 Yg0=
;; Received 697 bytes from 192.42.93.30#53(g.gtld-servers.net) in 2534 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
;; Received 239 bytes from 14.215.178.80#53(ns4.baidu.com) in 67 ms
分析上面DNS解析过程,我们可以看出:
第一步:从本地DNS域名解析服务器获取到13个根DNS域名服务器(.)对应的主机名。
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> www.baidu.com +trace
;; global options: +cmd
. 430045 IN NS b.root-servers.net.
. 430045 IN NS m.root-servers.net.
. 430045 IN NS e.root-servers.net.
. 430045 IN NS h.root-servers.net.
. 430045 IN NS g.root-servers.net.
. 430045 IN NS j.root-servers.net.
. 430045 IN NS k.root-servers.net.
. 430045 IN NS f.root-servers.net.
. 430045 IN NS a.root-servers.net.
. 430045 IN NS d.root-servers.net.
. 430045 IN NS i.root-servers.net.
. 430045 IN NS l.root-servers.net.
. 430045 IN NS c.root-servers.net.
;; Received 239 bytes from 192.168.43.1#53(192.168.43.1) in 423 ms第二步:从13个根域名服务器中的其中一个(这里是h.root-servers.net)获取到顶级com.的服务器IP(未显示)和名称。
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20190322190000 20190309180000 16749 . oKX1uB7l/3h5vz4z51mby3fCqXCxvavjTK2IScCM1z8L/KCuXw5CjenG gFQGMXKh4LQMkUP2Pw9h4WlN6qTz7abo7IZingTivUVLjB8d5OCsFhSI llSVBEM3V12nHX1yH6P+EHlZEYg4dfbXxf/4s8/r7TLQ5lWXNWHNaRuq BzpqHO6lglg9QnP8b0X50suDg8aAqAkBm8+8cOGjF+/E4dysaKC2Tsbe DZTdIIH48u0K+WloniQIsxBMJB/CiPpfBrBqXlvk3JFMIts/LyOSTCHr kzWFNXaeTGxLPE0eR1tMWuPEcS66GXqIBZKOfJQElQNOWdihltqtAjJJ x5AtrA==
;; Received 1173 bytes from 202.12.27.33#53(m.root-servers.net) in 8880 ms第三步:向com.域的一台服务器192.42.93.30(g.gtld-servers.net)请求解析,它返回了baidu.com域的服务器IP(未显示)和名称,百度有四台顶级域的服务器。
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20190316044521 20190309043521 16883 com. DHkCBLG4YbAgDR7yj/Qu+LD/prXqR7NdPThP3mqis2aQcYw2WC6Y5Baq fCdYF1c1bgT9oBe/SusdZgqT56CzrXoF+G1MwRIrMdHCUHvR6BU28GCw 2rJJ9wcmrri2+mWHA0W1qBpt8bm0K3/V2FmLDtit0bJyUyZkfQ8BtRBB hZ8=
HPVV2B5N85O7HJJRB7690IB5UVF9O9UA.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6 NS DS RRSIG
HPVV2B5N85O7HJJRB7690IB5UVF9O9UA.com. 86400 IN RRSIG NSEC3 8 2 86400 20190314050640 20190307045640 16883 com. XX04tPfd5pleVD87AY2qAQtmom5vrpmIMRdA1W/DcrMa9F9yFfcktAMK YDEBkRnHn3ZtZleCug2qDPSc+DDEf8xmPnS7ylkr/PqQroUDOrMRV9e2 zqXHq9u8Z6NMlZ5JAKNhbAshcRa2AcuF9BpNalcaUfT/k9RSC+JWzgm7 Yg0=
;; Received 697 bytes from 192.42.93.30#53(g.gtld-servers.net) in 2534 ms第四步:向百度的顶级域服务器14.215.178.80(ns4.baidu.com)请求www.baidu.com,它发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com。
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
;; Received 239 bytes from 14.215.178.80#53(ns4.baidu.com) in 67 ms
一般情况下,DNS解析到别名就停止了,返回了具体的IP地址,如果想看到具体的IP地址,可以进一步对别名进行解析,解析结果如下:
[jochebed@localhost code]$ dig www.a.shifen.com +trace
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> www.a.shifen.com +trace
;; global options: +cmd
. 429503 IN NS g.root-servers.net.
. 429503 IN NS j.root-servers.net.
. 429503 IN NS e.root-servers.net.
. 429503 IN NS m.root-servers.net.
. 429503 IN NS d.root-servers.net.
. 429503 IN NS h.root-servers.net.
. 429503 IN NS k.root-servers.net.
. 429503 IN NS f.root-servers.net.
. 429503 IN NS a.root-servers.net.
. 429503 IN NS l.root-servers.net.
. 429503 IN NS b.root-servers.net.
. 429503 IN NS i.root-servers.net.
. 429503 IN NS c.root-servers.net.
;; Received 239 bytes from 192.168.43.1#53(192.168.43.1) in 417 ms
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20190322190000 20190309180000 16749 . oKX1uB7l/3h5vz4z51mby3fCqXCxvavjTK2IScCM1z8L/KCuXw5CjenG gFQGMXKh4LQMkUP2Pw9h4WlN6qTz7abo7IZingTivUVLjB8d5OCsFhSI llSVBEM3V12nHX1yH6P+EHlZEYg4dfbXxf/4s8/r7TLQ5lWXNWHNaRuq BzpqHO6lglg9QnP8b0X50suDg8aAqAkBm8+8cOGjF+/E4dysaKC2Tsbe DZTdIIH48u0K+WloniQIsxBMJB/CiPpfBrBqXlvk3JFMIts/LyOSTCHr kzWFNXaeTGxLPE0eR1tMWuPEcS66GXqIBZKOfJQElQNOWdihltqtAjJJ x5AtrA==
;; Received 1176 bytes from 202.12.27.33#53(m.root-servers.net) in 4147 ms
shifen.com. 172800 IN NS dns.baidu.com.
shifen.com. 172800 IN NS ns2.baidu.com.
shifen.com. 172800 IN NS ns3.baidu.com.
shifen.com. 172800 IN NS ns4.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20190316044521 20190309043521 16883 com. DHkCBLG4YbAgDR7yj/Qu+LD/prXqR7NdPThP3mqis2aQcYw2WC6Y5Baq fCdYF1c1bgT9oBe/SusdZgqT56CzrXoF+G1MwRIrMdHCUHvR6BU28GCw 2rJJ9wcmrri2+mWHA0W1qBpt8bm0K3/V2FmLDtit0bJyUyZkfQ8BtRBB hZ8=
KVGU4OD0D4T5880A9HHUKEND52426KFR.com. 86400 IN NSEC3 1 1 0 - KVGUFVJVEGQ5A215E52483IQ8QATJBT8 NS DS RRSIG
KVGU4OD0D4T5880A9HHUKEND52426KFR.com. 86400 IN RRSIG NSEC3 8 2 86400 20190314042041 20190307041041 16883 com. Ou6NCgqhrjFx3/GYRIElrBcfKJ9t7K5HTFfaxpL2leTJdOoIqx/SmQDK vpOobOXmDPrNhTLEZtkmbkFdGlCkqgB2pRBasQGNwHqVFJzEptnc5XxB oKCEgzEeg6iW6tSZHWQ+9w3POlIPXuO1gWnLQcK5K6mdYaOD2l1DyjPW K9s=
;; Received 672 bytes from 192.26.92.30#53(c.gtld-servers.net) in 541 ms
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
;; Received 215 bytes from 112.80.248.64#53(ns3.baidu.com) in 316 ms
www.a.shifen.com. 300 IN A 183.232.231.172
www.a.shifen.com. 300 IN A 183.232.231.174
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
;; Received 236 bytes from 14.215.177.229#53(ns4.a.shifen.com) in 64 ms
这时候看到最后的解析结果是183.232.231.172和183.232.231.174。在解析别名的过程中,可以发现shifen.com和baidu.com都是指定了相同的域名解析服务器。以上是一个域名的解析过程,最后的解析结果和一开始的使用nslookup的结果一致。
还没有评论,来说两句吧...