1. 概述
DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出 IP 地址。
2. 查询过程
$ dig math.stackexchange.com
; <<>> DiG 9.10.6 <<>> math.stackexchange.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12042
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;math.stackexchange.com. IN A
;; ANSWER SECTION:
math.stackexchange.com. 237 IN A 151.101.65.69
math.stackexchange.com. 237 IN A 151.101.129.69
math.stackexchange.com. 237 IN A 151.101.1.69
math.stackexchange.com. 237 IN A 151.101.193.69
;; Query time: 1 msec
;; SERVER: 172.18.52.2#53(172.18.52.2)
;; WHEN: Thu Oct 10 10:02:21 CST 2019
;; MSG SIZE rcvd: 115
第一段是查询参数和统计。
; <<>> DiG 9.10.6 <<>> math.stackexchange.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12042
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
第二段是查询内容。
查询域名 math.stackexchange.com 的 A 记录,A 是 address 的缩写。
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;math.stackexchange.com. IN A
第三段是 DNS 服务器的答复。
math.stackexchange.com 有四个 A 记录,即四个 IP 地址。600 是 TTL 值(Time to live 的缩写),表示缓存时间,即 600 秒之内不用重新查询。
;; ANSWER SECTION:
math.stackexchange.com. 237 IN A 151.101.65.69
math.stackexchange.com. 237 IN A 151.101.129.69
math.stackexchange.com. 237 IN A 151.101.1.69
math.stackexchange.com. 237 IN A 151.101.193.69
第四段显示 stackexchange.com 的 NS 记录(Name Server 的缩写),即哪些服务器负责管理 stackexchange.com 的 DNS 记录。
;; Query time: 1 msec
;; SERVER: 172.18.52.2#53(172.18.52.2)
;; WHEN: Thu Oct 10 10:02:21 CST 2019
;; MSG SIZE rcvd: 115
3. DNS 服务器
Linux 系统里面,DNS 服务器的 IP 地址保存在/etc/resolv.conf 文件.
向指定 DNS 服务器查询结果:
$ dig @4.2.2.2 math.stackexchange.com
4. 域名的层级
举例来说,
- www.example.com 真正的域名是 www.example.com.root,简写为 www.example.com.。因为,根域名.root 对于所有域名都是一样的,所以平时是省略的。
- 根域名的下一级,叫做”顶级域名”(top-level domain,缩写为 TLD),比如.com、.net;
- 再下一级叫做”次级域名”(second-level domain,缩写为 SLD),比如 www.example.com 里面的.example,这一级域名是用户可以注册的;
- 再下一级是主机名(host),比如 www.example.com 里面的 www,又称为”三级域名”,这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。
总结一下,域名的层级结构如下。
主机名.次级域名.顶级域名.根域名
host.sld.tld.root
5. DNS 各种记录
域名与 IP 之间的对应关系,称为”记录”(record)。根据使用场景,”记录”可以分成不同的类型(type),前面已经看到了有 A 记录和 NS 记录。
常见的 DNS 记录类型如下。
- A:地址记录(Address),返回域名指向的 IP 地址。
- NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为 IP 地址。
- MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。
- CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。
- PTR:逆向查询记录(Pointer Record),只用于从 IP 地址查询域名