DNS解析原理及工作流程详解

一、 DNS 是什么?为什么需要它?

DNS 是互联网的 "电话簿""导航系统" 。它的核心作用是 将人类易于记忆的域名(如 www.baidu.com)转换为机器用于网络通信的 IP 地址(如 14.119.104.254

  • 对人类友好:我们很难记住一串数字组成的 IP 地址,但可以轻松记住有意义的域名。

  • 对机器友好:网络设备(路由器、服务器等)依靠 IP 地址来定位和路由数据包。

没有 DNS,我们就只能通过直接输入 IP 地址来访问网站,这几乎是不可能的。

二、 域名结构:一个全球分布的倒置树

要理解 DNS 如何工作,首先要了解域名的层次结构。它像一个从根开始的、全球分布的倒置树状目录。

  • 根域 :用点 . 表示,是这棵树的根,全球有13组(注意是组,而非台)根服务器。

  • 顶级域:紧接在根域下一层,分为两类:

    • 通用顶级域 :如 .com, .org, .net 等。

    • 国家/地区顶级域 :如 .cn(中国),.us(美国)等。

  • 二级域 :这是用户注册的独特部分,例如 baidubaidu.com 就是一个完整的域名。

  • 子域/主机名 :由域名所有者自行创建,用于服务划分,例如 wwwmailblog 等。

所以,解析 www.baidu.com. 的完整路径是从右向左的:根 (.) -> .com -> baidu -> www

三、 DNS 系统的关键角色

在整个解析过程中,涉及四类重要的服务器:

  1. DNS 解析器 :也叫本地 DNS 服务器 ,通常由 ISP(如电信、移动)提供,或使用公共 DNS(如 114.114.114.114, 8.8.8.8)。它是直接接收用户查询请求的"前台接待员"。

  2. 根域名服务器 :全球共13个逻辑根服务器集群。它不存储具体域名的IP,但知道每个顶级域(如 .com)由谁管理,是查询的"第一站向导"。

  3. 顶级域名服务器 :负责管理特定顶级域下的所有二级域名。例如,.com TLD 服务器知道 baidu.com 的权威服务器是谁,是查询的"第二站向导"。

  4. 权威域名服务器 :域名解析的"终极答案来源"。它是域名所有者设置的服务器,存储着该域名下所有主机记录(如 wwwmail 对应的 IP 地址)。

四、 DNS 解析的工作流程(核心)

整个 DNS 解析过程是一个典型的 递归查询 配合 迭代查询 的协作流程。下图清晰地展示了这一完整过程:

这个过程完美对应了图中的步骤,让我们来详细解读:

  1. 本地缓存查询

    • 浏览器首先检查自己的缓存。

    • 操作系统检查 Hosts 文件 和本地的 DNS 缓存(如 Windows 的 DNS Client 服务)。

    • 如果任何一步有缓存且未过期,则直接使用该 IP,流程结束。

  2. 请求 DNS 解析器(递归查询开始)

    • 如果本地没有缓存,操作系统会将这个查询请求发送到配置好的 本地 DNS 服务器(DNS 解析器) 。这个请求相当于说:"帮我找到 www.example.com 的 IP,无论你问谁,找到后直接告诉我结果。"
  3. DNS 解析器的迭代查询

    • 解析器检查自身缓存 :DNS 解析器也有自己的缓存。如果有记录且未过期,它就直接返回结果,流程结束。如果没有,它便开始代表用户进行 迭代查询

    • 询问根域名服务器 :解析器向13个根服务器之一发起查询。根服务器不直接给出答案,而是回复一个负责 .com 域的 顶级域名服务器地址列表

    • 询问顶级域名服务器 :解析器从中选一个 .com TLD 服务器 进行查询。TLD 服务器查看请求的二级域名(example),然后回复管理 example.com权威域名服务器地址列表

    • 询问权威域名服务器 :解析器向其中一个 example.com 的权威服务器发起查询。这次,权威服务器在自己的区域数据文件中查找 www 这个主机名,并返回其对应的 最终 IP 地址

  4. 返回结果与缓存

    • DNS 解析器终于拿到了 IP 地址。它首先 将这个记录保存在自己的缓存中 ,保存时间由记录中的 TTL 值决定。

    • 然后,解析器将 IP 地址返回给用户的操作系统,操作系统也可能缓存它。

    • 最后,IP 地址被送达浏览器。

  5. 建立连接

    • 浏览器拿到 IP 地址后,就可以通过 HTTP/HTTPS 协议与目标服务器建立 TCP 连接,开始请求和加载网页内容。

五、 关键概念

  • 资源记录:DNS 数据库中存储的基本信息单元。常见类型有:

    • A 记录:将主机名指向一个 IPv4 地址。

    • AAAA 记录:将主机名指向一个 IPv6 地址。

    • CNAME 记录:域名别名,将一个域名指向另一个域名。

    • MX 记录:邮件交换记录,指定接收邮件的服务器。

    • NS 记录:指定该域名由哪台权威服务器来解析。

  • TTL:一条 DNS 记录在缓存中存活的时间(秒)。较短的 TTL 便于快速更改记录,较长的 TTL 能减少查询次数,提升速度。

相关推荐
BIBI20494 小时前
HTTP 请求方法指南:GET, POST, PUT, PATCH, DELETE 区别
网络·网络协议·http
代码不停4 小时前
网络 UDP 和 TCP / IP详细介绍
网络·网络协议·tcp/ip·udp·1024程序员节
wanhengidc5 小时前
云手机是一种应用软件吗?
运维·服务器·网络·游戏·智能手机·1024程序员节
AAA阿giao6 小时前
Git 入门实践:从本地仓库到版本控制的“月光宝盒”
github·命令行
绝无仅有6 小时前
京东面试题解析:同步方法、线程池、Spring、Dubbo、消息队列、Redis等
后端·面试·github
wanhengidc6 小时前
云手机 无限畅玩手游 巨 椰
运维·服务器·网络·游戏·智能手机
绝无仅有6 小时前
京东面试题解析:String与StringBuilder的区别、装箱拆箱、重载与重写总结
后端·面试·github
hhhh明7 小时前
Google Drive 超大文件下载到服务器
服务器·网络·google drive
不惑_7 小时前
如何使用 Ansible 安装 Docker
docker·github·ansible