就是所谓的 “.”,其实我们的网址 www.baidu.com
在配置当中应该是 www.baidu.com
.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有 13 台,但是这是错误的观点。
根域服务器只是具有 13 个 IP 地址,但机器数量却不是 13 台,因为这些 IP 地址借助了任播的技术,所以我们可以在全球设立这些 IP 的镜像站点,你访问到的这个 IP 并不是唯一的那台主机。
根域下来就是顶级域或者叫一级域,有两种划分方式,一种互联网刚兴起时的按照行业性质划分的 com.,net. 等,一种是按国家划分的如 cn.,jp.,等。具体多少你可以自己去查,我们这里不关心。
每个域都会有域名服务器,也叫权威域名服务器。Baidu.com 就是一个顶级域名,而 www.baidu.com
却不是顶级域名,他是在 baidu.com 这个域里的一叫做 www 的主机。
一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己 BIND 服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。
比如 a.www.baidu.com
,在这个网址中,www.baidu.com
变成了一个二级域而不是一台主机,主机名是 a。
能提供域名解析的服务器,上面的记录类型可以是 A(address)记录,NS 记录(name server),MX(mail),CNAME 等。
A 记录是什么意思呢,就是记录一个 IP 地址和一个主机名字,比如我这个域名服务器所在的域 test.baidu.com,我们知道这是一个二级的域名,然后我在里面有一条 A 记录,记录了主机为 a 的 IP,查到了就返回给你了。
如果我现在要想 baidu.com 这个域名服务器查询 a.test.baidu.com,那么这个顶级域名服务器就会发现你请求的这个网址在 test.baidu.com 这个域中,我这里记录了这个二级域的域名服务器 test.baidu.com 的 NS 的 IP。我返回给你这个地址你再去查主机为 a 的主机把。
这些域内的域名服务器都称为权威服务器,直接提供 DNS 查询服务。(这些服务器可不会做递归哦)
那么我们的 DNS 是怎么解析一个域名的呢?
www.baidu.com
这个域名了,(这里其实准确来说不是 ISPDNS,而应该是用户自己电脑网络设置里的 DNS,并不一定是 ISPDNS。比如也有可能你手工设置了 8.8.8.8)。下面我们来用 nslookup 这个工具详细来说一下解析步骤:
从上图我们可以看到:
www.jsjzx.com
但是也有像百度这样的 DNS 比较复杂的解析:
你会发现百度有一个 cname = www.a.shifen.com
的别名。这是怎么一个过程呢?我们用 dig 工具来跟踪一下,Dig 工具会在本地计算机做迭代,然后记录查询的过程。
第一步是向我这台机器的 ISPDNS 获取到根域服务区的 13 个 IP 和主机名 [b-j].root-servers.net.。
第二步是向其中的一台根域服务器(Servername 就是末行小括号里面的)发送 www.baidu.com
的查询请求,他返回了 com. 顶级域的服务器 IP(未显示)和名称,
第三步,便向 com. 域的一台服务器 192.33.4.12 请求 www.baidu.com
,他返回了 baidu.com 域的服务器 IP(未显示)和名称,百度有四台顶级域的服务器
第四步呢,向百度的顶级域服务器(202.108.22.220)请求 www.baidu.com
,他发现这个 www 有个别名,而不是一台主机,别名是 www.a.shifen.com
。
按照一般的逻辑,当 dns 请求到别名的时候,查询会终止,而是重新发起查询别名的请求,所以此处应该返回的是 www.a.shifen.com
而已。但是为什么返回 a.shifen.com 的这个域的 NS 呢?
我们可以尝试下面的这个命令:dig +trace shifen.com 看看有什么结果:
你会发现第三步时 shifen.com 这个顶级域的域名服务器和 baidu.com 这个域的域名服务器是同一台主机(即:dns.baidu.com)!当我拿到 www.baidu.com
的别名 www.a.shifen.com
的时候,我本来需要重新到 com 域查找 shifen.com 域的 NS,但是因为这两个域在同一台 NS 上,所以直接向本机发起了,
shifen.com 域发现请求的 www.a.shifen.com
是属于 a.shifen.com 这个域的,于是就把 a.shifen.com 的这个 NS 和 IP 返回,让我到 a.shifen.com 这个域的域名服务器上查询 www.a.shifen.com
。
于是我便从 ns X .a.shifen.com 中一台拿到了一条 A 记录,最终的最终也便是 www.baidu.com
的 IP 地址了。【此处也可以用 dig +trace www.a.shifen.com
】跟踪一下,用一个图来说明一下(图中第三步的全世界只有 13 台是错误的)
以下内容为在虚拟机中搭建 local dns 服务器得到的实验数据,纠正上述结论。在上面的分析中,我们用 dig 工具进行了追踪,但是 dig 没有继续追踪当我们从 baidu.com 拿到 cname 和 ns2.a.shifen.com 的 IP 之后的事情。
我们就所以然的下结论认为 local dns 会向 ns2.a.shifen.com 请求 www.a.shifen.com
。其实这个想法是错误,在自己的本地搭建一个 local dns,抓取整个解析过程中是所有包,看看就明白拉。
实际的结果是虽然 dns.baidu.com 返回了 a.shifen.com 域的服务器地址和 IP,但是 local dns 并不是直接向上述返回的 IP 请求 www.a.shifen.com
,而是再一次去请求 com 域,得到 shifen.com 域的服务器(也就是 baidu.com 的那四台),然后又请求 www.a.shifen.com
,返回 a.shifen.com 的域的服务器,最后才是去请求 www.a.shifen.com
,
虽然上面已经返回了 IP,但是实验的结果就是再走一遍 shifen.com 域的查询。
上图就是 localdns 在解析 www.baidu.com
的抓包全过程。蓝色那条就是在收到 cname 和响应的 a.shifen.com 的域名服务器 IP 地址之后,继续向 com 域请求 shifen.com。
这个图充分说明了返回 cname 的同时也返回了 ns2.a.shifen.com 的 IP。
类型 | 编码 | 内容 |
---|---|---|
A | 1 | 将 DNS 域名映射到 IPv4 地址,基本作用是说明一个域名对应了哪些 IPv4 地址 |
NS | 2 | 权威名称服务器记录,用于说明这个区域有哪些 DNS 服务器负责解析 |
CNAME | 5 | 别名记录,主机别名对应的规范名称 |
SOA | 6 | 起始授权机构记录,NS 记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS 并没有说明,SOA 记录了说明在众多 NS 记录里哪一台才是主要的服务器 |
PTR | 12 | IP 地址反向解析,是 A 记录的逆向记录,作用是把 IP 地址解析为域名 |
MX | 15 | 邮件交换记录,指定负责接收和发送到域中的电子邮件的主机 |
TXT | 16 | 文本资源记录,用来为某个主机名或域名设置的说明 |
AAAA | 28 | 将 DNS 域名映射到 IPv6 地址,基本作用是说明一个域名对应了哪些 IPv6 地址 |
因此总结一下便是:
www.baidu.com
www.baidu.com
,根域返回 com. 域的服务器 IPwww.baidu.com
,com. 域返回 baidu.com 域的服务器 IPwww.baidu.com
,返回 cname www.a.shifen.com
和 a.shifen.com 域的服务器 IPwww.a.shifen.com
www.a.shifenc.om
www.a.shifen.com
的 IPwww.baidu.com
cname www.a.shifen.com
以及 www.a.shifen.com
的 IP