⤴Top⤴

DNS 解析

博客分类: 后端

DNS 解析

DNS 解析

什么是 DNS

在数据网络中,使用数字 IP 地址标记设备以便通过网络发送和接收数据。 大多数用户无法记住此数字地址。 于是,人们创建了可以将数字地址转换为简单易记名称的域名系统。

域名系统(domain name system) 作为将域名和 IP 地址相互映射的一个分布式数据库,使用 TCP 和 UDP 端口 53,作用就是根据域名查出对应 IP 地址。

dns

域名层级

域名 描述
使用的域名 www.example.com 日常真实使用的域名
真正的域名 www.example.com.root .root通常省略,或为 .
根域名 .root 对所有域名
顶级域名 .com top-level domains(TLD)
次级域名 .example second-level domains(SLD),用户可注册的
三级域名(主机名) www 用户在自己的域里面为服务器分配的名称

DNS 解析

dns-ns

工作步骤:

  1. 检查浏览器缓存,命中则解析过程结束。浏览器缓存有大小和时间限制,缓存时间可通过 TTL(time to live) 属性来配置;
  2. 若 1 未命中,则浏览器会查找操作系统缓存中是否有这个域名对应的 DNS 解析结果。Windows 可以通过 C:\Windows\System32\drivers\etc\hosts 文件来配置,Linux 则为 /etc/hosts 文件来配置,用户可以将任何域名解析到任何能够访问的 IP 地址;
  3. 发送至本地域名服务器(LDNS)。LDNS 一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。Windows 下通过命令行输入 ipconfig,Linux 环境下通过 cat /etc/resolv.conf 就可以查询配置的 DNS 服务器;
  4. 若 3 未命中,则直接到根域名服务器(root name server)请求解析。根域名服务器是最高级别的域名服务器,负责返回顶级域的权威域名服务器地址;
  5. 根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD server)地址。gTLD 是通用顶级域,如 .com、.cn、.org 等;
  6. LDNS 再向上一步返回的 gTLD 服务器发送请求;
  7. gTLD 服务器查找并返回此域名对应的域名服务器(name server)的地址,这个域名服务器通常就是用户注册的,例如用户在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成;
  8. 向域名服务器发起请求,域名服务器会查询存储的域名和 IP 的映射关系表。
  9. 返回该域名对应的 IP 和 TTL 值,LDNS 会缓存这个域名和 IP 的对应关系,缓存时间由 TTL 值控制;
  10. 把解析的结果返回给用户,用户根据 TTL 值缓存在本地系统缓存中,域名解析过程结束。

以 www.example.com 为例,解析过程从右向左: . => .com. => .example.com. => www.example.com. => IP

全球 13 组根域名服务器以英文字母 A 到 M 依序命名,域名格式为”字母.root-servers.net”。其中有11个是以任播技术在全球多个地点设立镜像站。

DNS 层级

一个 DNS 的解析大致可以分两个部分:

DNS 清除缓存

DNS 域名解析后会缓存解析结果,其中主要在两个地方缓存:

针对用户本机,针对不同系统环境可以采用以下命令清除缓存:

DNS 查询

dig 查询

以 www.baidu.com 为例,一共返回六段信息:

$ dig www.baidu.com

# ------查询参数和统计--------------------------------------------------------
; <<>> DiG 9.9.7-P3 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64176
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 3

# ------查询域名www.baidu.com.的 A 记录,即 address----------------------------
;; QUESTION SECTION:
;www.baidu.com.			IN	A

# ------DNS 服务器的响应。774 和 600 即 TTL 值,CNAME 为别名解析-----------------
;; ANSWER SECTION:
www.BaidU.cOm.		774	IN	CNAME	www.a.shifen.com.
WwW.a.ShIfEn.cOm.	600	IN	A	180.97.33.107
WwW.a.ShIfEn.cOm.	600	IN	A	180.97.33.108

# ------查询的权威服务器 NS 的域名地址------------------------------------------
;; AUTHORITY SECTION:
a.ShIfEn.cOm.		825	IN	NS	ns5.a.ShIfEn.cOm.
a.ShIfEn.cOm.		825	IN	NS	ns4.a.ShIfEn.cOm.
a.ShIfEn.cOm.		825	IN	NS	ns2.a.ShIfEn.cOm.
a.ShIfEn.cOm.		825	IN	NS	ns3.a.ShIfEn.cOm.
a.ShIfEn.cOm.		825	IN	NS	ns1.a.ShIfEn.cOm.

# ------获得的权威服务器的 IP 地址, 用来进行递归查询------------------------------
;; ADDITIONAL SECTION:
ns1.a.ShIfEn.cOm.	539	IN	A	61.135.165.224
ns4.a.ShIfEn.cOm.	162	IN	A	115.239.210.176
ns5.a.ShIfEn.cOm.	162	IN	A	119.75.222.17

# ------DNS 服务器的一些传输信息,本地 DNS 服务器地址即为 192.168.1.1,默认端口为 53
;; Query time: 22 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Feb 18 22:14:16 CST 2018
;; MSG SIZE  rcvd: 257

使用 +trace 参数进行路径跟踪查询或者 +short 直接返回 DNS 服务器的响应。

$ dig www.baidu.com +short
www.a.shifen.com.
180.97.33.107
180.97.33.108

host

host 命令可以看作 dig 命令的简化版本,返回当前请求域名的各种记录。host 命令也可以用于逆向查询,即从 IP 地址查询域名,等同于 “dig -x ip”。

$ host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
Www.a.shifen.com has address 180.97.33.107
Www.a.shifen.com has address 180.97.33.108

nslookup

互动式地查询域名记录。

$ nslookup www.baidu.com
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	Www.a.shifen.com
Address: 180.97.33.107
Name:	Www.a.shifen.com
Address: 180.97.33.108

whois

用来查看域名的注册情况,需要安装 whois 插件,如 “brew install whois”。

refer:        whois.verisign-grs.com

domain:       COM

organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States
...

DNS 记录类型

域名与 IP 之间的对应关系,称为记录(record)。根据使用场景,记录可以分成不同的类型(type)。

类型 名称 描述
A 地址记录(Address) 返回域名指向的 IP 地址
NS 域名服务器记录(Name Server) 返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为 IP 地址
MX 邮件记录(Mail eXchange) 返回接收电子邮件的服务器地址
CNAME 规范名称记录(Canonical Name) 返回另一个域名,即当前查询的域名是另一个域名的跳转
PTR 逆向查询记录(Pointer Record) 只用于从IP地址查询域名,如 dig -x ip

参考链接

  1. DNS 原理入门 By 阮一峰
  2. DNS 域名解析过程 By 清觞煮雪
  3. DNS 层级
  4. 【重拾网络】DNS By zhanghTk
  5. Apple - Reset the DNS cache in OS X