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.cnac.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