hawtim.github.io icon indicating copy to clipboard operation
hawtim.github.io copied to clipboard

DNS 解析过程

Open hawtim opened this issue 5 years ago • 1 comments

hawtim avatar May 23 '20 13:05 hawtim

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 设置

windows 的本地 DNS 设置

DNS 域名解析的过程

  1. 检查浏览器缓存

浏览器会先检查缓存中是否有当前请求域名对应解析过的 IP 地址

浏览器缓存域名有条件限制。缓存大小和缓存时间均有限制,缓存时间一般为几分钟到几小时,域名被缓存的时间可以通过 TTL(Time To Live) 属性来设置

  1. 检查操作系统缓存

浏览器会查找操作系统缓存中是否有域名对应的解析IP结果

在 windows 中可以通过 C:\Windows\System32\drivers\etc\hosts文件来设置,在 Linux 中这个配置是 /etc/hosts,可以将任何域名解析到任何能够访问的 IP 地址

  1. 检查路由器缓存

路由器也有 DNS 缓存

  1. 本地域名服务器(LDNS)查询

如果前两步都无法解析,操作系统会把域名发送给客户端电脑上设置的首选 DNS 服务器进行解析,此时会检查本地服务器缓存里是否有对应的域名解析结果

  1. 根域名服务器(Root Server)请求解析

所有根域名服务器都知道所有顶级域名服务器的域名和 IP 地址。向根域名服务器请求解析的时候,会根据 URL 的顶级域名,比如 .com .cn, 返回给本地服务器一个所查询域的主域名服务器(gTLD Server) 地址。

  1. 本地域名服务器再向上一步返回的顶级域名服务器(gTLD Server)请求解析

顶级服务器根据 URL 的二级域名返回此域名对应的权威域名服务器(Name Server)的 地址

  1. 本地域名服务器再向上一步返回的权威域名服务器(Name Server)请求解析

权威域名服务器会查询存储的域名和 IP 的映射关系表并返回给本地域名服务器。 正常情况下都根据域名得到目标 IP 记录。连同一个 TTL 值返回给本地域名服务器

  1. 本地域名服务器会缓存这个域名和 IP 的对应关系,并通过 TTL 值控制缓存时长。域名解析过程结束。

参考文档

一文读懂一个URL请求的过程是怎样的

DNS域名解析的过程

Linux系统下搭建DNS服务器——DNS原理总结

hawtim avatar May 23 '20 16:05 hawtim