37DATA

DNS查询域名IP原理

一、概念解析

DNS, 简单地说,就是Domain Name System,翻成中文就是“域名系统”。在一个TCP/IP架构的网络(例如Internet)环境中,DNS是一个非常重要而且常用的系统。主要的功能就是将人易于记忆的域名与人不容易记忆的IP地址作转换,而上面执行DNS服务的这台网络主机,就可以称之为DNS Server。基本上,通常我们都认为DNS只是将域名转换成IP地址,然后再使用所查到的IP地址去连接(俗称“正向解析”)。

DNS查询方式:

当DNS客户端向DNS服务器查询IP地址时,或DNS服务器在向另外一台DNS服务器查询IP地址时,有以下三种查询方式:

(1)直接从缓冲存储器解析  可以直接从DNS客户端或DNS服务器的高速缓冲器中获得查询结果。

(2)递归查询  也就是DNS客户端送出查询要求后,如果本地DNS服务器内没有需要的数据,则DNS服务器会代替客户端向其他的DNS服务器查询,一般由DNS客户端所提出的查询要求是属于递归查询。

(3)循环查询  一般DNS服务器与DNS服务器之间的查询属于这种查询方式,当第1台DNS服务器在向第2台DNS服务器提出查询要求后,如果第2台DNS服务器内没有所需要的数据,则它会提供第3台DNS服务器的IP地址给第1台服务器,让第1台DNS服务器向第3台DNS服务器查询。

譬如我们访问https://www.qq.com,其实是访问到121.14.77.221这个ip,我们输入域名后,浏览器就会在后台,自动向 DNS 服务器发出请求,获取对应的 IP 地址,这就是 DNS 查询。

Image

二、dig 命令

在linux系统中,我们可以借助dig命令来了解整个dns查询的过程

1.安装dig命令
yum install bind-utils

2.命令一:查询某域名的解析

dig [域名]

示例:dig www.qq.com

Image

其中ANSWER SECTION会返回最终的解析结果

CNAME(Canonical Name Record)用于定义域名的别名,如上图,这个域名别名解析到了2个ip

跟我们浏览器访问到的远程ip 121.14.77.221 一致。

3.命令二:就是向某个dns服务器查询某个域名的解析

dig @[DNS 服务器] [域名]

示例:dig @199.7.91.13 www.qq.com

三、域名的树状结构

要说清楚 DNS 完整的查询过程,就必须了解 域名是一个树状结构。

最顶层的域名是根域名,然后是顶级域名,再是一级域名、二级域名、三级域名。

Image

(1)根域名

所有域名的起点都是根域名,它写作一个点 . ,放在域名的结尾。因为这部分对于所有域名都是相同的,所以就省略不写了,比如example.com等同于example.com.(结尾多一个点)。

你可以试试,任何一个域名结尾加一个点,浏览器都可以正常解读。

(2)顶级域名TLD  (英文全称:Top Level Domain)

根域名的下一级是顶级域名。它分成两种:通用顶级域名(gTLD,比如 .com 和 .net)和国别顶级域名(ccTLD,比如 .cn 和 .us)。

顶级域名由国际域名管理机构 ICANN 控制,它委托商业公司管理 gTLD,委托各国管理自己的国别域名。

(3)一级域名

一级域名就是你在某个顶级域名下面,自己注册的域名。比如,qq.com就是在顶级域名.com下面注册的。

(4)二级域名

二级域名是一级域名的子域名,是域名拥有者自行设置的,不用得到许可。比如,news.qq.com 就是qq.com 的二级域名。

四、根域名服务器

根域名服务器全世界一共有13台(都是服务器集群)。它们的域名和 IP 地址如下。

Image

根域名服务器的 IP 地址是不变的,集成在操作系统里面。

操作系统会选其中一台,查询 TLD 服务器的 IP 地址。

五、域名的逐级查询

这种树状结构的意义在于,只有上级域名,才知道下一级域名的 IP 地址,需要逐级查询。

每一级域名都有自己的 DNS 服务器,存放下级域名的 IP 地址。

所以,如果想要查询二级域名 news.qq.com 的 IP 地址,需要三个步骤。

第一步,查询根域名服务器,获得顶级域名服务器.com(又称 TLD 服务器)的 IP 地址。

第二步,查询 TLD 服务器 .com,获得一级域名服务器 qq.com 的 IP 地址。

第三步,查询一级域名服务器 qq.com,获得二级域名 news的 IP 地址。

下面依次演示这三个步骤。

1.我们选取其中一台根域名服务器

dig @199.7.91.13 news.qq.com

Image

Image

因为它给不了news.qq.com 的 IP 地址,所以输出结果中没有 ANSWER SECTION,只有一个 AUTHORITY SECTION,给出了com.的13台 TLD 服务器的域名。

2.我们选择其中一台TLD的服务器ip  192.5.6.30执行命令,又返回下一级的dns服务器列表

dig @192.5.6.30 news.qq.com

Image

3.重复此动作,一直问下一级dns服务器

dig @101.89.19.165 news.qq.com

Image

dig @121.51.94.181 news.qq.com

Image

查了一轮,发现news.qq.com有域名别名

我们要再查一圈,我们可以直接执行简化命令:

dig +trace ins-rb2d9wp5.ias.tencent-cloud.net.

Image

Image

最终得到结果,news.qq.com解析到了9个ip

六、DNS服务器种类

1.根域名服务器

2.TLD服务器

3.权威域名服务器

4.递归 DNS 服务器(缓存服务器)

谷歌提供了免费的DNS 8.8.8.8,而 8.8.8.8 把分步骤的查询过程自动化,方便用户一次性得到结果,所以它称为递归 DNS 服务器(recursive DNS server),即可以自动递归查询。

我们平常说的 DNS 服务器,一般都是指递归 DNS 服务器。它把 DNS 查询自动化了,只要向它查询就可以了。

它内部有缓存,可以保存以前查询的结果,下次再有人查询,就直接返回缓存里面的结果。所以它能加快查询,减轻源头 DNS 服务器的负担。

七、总结

客户端主机一般访问递归dns服务器来得到网站的ip,递归DNS服务器会帮我们递归查询并把最终的ip缓存下来,这样客户端就能快速得到网站的ip。

可以用下图协助理解:

Image