详解DNS是如何为域名找到对应的 IP 地址的。

1 阅读5分钟

这是一个经典的问题,话不多说,直接开干

1.浏览器DNS缓存

浏览器地址栏输入域名后,浏览器首先会去其本身的 DNS 缓存中查找是否有对应域名的记录,有就直接返回,没有就继续往下找

1.1 浏览器DNS缓存在哪里看呢?

在浏览器地址栏上输入这个 chrome://net-internals/#dns就可以看到

image.png 假设要看www.baidu.com的, 输入之后可以发现存在缓存记录

image.png

可以看到存在记录,看看是否使用缓存

image.png

勾选上停用缓存,可以看到查找dns的时间变长了。 image.png

2.系统DNS缓存

系统DNS缓存其实指的是host文件,位于C:/windows/system32/drivers/etc/hosts,在公司里,前端和后端同事联调的时候经常使用到它

127.0.0.1 www.baidu.com
192.168.1.1 www.google.com

如果在这个文件找到了就返回,没有就继续往下找

3.本地DNS服务器

如果在系统 DNS 也找不到域名的记录,那么浏览器就会去本地的 DNS 服务器(LDNS)上寻找该域名的记录。在这里的 LDNS 一般是指本机所设置的 DNS 服务器地址。

3.1 本地dns服务器指的是什么?在哪里?

本地域名服务器(Local DNS Server)一般指用户设备配置的 DNS 服务器地址,可能是路由器、ISP 提供或公共 DNS。它在 DNS 解析流程中承担递归查询任务,是用户访问互联网的关键中间角色。常见情况如下:

  默认网络配置中的 DNS 服务器

  • 来源:由网络自动分配(如通过 DHCP)或用户手动设置。

  • 作用:负责接收设备发起的 DNS 查询请求,并递归/迭代查询其他 DNS 服务器以获取结果。

  • 典型示例

家庭/企业路由器:如  192.168.1.1 (局域网内默认网关通常兼任 DNS 转发器)。

ISP(互联网服务商)提供的 DNS:如中国电信的  114.114.114.114 。

公共 DNS:如 Google 的  8.8.8.8  或 Cloudflare 的  1.1.1.1 。

3.2 怎么查看本地dns服务器?

命令提示符操作​:

ipconfig /all | findstr "DNS Servers"

 可以看到

image.png

4.根DNS服务器

当 LDNS 服务器还是找不到域名对应的记录时,那么其就会去根 DNS 服务器去寻找域名对应的记录。根 DNS 服务器全球只有 13 台,所以在 LDNS 服务器建立的时候,其会写死一个根 DNS 服务器的 IP 地址列表。

但实际上根 DNS 服务器并不存储所有域名的信息,其只存储顶级域名的解析记录。即对于我们访问的域名 www.baidu.com 来说,根 DNS 服务器并不能告诉我们 www.baidu.com 这个域名对应的 IP 是多少,它只能告诉我们 .com 这个顶级域名应该找哪个 DNS 服务器解析,然后把对应顶级 DNS 服务器的 IP 地址告诉我们。

如图所示:可以理解为.com. 右边的.就是根域,只不过可以隐藏了。 image.png

image.png

5.顶级DNS服务器

根 DNS 服务器告诉我们可以找对应的 .com 顶级 DNS 服务器解析。但实际上顶级 DNS 服务器只能解析二级域名的地址,即它只能告诉你:baidu.com 这个域名应该找哪台 DNS 服务器去解析。

这里我们从顶级 DNS 服务器解析 baidu.com 这个域名得到的 DNS 服务器,其实就是你买域名时用于管理解析的服务器。而且也是你设置域名 NS 记录时,设置的 DNS 服务器的地址。

5.1 NS记录是什么

NS 记录(Name Server Record)​​ 是域名系统(DNS)中的一种关键记录类型,用于指定哪些服务器是该域名的权威DNS服务器​(即负责管理该域名的解析)。简单来说,NS 记录告诉互联网:“查询这个域名时,请找以下指定的 DNS 服务器获取解析结果”。 image.png

5.2 NS记录需要自己配置吗

默认情况:无需自行配置

如果您的域名直接使用注册商或托管平台提供的DNS服务,NS记录通常由服务商自动配置,无需手动干预。
示例​:

  • 在GoDaddy注册域名,默认NS记录指向其服务器(如ns1.godaddy.com)。
  • 在阿里云购买域名,默认使用阿里云DNS(如dns9.hichina.com)。

需要自行配置的场景

使用第三方DNS服务(如Cloudflare、AWS Route 53)​

步骤​:

  1. 在第三方DNS服务商处创建域名托管区域。
  2. 获取其提供的NS服务器地址(如Cloudflare的kate.ns.cloudflare.com)。
  3. 返回域名注册商控制台,将NS记录修改为第三方提供的地址。

6. 次级域名服务器

上一步我们知道 .com 这个顶级域名告诉应该找哪台 DNS 服务器去解析(这台服务器我们称为次级域名服务器),其实这台 DNS 服务器就是我们购买域名时设置的用于解析的 DNS 服务器。在这台 DNS 服务器上,我们通过设置一条 A 记录(A 记录就是域名到 IP 地址的映射)就可以让某个域名与 IP 联系起来。

6.1 什么是A记录呢?


A记录(Address Record)​​ 是DNS系统中最基础的记录类型之一,用于将域名直接映射到IPv4地址。

如下图所示,我设置的是一条针对 hello.csyimg.com 域名的 A 记录,其指向了 192.168.1.1 这个 IP。如果最终找不到 A 记录,那浏览器就会报 DNS 解析错误。

image.png

参考文献

DNS自述:我是如何为域名找到家的-腾讯云开发者社区-腾讯云

一文讲清什么是A记录,CNAME记录,NS记录?