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

首先声明

这篇文章是以我的角度向你解释 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娘
那兔
洛天依
红小豆
上一篇
下一篇