我们常说的 DNS 到底是什么
本文最后更新于 946 天前,其中的信息可能已经有所发展或是发生改变。

首先声明

这篇文章是以我的角度向你解释 DNS 是什么,我语文不太行,可能有些部分讲的不是特别清楚,还请理解。我的讲解不是标准和权威。

最基本的概述

DNS(Domain Name System 域名系统)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 UDP 端口 53。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。

DNS 解析

上面提到的,DNS 可以让用户避免记忆冗长的 IP 地址,例如 14.215.177.3814.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 这个域由哪个哪个域根服务器解析。

例如告诉你 .cna.dns.cn 解析等等。

这就对应着解析过程三步中最左边的一部分(根服务器部分)。

域根服务器

作用类似于上面提到的根服务器,只不过它只为一个根域服务,例如 a.nic.icu 只解析 .icu 域名,无法解析 .cn 域名,他是告诉浏览器你访问的域名由哪个 DNS 服务器提供解析。

例如告诉你 slb.icunaomi.ns.cloudflare.com 解析等等。

这就对应着解析过程三栏的中间部分(域根服务器部分)。

DNS 解析部分

然后是最后的一步,他将告诉你你请求的域名对应的是哪个 IP 地址。

例如 www.baidu.com 的 14.215.177.3814.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.247104.21.46.8

第四步,你去了那个地址,找到了你要找的人(成功访问到网站)。

那么 GEO DNS 也好解释了,只需要在第三步做一些手脚。

比如下面这样

一二步大同小异

第三步,市相关部门(例如 f1g1ns1.dnspod.net 等带此项功能的 DNS 服务)看到来找人的是个日本人,故意告诉他一个错误的地址,比如他要找的人的地址是 127.0.0.1

同时也可以用作地域分流。

图示部分

图来自百度,自己懒得做了

百度上的 DNS 图

参考资料

百度百科

根域名服务器词条,域名服务器词条,域名系统词条

站长百科

DNS 词条

面包板社区

一口 Linux 发布文章一文搞懂 DNS 基础知识
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Bmoji
热词系列
TVmoji
小电视
2233娘
那兔
洛天依
红小豆
上一篇
下一篇