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 查询。
二、dig 命令
在linux系统中,我们可以借助dig命令来了解整个dns查询的过程
1.安装dig命令
yum install bind-utils
2.命令一:查询某域名的解析
dig [域名]
示例:dig www.qq.com
其中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 完整的查询过程,就必须了解 域名是一个树状结构。
最顶层的域名是根域名,然后是顶级域名,再是一级域名、二级域名、三级域名。
(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 地址如下。
根域名服务器的 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
因为它给不了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
3.重复此动作,一直问下一级dns服务器
dig @101.89.19.165 news.qq.com
dig @121.51.94.181 news.qq.com
查了一轮,发现news.qq.com有域名别名
我们要再查一圈,我们可以直接执行简化命令:
dig +trace ins-rb2d9wp5.ias.tencent-cloud.net.
最终得到结果,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。
可以用下图协助理解: