首先声明
这篇文章是以我的角度向你解释 DNS 是什么,我语文不太行,可能有些部分讲的不是特别清楚,还请理解。我的讲解不是标准和权威。
最基本的概述
DNS(Domain Name System 域名系统)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
DNS 解析
上面提到的,DNS 可以让用户避免记忆冗长的 IP 地址,例如 14.215.177.38
和 14.215.177.39
而仅仅只用记住更加简单好记的 www.baidu.com
。
通过域名得到 IP 的过程叫做解析,下面就是 slb.icu
的完整 DNS 解析过程
(这部分看不懂的可以直接跳到举个例子部分)
; <<>> Dig +trace slb.icu
;; global options: +cmd
. 494885 IN NS i.root-servers.net.
. 494885 IN NS l.root-servers.net.
. 494885 IN NS a.root-servers.net.
. 494885 IN NS c.root-servers.net.
. 494885 IN NS m.root-servers.net.
. 494885 IN NS d.root-servers.net.
. 494885 IN NS b.root-servers.net.
. 494885 IN NS e.root-servers.net.
. 494885 IN NS f.root-servers.net.
. 494885 IN NS h.root-servers.net.
. 494885 IN NS j.root-servers.net.
. 494885 IN NS k.root-servers.net.
. 494885 IN NS g.root-servers.net.
;; Received from (local dns) in 1 ms
icu. 172800 IN NS a.nic.icu.
icu. 172800 IN NS b.nic.icu.
icu. 172800 IN NS c.nic.icu.
icu. 172800 IN NS d.nic.icu.
icu. 86400 IN DS 31762 8 1 DB42BC4B511C8F97E5A3C00666B76FB1F4C2E567
icu. 86400 IN DS 31762 8 2 CCC397A837F6491166129E1D99ED03CCA6635166B2F5B58C65B5CF516AE92B8F
icu. 86400 IN DS 62704 8 1 D834EE1ED0374E28C49BE9C12FE1B93AE0FE9CCB
icu. 86400 IN DS 62704 8 2 8C0442A126BA382CA5B05AE5B44744CDC5AB2845C83918E147083434F65790AA
icu. 86400 IN RRSIG DS 8 1 86400 20221118050000 20221105040000 18733 . Xzzt6UfH3I0w6ZaGYZ3E1OXXTars9fDOcFW01fd8ACKg0AidASg7E+u/tYS9zmzJ3zqzKwy/YZgxR/vo5XTDSPP4+Og8K39+qjSy9pwHF2exE/Nju9kO/A2EgYzaEuwrPbQ0uPfKQUzngyuTbBErcVI3B4a+RbqSyq/wa4dZshAM7oGuq3kO57ulnDOxJsi3XqBMvPRTAZNsEwNw5c5J992kfrtSuYRyq1axXTcwQwzdERKXZf+Tcs94MtBnM2tQ4JtwoECNeXI/teu0mEypbCQhjO3tciAaGMhQs0uDvKyoz1STi1dMlqsE6DAbvIKjDeye4xfwHqOdMoJBwMOmew==
;; Received from 198.41.0.4#53(a.root-servers.net.) in 3 ms
slb.icu. 3600 IN NS robert.ns.cloudflare.com.
slb.icu. 3600 IN NS naomi.ns.cloudflare.com.
f1cv7gm9q88lbo23sq6p5snn5jnq0lft.icu. 3600 IN NSEC3 1 1 0 - F1PQC9JNDMBVAQTMJLENTNU3MS7JCSSA NS SOA RRSIG DNSKEY NSEC3PARAM
f1cv7gm9q88lbo23sq6p5snn5jnq0lft.icu. 3600 IN RRSIG NSEC3 8 2 3600 20221113164642 20221014172108 8766 icu. UR+e37artg6jYndwYR7vYCMydMDvExFOs/2CN6oqVAwnmasjlpEQS694uJCs3xHxmCUDwJYvLCT5+DlId9K2ysc827Q1XBOj/6vcnn/8y1iKm2ljNa2tjEol2HghIoGEfPirzB5/HRt1OjiveHC9uFVfIMYrv2UXwdrAuoUIyvE=
cvtgnns4are1739b32t3244179vp8iqb.icu. 3600 IN NSEC3 1 1 0 - D04K6PUBFG5LM3MGGU243BAJU91KVQJV NS DS RRSIG
cvtgnns4are1739b32t3244179vp8iqb.icu. 3600 IN RRSIG NSEC3 8 2 3600 20221111113016 20221012202218 8766 icu. A7waqwYEGg115x7s0i4fo37bucbUiEd+qNVFLhY4jKwQLUyzuIh3JqwHSEk+15M+cGzRlP5R9mSKdN2hMqfkXtSxPyjabE8BTNbhTtneFQCOnMtavYRIX+x+LtFEFa2EY0d3g7mBS0AfgwtLOEr8JLBXI6eLHMJEaKdwoIWHmOQ=
;; Received from 212.18.248.108#53(c.nic.icu.) in 189 ms
slb.icu. 300 IN A 172.67.221.247
slb.icu. 300 IN A 104.21.46.8
;; Received from 108.162.195.140#53(robert.ns.cloudflare.com.) in 176 ms
很长一段对不对,其实我们可以把它分成三个部分
icu. 172800 IN NS a.nic.icu.
icu. 172800 IN NS b.nic.icu.
icu. 172800 IN NS c.nic.icu.
icu. 172800 IN NS d.nic.icu.
icu. 86400 IN DS 31762 8 1 DB42BC4B511C8F97E5A3C00666B76FB1F4C2E567
icu. 86400 IN DS 31762 8 2 CCC397A837F6491166129E1D99ED03CCA6635166B2F5B58C65B5CF516AE92B8F
icu. 86400 IN DS 62704 8 1 D834EE1ED0374E28C49BE9C12FE1B93AE0FE9CCB
icu. 86400 IN DS 62704 8 2 8C0442A126BA382CA5B05AE5B44744CDC5AB2845C83918E147083434F65790AA
icu. 86400 IN RRSIG DS 8 1 86400 20221118050000 20221105040000 18733 . Xzzt6UfH3I0w6ZaGYZ3E1OXXTars9fDOcFW01fd8ACKg0AidASg7E+u/tYS9zmzJ3zqzKwy/YZgxR/vo5XTDSPP4+Og8K39+qjSy9pwHF2exE/Nju9kO/A2EgYzaEuwrPbQ0uPfKQUzngyuTbBErcVI3B4a+RbqSyq/wa4dZshAM7oGuq3kO57ulnDOxJsi3XqBMvPRTAZNsEwNw5c5J992kfrtSuYRyq1axXTcwQwzdERKXZf+Tcs94MtBnM2tQ4JtwoECNeXI/teu0mEypbCQhjO3tciAaGMhQs0uDvKyoz1STi1dMlqsE6DAbvIKjDeye4xfwHqOdMoJBwMOmew==
;; Received from 198.41.0.4#53(a.root-servers.net.) in 3 ms
slb.icu. 3600 IN NS robert.ns.cloudflare.com.
slb.icu. 3600 IN NS naomi.ns.cloudflare.com.
f1cv7gm9q88lbo23sq6p5snn5jnq0lft.icu. 3600 IN NSEC3 1 1 0 - F1PQC9JNDMBVAQTMJLENTNU3MS7JCSSA NS SOA RRSIG DNSKEY NSEC3PARAM
f1cv7gm9q88lbo23sq6p5snn5jnq0lft.icu. 3600 IN RRSIG NSEC3 8 2 3600 20221113164642 20221014172108 8766 icu. UR+e37artg6jYndwYR7vYCMydMDvExFOs/2CN6oqVAwnmasjlpEQS694uJCs3xHxmCUDwJYvLCT5+DlId9K2ysc827Q1XBOj/6vcnn/8y1iKm2ljNa2tjEol2HghIoGEfPirzB5/HRt1OjiveHC9uFVfIMYrv2UXwdrAuoUIyvE=
cvtgnns4are1739b32t3244179vp8iqb.icu. 3600 IN NSEC3 1 1 0 - D04K6PUBFG5LM3MGGU243BAJU91KVQJV NS DS RRSIG
cvtgnns4are1739b32t3244179vp8iqb.icu. 3600 IN RRSIG NSEC3 8 2 3600 20221111113016 20221012202218 8766 icu. A7waqwYEGg115x7s0i4fo37bucbUiEd+qNVFLhY4jKwQLUyzuIh3JqwHSEk+15M+cGzRlP5R9mSKdN2hMqfkXtSxPyjabE8BTNbhTtneFQCOnMtavYRIX+x+LtFEFa2EY0d3g7mBS0AfgwtLOEr8JLBXI6eLHMJEaKdwoIWHmOQ=
;; Received from 212.18.248.108#53(c.nic.icu.) in 189 ms
slb.icu. 300 IN A 172.67.221.247
slb.icu. 300 IN A 104.21.46.8
;; Received from 108.162.195.140#53(robert.ns.cloudflare.com.) in 176 ms
最左边的,是根服务器部分,所有域名的解析都会经过他。中间一栏,是 .icu
域根服务器部分,一般由域名注册局提供,最右边就是解析最末端 slb.icu 的解析。
下面,我将从左向右,从上到下一步步为大家讲解
根服务器
目前我们只讲上面提到的根服务器,也就是 IPv4 根服务器
IPv4 根服务器主要用来管理互联网的主目录。所有 IPv4 根服务器均由美国政府授权的互联网域名与号码分配机构 ICANN 统一管理,负责全球互联网域名 IPv4 根服务器、域名体系和 IP 地址等的管理。全世界只有 13 台 IPv4 根域名服务器。1 个为主根服务器在美国。其余 12 个均为辅根服务器,其中 9 台在美国,欧洲 2 个,位于英国和瑞典,亚洲 1 个位于日本。 这 13 个 IPv4 逻辑根服务器可以指挥 Chrome 或 Safari 这样的 Web 浏览器和电子邮件程序控制互联网通信。根服务器中有经美国政府批准的 1000 多个互联网后缀,如元老级别的 .com
, .net
, .org
, .int
等,一些国家的国家域名,如中国的 .cn
、俄罗斯的 .ru
等,还有最近兴起的新顶级域名 .top
, .icu
, .email
等等。
多的不说了,上面这些也是从这抄的 -> 传送门
这 13 台根服务器负责告诉你的浏览器,.icu
这个域由哪个哪个域根服务器解析。
例如告诉你 .cn
由 a.dns.cn
解析等等。
这就对应着解析过程三步中最左边的一部分(根服务器部分)。
域根服务器
作用类似于上面提到的根服务器,只不过它只为一个根域服务,例如 a.nic.icu
只解析 .icu
域名,无法解析 .cn
域名,他是告诉浏览器你访问的域名由哪个 DNS 服务器提供解析。
例如告诉你 slb.icu
由 naomi.ns.cloudflare.com
解析等等。
这就对应着解析过程三栏的中间部分(域根服务器部分)。
DNS 解析部分
然后是最后的一步,他将告诉你你请求的域名对应的是哪个 IP 地址。
例如 www.baidu.com 的 14.215.177.38
和 14.215.177.39
等等。
那么浏览器获得 IP 之后就会将其缓存在本地,缓存时间与 TTL 设置有关,挖个坑,以后再讲。
举个例子,可能更直观一点
举个例子
假设你要在国内找一个人,你知道他的姓名(这里假设所有人的姓名均是唯一值不存在重复),那么首先你要找国家部门(根服务器)询问他在哪个省(每个省对应一个域名后缀的根服务器,例如 .icu
),随后你就要到那个省去问省级部门(域根服务器),省级部门(域根服务器)会告诉你他所在市的市级部门(即该域名的 DNS 服务器),最后你需要问市级部门(例如 naomi.nsncloudflare.com
),市级部门会告诉你他住在哪里(也就是 IP 地址),你只要去到这个地址就能找到他。
以 slb.icu
为例
第一步,你先从国家部门(a~g.root-servers.net
)问到了他住在某某省,省部门是 a~d.nic.icu
。
第二步,你从 ICU 省部门(a~d.nic.icu
)问道了他住在某某市,市部门是 naomi.ns.cloudflare.com
。
第三步,你在市相关部门(naomi.ns.cloudflare.com
)得到了他的地址是 172.67.221.247
和 104.21.46.8
。
第四步,你去了那个地址,找到了你要找的人(成功访问到网站)。
那么 GEO DNS 也好解释了,只需要在第三步做一些手脚。
比如下面这样
一二步大同小异
第三步,市相关部门(例如 f1g1ns1.dnspod.net
等带此项功能的 DNS 服务)看到来找人的是个日本人,故意告诉他一个错误的地址,比如他要找的人的地址是 127.0.0.1
。
同时也可以用作地域分流。
图示部分
图来自百度,自己懒得做了
参考资料
百度百科
根域名服务器词条,域名服务器词条,域名系统词条
站长百科
DNS 词条
面包板社区
一口 Linux 发布文章一文搞懂 DNS 基础知识