通过 DNS 查询,得到域名的 IP 地址,才能访问网站。
那么,DNS 查询到底是怎么完成的?本文通过实例,详细介绍背后的步骤。
DNS 服务器
域名对应的 IP 地址,都保存在 DNS 服务器。
我们输入域名,浏览器就会在后台,自动向 DNS 服务器发出请求,获取对应的 IP 地址。这就是 DNS 查询。
举例来说,我输入 zhujituijian.net 这个域名,浏览器就要向 DNS 服务器查询,它的 IP 地址是什么,然后向该 IP 发出访问请求。
网上有很多公用的 DNS 服务器,这篇文章选择 Cloudflare 公司提供的 1.1.1.1 进行演示。
域名的树状结构
你可能会问,难道 DNS 服务器(比如 1.1.1.1)保存了世界上所有域名(包括二级域名、三级域名)的 IP 地址?
当然不是。DNS 是一个分布式系统,1.1.1.1 只是用户查询入口,它也需要再向其他 DNS 服务器查询,才能获得最终的 IP 地址。
要说清楚 DNS 完整的查询过程,就必须了解 域名是一个树状结构。
最顶层的域名是根域名(root),然后是顶级域名(top-level domain,简写 TLD),再是一级域名、二级域名、三级域名。
根域名
所有域名的起点都是根域名,它写作一个点.,放在域名的结尾。因为这部分对于所有域名都是相同的,所以就省略不写了,比如zhujituijian.net等同于zhujituijian.net.(结尾多一个点)。
你可以试试,任何一个域名结尾加一个点,浏览器都可以正常解读。
顶级域名
根域名的下一级是顶级域名。它分成两种:通用顶级域名(gTLD,比如 .com 和 .net)和国别顶级域名(ccTLD,比如 .cn 和 .us)。
顶级域名由国际域名管理机构 ICANN 控制,它委托商业公司管理 gTLD,委托各国管理自己的国别域名。
一级域名
一级域名就是你在某个顶级域名下面,自己注册的域名。比如,gd1214b.icu就是我在顶级域名.icu下面注册的。
二级域名
二级域名是一级域名的子域名,是域名拥有者自行设置的,不用得到许可。比如,blog 就是 gd1214b.icu 的二级域名。
域名的逐级查询
这种树状结构的意义在于,只有上级域名,才知道下一级域名的 IP 地址,需要逐级查询。
每一级域名都有自己的 DNS 服务器,存放下级域名的 IP 地址。
所以,如果想要查询二级域名 mian.zhujituijian.net 的 IP 地址,需要三个步骤。
第一步,查询根域名服务器,获得顶级域名服务器.icu(又称 TLD 服务器)的 IP 地址。
第二步,查询 TLD 服务器 .net,获得一级域名服务器 zhujituijian.net 的 IP 地址。
第三步,查询zhujituijian.net的一级域名服务器 ,获得二级域名blog 的 IP 地址。
根域名服务器
根域名服务器全世界一共有13台(都是Anycast IP)。它们的域名和 IP 地址如下。
DNS 服务器的种类
总结一下,上面一共提到了四种DNS服务器。
- 1.1.1.1
- 根域名服务器
- TLD 服务器
- 一级域名服务器
它们都属于 DNS 服务器,都用来接受 DNS 查询。但是作用不一样,属于不同的类别。
递归 DNS 服务器
后三种服务器只用来查询下一级域名的 IP 地址,而 1.1.1.1 则把分步骤的查询过程自动化,方便用户一次性得到结果,所以它称为递归 DNS 服务器(recursive DNS server),即可以自动递归查询。
我们平常说的 DNS 服务器,一般都是指递归 DNS 服务器。它把 DNS 查询自动化了,只要向它查询就可以了。
它内部有缓存,可以保存以前查询的结果,下次再有人查询,就直接返回缓存里面的结果。所以它能加快查询,减轻源 DNS 服务器的负担。
权威 DNS 服务器
一级域名服务器的正式名称叫做权威域名服务器(Authoritative Name Server)。
"权威"的意思是域名的 IP 地址由它给定,不像递归服务器自己做不了主。我们购买域名后,设置 DNS 服务器就是在设置该域名的权威服务器。
四种 DNS 服务器
综上所述,DNS 服务器可以分成四种:
- 根域名服务器
- TLD 服务器
- 权威域名服务器
- 递归域名服务器
它们的关系如下图。
知道了 DNS 查询的原理,完全可以自己写一个 DNS 的递归服务器,方法很简单。网上有很多参考资料,有兴趣的话,大家可以试试看。
参考资料
https://zh.wikipedia.org/zh-cn/域名系统
https://www.ruanyifeng.com/blog/2022/08/dns-query.html
https://timothya.com/blog/dns/
https://www.dnsfilter.com/blog/authoritative-vs-recursive-dns
https://www.cloudflare.com/zh-cn/learning/dns/dns-server-types/
发表评论