DNS 解析过程
DNS 的概念
DNS(Domain Name System)是域名系统,一个用于TCP/IP程序的分布式数据库,也是一种重要的网络协议。DNS存储了网络中的 IP 地址与的对应主机的信息,它所提供的是将主机名和域名转换为IP地址的服务。
DNS 域名服务器的层级关系
DNS 中的域名都是用句点来分隔的,比如 www.example.com ,这里的句点代表了不同层次之间的界限,越靠右的位置表示其层级越高。
根域是在最顶层,它的下一层就是 com 顶级域名,再下面是 example.com 权威域名。
-
根域名服务器
根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址
-
顶级域名服务器
负责管理在该
顶级域名服务器注册的所有权威域名服务器的解析
-
权威域名服务器
负责权威域名下的子域名 DNS 解析。 例如:阿里万网提供的 dns9.hichina.com,dns10.hichina.com 等,腾讯 DNSPod 提供的 f1g1ns1.dnspod.net,f1g1ns2.dnspod.net 等,自己申请搭建的
权威域名服务器等
本地域名服务器
本地域名服务器不属于域名服务器的层级关系,但是它对域名系统非常重要,当一台主机发出 DNS 查询请求时。这个查询请求报文首先是发送给本地域名服务器。每个ISP(当地网络接入商)都有一个本地域名服务器
linux 下的本地 DNS
cat /etc/resolv.conf
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
# scutil --dns
#
# SEE ALSO
# dns-sd(1), scutil(8)
#
# This file is automatically generated.
#
nameserver 192.168.31.1
windows 下的 DNS 设置

DNS 域名解析的过程
- 检查浏览器缓存
浏览器会先检查缓存中是否有当前请求域名对应解析过的 IP 地址
浏览器缓存域名有条件限制。缓存大小和缓存时间均有限制,缓存时间一般为几分钟到几小时,域名被缓存的时间可以通过 TTL(Time To Live) 属性来设置
- 检查操作系统缓存
浏览器会查找操作系统缓存中是否有域名对应的解析IP结果
在 windows 中可以通过
C:\Windows\System32\drivers\etc\hosts文件来设置,在 Linux 中这个配置是/etc/hosts,可以将任何域名解析到任何能够访问的 IP 地址
- 检查路由器缓存
路由器也有 DNS 缓存
- 向
本地域名服务器(LDNS)查询
如果前两步都无法解析,操作系统会把域名发送给客户端电脑上设置的首选 DNS 服务器进行解析,此时会检查本地服务器缓存里是否有对应的域名解析结果
- 向
根域名服务器(Root Server)请求解析
所有
根域名服务器都知道所有顶级域名服务器的域名和 IP 地址。向根域名服务器请求解析的时候,会根据 URL 的顶级域名,比如.com .cn, 返回给本地服务器一个所查询域的主域名服务器(gTLD Server) 地址。
-
本地域名服务器再向上一步返回的顶级域名服务器(gTLD Server)请求解析
顶级服务器根据 URL 的二级域名返回此域名对应的
权威域名服务器(Name Server)的 地址
-
本地域名服务器再向上一步返回的权威域名服务器(Name Server)请求解析
权威域名服务器会查询存储的域名和 IP 的映射关系表并返回给本地域名服务器。 正常情况下都根据域名得到目标 IP 记录。连同一个 TTL 值返回给本地域名服务器。
-
本地域名服务器会缓存这个域名和 IP 的对应关系,并通过 TTL 值控制缓存时长。域名解析过程结束。