什么是DNS?它是如何工作的?
IPAddress-Lookup.com ·
每当你在浏览器中输入一个网站名称时,一个无形的系统就会立即启动,以确定该网站实际位于何处。该系统就是域名系统(Domain Name System,简称 DNS),它是互联网最重要的基础设施之一。 如果没有它,你每次访问网站时,就不得不记住一串冗长的数字,而不是像 example.com 这样易于记忆的名称。在本指南中,我们将详细解释什么是 DNS,追踪一次真实的查询过程从始至终,剖析每种主要记录类型,并向你展示如何自行检查和排查 DNS 问题。
什么是 DNS?
DNS 就是互联网的电话簿。计算机之间并不使用人类可读的名称进行通信,而是通过数字地址进行通信。当你想通过电话联系朋友时,你不会拨打对方的名字,而是拨打对方的号码;但你通常会记住对方的名字,并让通讯录将其转换为数字。DNS 在互联网上也起着同样的作用: 它将人们容易记住的域名(例如 www.example.com)转换为机器实际用于路由流量的数字地址——即 IP 地址,例如 IPv4 中的 93.184.216.34 或 IPv6 中更长的十六进制字符串。
这种转换之所以重要,是因为 IP 地址会发生变化。一个网站可能会迁移到新服务器、更换托管服务商,或者将其内容分布在世界各地的数十个数据中心中。域名为我们提供了一个稳定且易于记忆的标识,即使底层地址发生变化,该标识也保持不变。 DNS 正是兑现这一承诺的层级,每秒在全球范围内将名称解析为地址数十亿次。它同时也是一个分布式系统,这意味着没有任何一台计算机单独持有完整的“电话簿”。相反,责任分散在庞大的服务器层级结构中,这正是 DNS 能够快速、弹性运行并扩展至整个地球的原因。
DNS查询涉及的参与者
在追踪查询过程之前,先来认识一下这些参与者。每个参与者都有特定的职责,一次查询可能会涉及所有参与者:
- 存根解析器(Stub resolver)——内置于操作系统中的小型软件组件。当应用程序需要获取地址时,存根解析器会将请求转发出去。它本身几乎不进行任何独立判断。
- 递归解析器——这是系统中的主力军,通常由您的互联网服务提供商(ISP)或公共服务提供商(如众所周知的 8.8.8.8 或 1.1.1.1 服务)运行。它接收您的查询,执行所有必要的查找工作以获得最终答案,然后将结果返回给您。
- 根域名服务器——位于层级结构的顶端。它们并不了解任何网站的地址,但知道如何找到负责各个顶级域名的服务器。
- 顶级域名(TLD)名称服务器——负责管理诸如 .com、.org 或 .net 之类的顶级域名。它们知道哪些权威服务器负责处理其下注册的各个域名。
- 权威域名服务器——最终的权威来源。这些服务器保存着特定域名的实际记录,并给出确切的答案。
追踪一个真实的查询:解析 www.example.com
让我们一步步追踪一个请求。假设你在浏览器中输入 www.example.com 并按下回车键。在尚未缓存任何信息的情况下,幕后发生的过程如下:
- 浏览器向存根解析器发出请求。您的操作系统中的存根解析器接收到针对 www.example.com 的请求。它首先检查自身的本地缓存。如果最近曾查询过该域名,则会立即返回结果,整个过程至此结束。
- 存根解析器联系递归解析器。由于没有缓存的响应,存根解析器将查询转发给您配置的递归解析器。
- 递归解析器向根服务器发出查询。由于递归解析器尚不清楚 .com 的位置,因此它会向其中一台根服务器询问。根服务器虽然不知道 www.example.com,但会返回一个转介信息:“我没有该答案,但这里是负责 .com 的服务器。”
- 递归解析器向 .com 顶级域名 (TLD) 服务器发起查询。根据该转介信息,解析器向 .com 顶级域名服务器查询 www.example.com。顶级域名服务器再次以转介形式回复:“我不知道该地址,但这里是 example.com 的权威域名服务器。”
- 递归解析器向权威服务器发起查询。最终,解析器向 example.com 的权威域名服务器发出请求。该服务器保存着真实的记录,并给出明确答复:“www.example.com 的地址是 93.184.216.34。”
- 该响应传回给你。递归解析器将此响应缓存起来,将其传递给你的存根解析器,随后你的浏览器便会与该 IP 地址建立连接。整个过程通常在几十毫秒内完成。
递归查询与迭代查询
上述演示说明了两种不同的查询方式,理解两者的区别可以消除许多困惑。当您的设备向递归解析器提出问题时,它期望得到一个完整的最终答案。这就是递归查询:解析器承担起采取一切必要措施以返回完整结果的责任。您的设备只需静候结果即可。
递归解析器与根服务器、顶级域名(TLD)服务器以及授权服务器之间的交互属于迭代查询。这些服务器不会代您追踪答案,而是根据自身掌握的最佳信息进行响应,通常会提供一个指向目标更近一步的转介信息。 随后,递归解析器会重复这一过程,沿着层次结构向下迭代,直至获得权威答案。简而言之:您的设备进行递归查询,而解析器则采用迭代方式工作。
各层的缓存与 TTL
如果每次查询都必须一路传送到权威服务器,互联网将变得极其缓慢,而根服务器也会因负载过重而崩溃。缓存机制避免了这种情况。在几乎每一层,响应结果都会被临时存储以便重复使用。您的浏览器会缓存,操作系统会缓存,而递归解析器也会进行大量缓存。
记录的缓存时长由其 TTL(生存时间)控制,该值以秒为单位,由域名所有者设定。TTL 为 3600 的记录可在缓存中保留一小时,之后解析器才需获取最新副本。 较短的 TTL 允许您快速更改记录,这在服务器迁移期间非常方便,但会增加查询量。较长的 TTL 可以提高性能并减轻负载,但意味着更改在全球范围内的传播需要更长时间。这就是为什么管理员通常会在计划更改的前一天降低记录的 TTL,并在更改完成后将其恢复原值。
DNS 层次结构与根服务器
DNS 采用倒置树结构。最顶层是根节点,通常以单个点表示,且通常不可见。根节点之下是顶级域名(TLD),例如 .com、.org 以及国家代码域名(如 .uk 或 .de)。每个顶级域名之下是个人和组织注册的二级域名,例如 example.com。 其下则是诸如 www 或 mail 之类的子域名。从右向左阅读域名,即意味着沿着层次结构从通用到具体逐级下行。
根域由一个被广泛称为“13台根服务器”的系统提供服务。实际上,这些是13个命名为A至M的集群,每个集群由不同的组织运营。 在这13个地址的背后,是数百台分布于全球的物理服务器,它们采用一种名为“任播”(anycast)的技术,将您的请求路由到最近的可用实例。正是通过这种方式,少数几个命名的入口点才能以低延迟、高抗中断和抗攻击能力,可靠地响应全球范围内的查询。
DNS 记录类型解析
域名的 DNS 区域是一组记录的集合,每种记录类型都具有不同的用途。对于运营网站或管理电子邮件的人来说,理解这些记录类型至关重要。下表总结了最重要的记录类型,并为每种类型提供了一个示例。
| 记录 | 用途 | 示例 |
|---|---|---|
| A | 将名称映射到 IPv4 地址 | example.com → 93.184.216.34 |
| AAAA | 将域名映射到 IPv6 地址 | example.com → 2606:2800:220:1:248:1893:25c8:1946 |
| CNAME | 将一个名称别名到另一个规范名称 | www.example.com → example.com |
| MX | 指定为该域名接收电子邮件的邮件服务器 | 10 mail.example.com |
| TXT | 包含任意文本,广泛用于电子邮件认证 | "v=spf1 include:_spf.example.com ~all" |
| NS | 将域名委托给其权威域名服务器 | ns1.example.com |
| SOA | 权威记录;包含区域元数据和刷新计时器 | ns1.example.com admin.example.com 2026070101 |
| CAA | 指定哪些证书颁发机构可以签发证书 | 0 签发 "letsencrypt.org" |
| PTR | 反向查询,将 IP 地址映射回域名 | 34.216.184.93.in-addr.arpa → example.com |
A 和 AAAA 记录
这些是将域名与地址关联起来的核心组件。 A记录指向IPv4地址,而AAAA记录指向IPv6地址。一个域名可以同时拥有这两种记录,以便使用任一协议的客户端都能访问该域名。当您的浏览器询问“example.com在哪里”时,通常正是这两种记录中的一种提供了最终答案。
CNAME 记录
CNAME 记录会创建一个别名,将一个名称转发到另一个规范名称。它通常用于将 www 指向基础域名,或将自定义子域名指向托管服务商的地址。 一项关键规则是:CNAME 记录不能与同一名称下的其他记录共存,因此域名的根域名通常使用 A 或 AAAA 记录,而非 CNAME。
MX 和电子邮件记录
MX 记录向外界告知哪些服务器负责接收您域名的邮件,其中优先级数字决定了尝试连接的顺序。数字越小优先级越高,因此优先级为 10 的服务器会先于优先级为 20 的服务器被尝试连接。但 MX 记录仅是电子邮件 DNS 配置的一部分。
TXT 记录:SPF、DKIM 和 DMARC
TXT 记录存储自由格式的文本,电子邮件领域高度依赖它们来实现三种相互关联的认证机制。SPF 列出了获准代表您的域名发送邮件的服务器,帮助接收方拒收伪造邮件。 DKIM 发布一个加密公钥,以便收件方验证邮件是否由您的域名签名,且在传输过程中未被篡改。DMARC 将这两者结合起来,告知收件方如何处理未通过 SPF 或 DKIM 验证的邮件,以及应将报告发送至何处。它们共同构成了现代电子邮件送达率的核心支柱。
NS 和 SOA 记录
NS 记录用于授权委托,指定负责某个区域的服务器。SOA 记录位于每个区域的顶层,包含管理详细信息,例如主域名服务器、负责联系人、区域编辑时会变化的序列号,以及控制辅助服务器如何刷新其区域副本的定时器。
CAA 和 PTR 记录
CAA 记录限制了哪些证书颁发机构(CA)被允许为您的域名签发证书,从而为防范未经授权的证书增添了一层保护。如果您想了解这些证书如何保障您的流量安全,请参阅我们的《SSL 证书详解》指南。 PTR 记录负责反向 DNS 解析,即将 IP 地址映射回主机名,邮件服务器通常会检查该记录以验证发件人的合法性。
DNS 与电子邮件送达率
可以说,DNS 对电子邮件的重要性不亚于对 Web 的重要性。当邮件服务器想要将邮件投递到您的域名时,它会查询您的 MX 记录以找到正确的投递目标。 当接收服务器需要判断收到的邮件是否可信时,它会检查您的 SPF、DKIM 和 DMARC 记录,并且通常还会验证发件服务器的 PTR 记录。 如果其中任何一项缺失或配置错误,合法邮件可能会被归入垃圾邮件文件夹,甚至被直接拒收。确保您的 DNS 邮件记录正确无误,是您能采取的最具影响力的措施之一,可确保您的邮件顺利送达收件箱,而非消失在垃圾邮件文件夹中。
DNS 安全
正因为 DNS 具有如此基础性的地位,它已成为攻击目标,目前已有多种技术可用于增强其安全性:
- DNSSEC 在 DNS 记录中添加加密签名,使解析器能够验证响应是否确实来自权威源,且未被篡改。它保护数据的完整性,但不会对数据进行加密。
- 基于 HTTPS 的 DNS(DoH)和基于 TLS 的 DNS(DoT)会对您的设备与递归解析器之间的通信进行加密。传统上,DNS 查询以明文形式传输,网络路径上的任何人都可以查看甚至篡改这些查询。DoH 和 DoT 通过将查询封装在加密中来弥补这一漏洞。
- 缓存中毒是一种经典攻击,恶意攻击者会诱使解析器缓存虚假响应,从而将受害者重定向至欺诈服务器。DNSSEC 以及随机源端口等现代解析器防护措施,使得此类攻击难以得逞。
常见的 DNS 问题及故障排除
当网站无法加载时,DNS 往往是罪魁祸首。其中最常见的问题包括:
- 传播延迟。修改记录后,旧的缓存值可能会一直存在,直到其 TTL 过期。这就是为什么更改对您来说可能已经生效,但对其他人来说尚未生效。
- 拼写错误和缺失的记录。主机名拼写错误或遗漏 A 记录会导致容易被忽视的故障。
- 名称服务器不匹配。如果您的域名注册商将域名指向了错误的名称服务器,那么您精心配置的任何记录都将无法被查询。
- CNAME 冲突。在同一名称下将 CNAME 与其他记录并列放置会导致解析失败。
- 解析器缓存。有时问题出在您自己的设备或路由器中的过期条目上,清空缓存即可解决。
如何自行检查 DNS 记录
您无需是网络工程师也能查询 DNS 记录。大多数系统都提供的 dig 和 nslookup 等命令行工具,可让您直接查询任何类型的记录。例如,查询某个域名的 A 记录会返回其 IPv4 地址,而查询 MX 记录则会显示其邮件服务器。 如果您不喜欢使用命令行,在线 DNS 查询工具可让您直接通过浏览器查询任何域名的记录,无需安装任何软件,从而轻松确认最近的更改是否已传播,或诊断配置错误。
养成检查 DNS 记录的习惯,能让整个系统变得通俗易懂。一旦你能查看自己域名的 A、MX 和 TXT 记录,这本抽象的“电话簿”就会变成一组具体、易懂且由你掌控的条目。 在此基础上,诊断网站加载缓慢、邮件退回或证书警告等问题,就不再是靠猜测,而是通过阅读记录就能解决。
常见问题
DNS 代表什么?
DNS 是域名系统(Domain Name System)的缩写。它是一个分布式系统,负责将人类可读的域名转换为计算机之间通信所使用的数字 IP 地址。
为什么 DNS 被称为“互联网的电话簿”?
正如电话簿能让你通过姓名查询某人的电话号码一样,DNS 也能让你的计算机通过域名查询网站的 IP 地址。你只需记住简单的域名,DNS 就会将其转换为计算机实际需要的数字地址。
DNS 更改需要多长时间才能生效?
这取决于记录的 TTL 值,以及沿途各解析器缓存该记录的程度。如果 TTL 较短,更改可能在几分钟内生效;但如果旧的缓存值仍在使用,则可能需要长达 24 到 48 小时才能在全球范围内完全传播。
递归解析器与权威服务器有什么区别?
递归解析器会代表您向其他服务器发送查询以查找答案,并将结果缓存起来。权威服务器则是实际持有域名记录并提供最终答案的权威来源。
DNS 是否经过加密?
传统 DNS 未加密,这意味着查询以明文形式传输。较新的标准(如 DNS over HTTPS 和 DNS over TLS)会对您的设备与解析器之间的流量进行加密,而 DNSSEC 则添加了用于验证答案真实性的签名。
如何查询某个域名的 DNS 记录?
您可以使用 dig 或 nslookup 等命令行工具,或基于浏览器的 DNS 查询服务。这些工具允许您查询特定的记录类型(如 A、AAAA、MX 和 TXT),以便验证配置或排查问题。