前言
在介绍域名解析命令前,需要首先理解域名的解析过程,理解解析过程后,能更深刻的理解nslookup、dig命令。
域名解析
为什么要有域名?
假如没有域名,那么访问一个网址,比如百度,需要输入ip,我们知道输ip麻烦而且不好记。所以,才发明了域名。这就像你们家的门牌号和你的名字一样,有人找你,他要是说某某门牌号也许很多人不知道,但是一提你的名字很多人就知道了,以上是形象的说法。其实,我们还可以从tcp/ip模型去思考,tcp/ip只认识ip它不认识域名,所以在访问网络时,最终是将域名解析为ip的。浏览器发送请求之前,首先会通过DNS解析获取ip,然后再发送请求。
域名解析
域名解析就是从域名地址转为ip地址的过程。
第1步,客户端发送到local name server,如果local name server存有域名和对应的ip,则返回,否则发送请求到root name server
第2步,local name server发送请求到root name server,root name server返回顶级域名服务器地址(gTLD name server),
第4步,local name server 请求gTLD name server,gTLD name server返回对应的name server
第6步,local name server请求name server,name server返回ttl和ip,local name server缓存ip,然后返回给客户端。
注意,name server可能有多级。
查询域名对应的ip
windows&&linux
查看域名对应的ip,无论在windows还是在linux下都是用 nslookup
,这里还是拿 www.baidu.com 做测试。
我们可以看见 www.baidu.com 对应 61.135.169.121 这个ip。我们再看一下浏览器请求走的ip,可以看见,走的 61.135.169.121 这个
下面我们来分析一下 nslookup www.baidu.com
结果
Server: 192.168.0.5 //1
Address: 192.168.0.5#53 //2
Non-authoritative answer://3
www.baidu.com canonical name = www.a.shifen.com.//4
Name: www.a.shifen.com//5
Address: 61.135.169.125//6
Name: www.a.shifen.com//7
Address: 61.135.169.121//8
第1行,Server,指的是默认dns服务器,也就是local DNS,就是局域网的DNS服务器
第2行,Address,指的是localDNS对应的ip
第3行,非权威解答:要查询的域名不受默认dns服务器管理,就是非权威解答。反之要查询的域名受默认域名dns服务器管理,就是权威解答。
第4行,指定别名,将 www.baidu.com
指定别名为 www.a.shifen.com
第5-8行,同一个域名先后解析了两次,最终解析结果是 61.135.169.121
域名解析过程
接下来,我们使用dig
(只能用在linux下,可以下载windows版本)查看详细的域名解析过程。
我们把响应区摘出来,
www.baidu.com. 326 IN CNAME www.a.shifen.com. //1
www.a.shifen.com. 33 IN A 61.135.169.125 //2
www.a.shifen.com. 33 IN A 61.135.169.121 //3
第1行, www.baidu.com
解析到别名 www.a.shifen.com
第2、3行,将www.a.shifen.com
解析了两次,最终解析到61.135.169.121
如果添加 +trace
能看到详细信息
[[email protected] ~]# dig +trace www.baidu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> +trace www.baidu.com
;; global options: +cmd
. 3600 IN NS l.root-servers.net.
. 3600 IN NS k.root-servers.net.
. 3600 IN NS j.root-servers.net.
. 3600 IN NS i.root-servers.net.
. 3600 IN NS h.root-servers.net.
. 3600 IN NS g.root-servers.net.
. 3600 IN NS f.root-servers.net.
. 3600 IN NS e.root-servers.net.
. 3600 IN NS d.root-servers.net.
. 3600 IN NS c.root-servers.net.
. 3600 IN NS b.root-servers.net.
. 3600 IN NS a.root-servers.net.
. 3600 IN NS m.root-servers.net.
;; Received 505 bytes from 192.168.0.5#53(192.168.0.5) in 19 ms
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 503 bytes from 193.0.14.129#53(193.0.14.129) in 347 ms
baidu.com. 172800 IN NS dns.baidu.com.
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 ns7.baidu.com.
;; Received 201 bytes from 192.12.94.30#53(192.12.94.30) in 271 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 ns3.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.
;; Received 228 bytes from 202.108.22.220#53(202.108.22.220) in 14 ms
. 是root ns,根域名服务器
com,是gTLD Server
baidu.com.,a.shifen.com.,也是gTLD Server,可以看见nameserver是多级的
跟踪路由
跟踪路由就是从一个网关转移到另外一个网关,通常用来诊测网络情况。跟踪路由的原理,客户端发送数据包,包上使用最小的ttl值,比如第一次,ttl值是1,发送到网关,网关减1后,将信息返回给客户端。第二次客户端发送ttl=2,到达第一个网关减为1,第二个网关减为0,返回给客户端,一直循环…
样例
windows中使用 tracert
,linux中使用 traceroute
traceroute www.baidu.com
参考
《深入分析Java web技术内幕》 许令波著
9年全栈开发经验,请关注个人公众号
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/1221.html