DNS 简介
Posted July 13, 2022 by monitor1379
DNS基础概念
DNS (Domain Name System) ,是一个层次化、非中心化的命名系统。其作用相当于一个电话本,当需要访问互联网中的某个 IP 地址时,无需知道具体的 IP 是多少,只需要使用域名 (Domain Name,简称 Domain) 去 DNS 查询并获取对应的 IP 即可。
DNS 的存在,使人们可使用对人友好的域名访问互联网,而无需记忆例如 192.168.1.1
(IPv4)或 2400:cb00:2048:1::c629:d7a2
(IPv6)等 IP 地址。

DNS 查询过程。图片来源: https://en.wikipedia.org/wiki/Domain_Name_System#/media/File:DNS_Architecture.svg
域名
域名的完整定义可以参考 RFC 1035: Domain Names - Implementation and Specification。此处只介绍基本概念。

。图片来源: https://www.cloudflare.com/zh-cn/learning/dns/glossary/dns-root-server/
域名由多个部分组成,并由点符号 .
分隔。平常所使用的的域名,其实是省略了根域名了的。
比如,域名 mail.google.com
的完整域名是 mail.google.com.
。其中:
.
: 最后一个点是根域名。com
: 通用顶级域名。google
: 位于通用顶级域名左侧的域名称为二级域名。此后每往左一层,降一级。mail
: 三级域名。
顶级域名
顶级域名主要包括:
- gTLD (Generic Top-Level Domain): 通用顶级域名,即与国家/地区无关,代表不同类型组织的域名。比如
.com
、.org
等。 - ccTLD (Country Code Top-Level Domain): 国家代码顶级域名,即由国家/地区使用并以相应国家/地区代码结尾的域。比如
.cn
、.us
等。 - New gTLD: 新型通用顶级域名。是一种个性化顶级域名方案。比如众所周知的 DNS 服务器
8.8.8.8
对应的域名dns.google
中的.google
,就是 New gTLD。 - eTLD (Effective Top-Level Domain): 等效顶级域名。例如
.com.cn
、ac.cn
。可在publicsuffix.org - PSL 找到部分 eTLD。
域名服务器
DNS 解析器
DNS 解析器 resolver
: 既能处理 DNS 查询请求,又可作为 DNS 客户端向其他 DNS 服务器发出查询请求,并可根据服务端返回的 TTL (Time To Live) 缓存 DNS 资源。通常作为DNS查询中的第一站,担任客户端和DNS域名服务器的中间人。
根域名服务器
根域名服务器 DNS Root Server
: 域名系统的结构可看成一种类似树的层次构造,其根区域位于该层次结构的最顶部,其中根服务器是在根区域中运行的 DNS 域名服务器。
通过 dig NS .
命令可以查询哪些 DNS 服务器负责解析根域名(即查询根域名的 NS 记录):
; <<>> DiG 9.10.6 <<>> NS .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10868
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 1096 IN NS k.root-servers.net.
. 1096 IN NS h.root-servers.net.
. 1096 IN NS d.root-servers.net.
. 1096 IN NS l.root-servers.net.
. 1096 IN NS f.root-servers.net.
. 1096 IN NS i.root-servers.net.
. 1096 IN NS m.root-servers.net.
. 1096 IN NS a.root-servers.net.
. 1096 IN NS g.root-servers.net.
. 1096 IN NS e.root-servers.net.
. 1096 IN NS j.root-servers.net.
. 1096 IN NS b.root-servers.net.
. 1096 IN NS c.root-servers.net.
;; ADDITIONAL SECTION:
k.root-servers.net. 86400 IN A 193.0.14.129
b.root-servers.net. 86058 IN A 199.9.14.201
c.root-servers.net. 86185 IN A 192.33.4.12
;; Query time: 11 msec
;; SERVER: 10.98.2.208#53(10.98.2.208)
;; WHEN: Sun Jul 31 17:00:48 CST 2022
;; MSG SIZE rcvd: 300
上面输出的 [a-m].root-servers.net.
13个域名,每个域名对应1个 IP,13个 IP 便是13个根域名服务器的 IP 地址。
根域名服务器可以直接回答针对根区域内的记录的查询,还可以将其他请求引向相应的顶级域 (TLD) 服务器。如 .com
、.org
以及 .cn
、.us
、.com.cn
等顶级域名对应的TLD服务器都可由根域名服务器引用。
13个? 不止13个!
一个普遍的误解是,世界上只有 13 “台” 根服务器。实际上根服务器有许多,但只有 13 个 IP 地址用于查询不同的根服务器网络。DNS 原始架构的限制要求根区域中最多只能有 13 个服务器地址。在 Internet 面世之初,这 13 个 IP 地址的每一个都只有一台服务器,其中大多数位于美国。所以 “13个根域名服务器” 的描述并不准确,
如今,这 13 个 IP 地址中的每一个都有多个服务器,这些服务器使用 Anycast 路由基于负荷和距离分发请求。目前,地球上每座有人生活的大陆上都分布着 600 多台 DNS 根服务器。
解析器如何找到 DNS 根服务器?
由于 DNS 根区域位于 DNS 层次结构的顶部,因此递归解析器无法在 DNS 查找中被引导到这些位置。所以基本上每个 DNS 解析器都在其软件中内置了 13 个 IP 根服务器地址的列表。每次发起 DNS 查找时,递归器的第一个通信就是与这 13 个 IP 地址之一进行的。
由于使用了 Anycast 路由并具备高冗余性,根服务器非常可靠。但是在极少数情况下,根服务器的 IP 地址可能会发生变更。在这种情况下,递归解析器可以继续使用根区域中的其他 12 个 IP 地址执行 DNS 查找,直到它们的软件更新为所有 13 台服务器的正确地址为止。由于解析器会重试,直到它们到达工作的根服务器,所以当一个根服务器关闭时,不会中断互联网的正常运行。
顶级域名服务器
顶级域名服务器 TLD Server
/ Top Level Domain Server
: TLD 服务器是 DNS 层次结构中比根服务器低一级的 DNS 服务器。其中,
管理诸如 .com
/ .org
/ .net
等域名。
权威域名服务器
权威性域名服务器 Authoritative SLD Server
: 可将这个最终域名服务器视为书架上的字典,其中特定名称可被转换成其定义。权威性域名服务器是域名服务器查询中的最后一站。如果权威性域名服务器能够访问请求的记录,则其会将已请求主机名的 IP 地址返回到发出初始请求的 DNS 解析器(图书管理员)。
DNS查询
DNS查询方式
DNS 查询分三种:
递归查询: 如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以 DNS 客户端的身份,向其它根域名服务器继续发出查询请求报文 (即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错 (表示无法查询到所需的IP地址)。
迭代查询: DNS 客户端向 DNS 服务器发送查询请求,服务器告知客户端部分结果,并由客户端继续向其他服务器发起查询请求,重复该过程直到获取最终结果。
非递归查询: 通常,DNS 服务器会缓存 DNS 记录以防止额外的带宽消耗,以及减少上游服务器的负载。当查询域名在 DNS 服务器缓存中存在时,则直接返回。

图中客户端向 DNS Resolver 发起的查询是递归查询,
DNS Resolver依次向 Root Server / TLD Server / example.com 域名服务器发起了3次迭代查询。
图片来源: https://www.cloudflare.com/zh-cn/learning/dns/what-is-dns