DNS

DNS

Posted by hello2mao on October 10, 2019

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 地址查询域名

6. Ref