注意: 因为系统对含有链接会降权,所以本文中baidu.com用xxxxx代替,shifen.com用bbbbb代替 。
一. 根域就是所谓的“.”,其实我们的网址xxxxx在配置当中应该是xxxxx.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯 。
根域服务器我们知道有13台,但是这是错误的观点 。
根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机 。
欢迎关注笔者,优质文章都在这里等你 。
二. 域的划分根域下来就是顶级域或者叫一级域,
有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等 。
具体多少你可以自己去查,我们这里不关心 。
每个域都会有域名服务器,也叫权威域名服务器 。
xxxxx就是一个顶级域名,而x.xxxxx却不是顶级域名,他是在xxxxx 这个域里的一叫做x的主机 。
一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的) 。
三. 域名服务器能提供域名解析的服务器,上面的记录类型可以是A(address)记录,NS记录(name server),MX(mail),CNAME等 。
A记录是什么意思呢,就是记录一个IP地址和一个主机名字,比如我这个域名服务器所在的域x.xxxxx,我们知道这是一个二级的域名,然后我在里面有一条A记录,记录了主机为a的IP,查到了就返回给你了 。
如果我现在要想xxxxx这个域名服务器查询a.test.xxxxx,那么这个顶级域名服务器就会发现你请求的这个网址在test.xxxxx这个域中,我这里记录了这个二级域的域名服务器test.xxxxx的NS的IP 。我返回给你这个地址你再去查主机为a的主机把 。
这些域内的域名服务器都称为权威服务器,直接提供DNS查询服务 。
四.解析过程那么我们的DNS是怎么解析一个域名的呢?
1.现在我有一台计算机,通过ISP接入了互联网,那么ISP就会给我分配一个DNS服务器,这个DNS服务器不是权威服务器,而是相当于一个代理的dns解析服务器,他会帮你迭代权威服务器返回的应答,然后把最终查到IP返回给你 。
2.现在的我计算机要向这台ISPDNS发起请求查询www.xxxxx这个域名了,(经网友提醒:这里其实准确来说不是ISPDNS,而应该是用户自己电脑网络设置里的DNS,并不一定是ISPDNS 。比如也有可能你手工设置了8.8.8.8)
3.ISPDNS拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话就直接返回 。这个时候拿到的ip地址,会被标记为非权威服务器的应答 。
4.如果缓存中没有的话,ISPDNS会从配置文件里面读取13个根域名服务器的地址(这些地址是不变的,直接在BIND的配置文件中),
5.然后像其中一台发起请求 。
6.根服务器拿到这个请求后,知道他是com.这个顶级域名下的,所以就会返回com域中的NS记录,一般来说是13台主机名和IP 。
7.然后ISPDNS向其中一台再次发起请求,com域的服务器发现你这请求是xxxxx这个域的,一查发现了这个域的NS,那就返回给你,你再去查 。
8.ISPDNS不厌其烦的再次向xxxxx这个域的权威服务器发起请求,xxxxx收到之后,查了下有www的这台主机,就把这个IP返回给你了,
9.然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中 。
下面我们来用 nslookup 这个工具详细来说一下解析步骤:
?
文章插图
你会发现百度有一个cname = www.a.bbbbb 的别名 。这是怎么一个过程呢?
我们用dig工具来跟踪一下把(linux系统自带有)
Dig工具会在本地计算机做迭代,然后记录查询的过程 。
?
文章插图
第一步是向我这台机器的ISPDNS获取到根域服务区的13个IP和主机名[b-j].root-servers.net. 。
?
文章插图
第二步是向其中的一台根域服务器(Servername就是末行小括号里面的)发送www.xxxxx的查询请求,他返回了com.顶级域的服务器IP(未显示)和名称,
?
文章插图
【你真的弄懂了DNS解析过程原理吗 DNS服务器未响应是什么意思】
第三步,便向com.域的一台服务器192.33.4.12请求,www.xxxxx,他返回了xxxxx域的服务器IP(未显示)和名称,百度有四台顶级域的服务器
【此处可以用dig @192.33.4.12 www.xxxxx查看返回的百度顶级域名服务器IP地址】 。
?
文章插图
第四步呢,向百度的顶级域服务器(202.108.22.220)请求www.xxxxx,他发现这个www有个别名,而不是一台主机,别名是www.a.bbbbb 。
?
文章插图
按照一般的逻辑,当dns请求到别名的时候,查询会终止,而是重新发起查询别名的请求,所以此处应该返回的是www.a.bbbbb而已 。
但是为什么返回a.bbbbb的这个域的NS呢?
我们可以尝试下面的这个命令:dig +trace 看看有什么结果 。。。。。。。。
文章插图
?
你会发现第三步时bbbbb这个顶级域的域名服务器和xxxxx这个域的域名服务器是同一台主机(即:dns.xxxxx)!
当我拿到www.xxxxx的别名www.a.bbbbb的时候,我本来需要重新到com域查找bbbbb域的NS,但是因为这两个域在同一台NS上,所以直接向本机发起了,
bbbbb域发现请求的www.a.bbbbb是属于a.bbbbb这个域的,
于是就把a.bbbbb的这个NS和IP返回,让我到a.bbbbb这个域的域名服务器上查询www.a.bbbbb 。
于是我便从ns X .a.bbbbb中一台拿到了一条A记录,最终的最终也便是www.xxxxx的IP地址了.【此处也可以用dig +trace www.a.bbbbb】跟踪一下
用一个图来说明一下(图中第三步的全世界只有13台是错误的)
?
文章插图
以下内容为在虚拟机中搭建local dns服务器得到的实验数据,纠正上述结论
在上面的分析中,我们用dig工具进行了追踪,但是dig没有继续追踪当我们从xxxxx拿到cname和ns2.a.bbbbb的IP之后的事情 。
实际的结果是虽然dns.xxxxx返回了a.bbbbb域的服务器地址和IP,
但是local dns并不是直接向上述返回的IP请求www.a.bbbbb,而是再一次去请求com域,得到bbbbb域的服务器(也就是xxxxx的那四台),
然后又请求www.a.bbbbb,返回a.bbbbb的域的服务器,最后才是去请求www.a.bbbbb,
虽然上面已经返回了IP,但是实验的结果就是再走一遍bbbbb域的查询 。
?
上图就是localdns在解析www.xxxxx的抓包全过程 。蓝色那条就是在收到cname和响应的a.bbbbb的域名服务器IP地址之后,继续向com域请求bbbbb 。
?
这个图充分说明了返回cname的同时也返回了ns2.a.bbbbb的IP 。
总结一下①本机向local dns请求www.xxxxx
②local dns向根域请求www.xxxxx,根域返回com.域的服务器IP
③向com.域请求www.xxxxx,com.域返回xxxxx域的服务器IP
④向xxxxx请求www.xxxxx,返回cname www.a.bbbbb和a.bbbbb域的服务器IP
⑤向root域请求www.a.bbbbb
⑥向com.域请求www.a.bbbbb
⑦向bbbbb请求
⑧向a.bbbbb域请求
⑨拿到www.a.bbbbb的IP
⑩localdns返回本机www.xxxxx cname www.a.bbbbb 以及 www.a.bbbbb的IP
文章来源: https://www.cnblogs.com/liyuanhong/articles/7353974.html
您的转发+关注就是对笔者最大的支持,欢迎关注 。对大厂架构设计,BAT面试题分享,编程语言理论或者互联网圈逸闻趣事这些感兴趣,欢迎关注笔者,没有错,干货文章都在这里 。
- 鱼占
- 无糖可乐真的无糖 无糖可乐真的无糖吗测评
- 我想你了英文
- 9招让你的经络清清毒 经络养生
- 但是你开阔你的视野三百英里的哲学
- 是不是你想要认识我
- 活着就是恶心结局 活着就是恶心结局真的变成了猫吗
- 等你的星光txt下载 等你的星光txt下载百度网盘
- 关于肌理漆这些知识你有必要了解 关于肌理漆这些知识你有必要了解嘛
- 将我埋葬在你的世界