如果你明天醒来,再也无法通过输入 google.com 或 espn.com 这样的域名访问网站,而必须记住并输入一串数字才能上网——比如检查 Gmail 要输入 172.217.16.206,看体育新闻要输入 199.181.132.250——那么互联网浏览一夜之间就会变得极其乏味!
幸运的是,只要 DNS 在后台平稳运行,这种互联网噩梦场景就永远不会发生。DNS 是域名系统(Domain Name System)的缩写,这项基本服务使我们免于记忆数字 IP 地址的巨大麻烦。它高效地将易于记忆的域名与相应的 IP 地址匹配,让我们可以无缝浏览。
在这篇文章中,我们将探索这个关键互联网骨干的复杂工作原理。
DNS 是什么
DNS 是一个分布式和分层系统,充当互联网的地址簿。它将域名转换为 IP 地址,以促进全球设备之间的高效通信。DNS 的主要目的是为用户提供一种便捷的方式,使用易于记忆的域名访问网站和资源,而计算机和服务器在后台使用 IP 地址进行通信。
DNS 被实现为应用层服务。它由位于网络边缘的服务器实现,而不是网络内部的路由器和交换机。这反映了互联网设计理念:保持网络核心简单,将复杂性放在网络边缘。
DNS 提供多种服务以促进互联网功能。以下是 DNS 提供服务思维导图:
我们下面将描述 DNS 一些最重要的服务:
域名到 IP 地址映射
DNS 维护域名及其相应 IP 地址的数据库。这种映射对于设备在互联网上相互定位至关重要。
例如,考虑域名”www.bytebytego.com”。主机到 IP 地址映射涉及确定与该域名关联的 IP 地址,例如”172.67.21.11”。
主机别名
DNS 支持通常称为主机别名的功能,通过 CNAME(规范名称)记录实现。这允许将单个 IP 地址或主域名与多个域名别名关联。
例如,假设主域名是”bytebytego.com”。你可能希望你的网站不仅可以通过”bytebytego.com”访问,还可以通过”www.bytebytego.com”、“web.bytebytego.com”和”blog.bytebytego.com”等各种别名访问。通过在 DNS 中设置适当的 CNAME 记录,所有这些别名都可以指向主域名”bytebytego.com”。因此,用户可以使用任何这些域名访问你的网站,全部指向相同的目的地 IP 地址。
邮件路由
DNS 通过 MX 记录在电子邮件路由中发挥着至关重要的作用。这些记录允许域名指定哪些邮件服务器负责代表其接收电子邮件消息。这种机制实现了电子邮件配置的灵活性。
例如,假设指定接收”bytebytego.com”域电子邮件的主邮件服务器是”mail.bytebytego.com”。你可能希望拥有特定的电子邮件地址,例如以”@sales.bytebytego.com”或”@support.bytebytego.com”结尾的地址,但仍然将所有这些地址的传入邮件定向到”mail.bytebytego.com”服务器。通过适当配置 MX 记录,发送到任何这些地址的电子邮件都将路由到指定的主邮件服务器。
反向查找
虽然 DNS 主要用于将域名转换为 IP 地址,但它也可以执行反向查找,将 IP 地址转换回域名。这用于安全和日志记录目的。
负载均衡
DNS 可以通过响应相同的域名查询返回不同的 IP 地址来分配传入的网络流量到多个服务器。这有助于平衡负载,提高在线服务的性能和可靠性。
DNS 层次结构
DNS 作为分布式分层数据库运行。下图显示了 DNS 层次结构的高级视图。

根服务器
在 DNS 层次结构顶端的是根服务器。当服务器无法实际解析名称时,会联系根服务器。你可以将其视为启动解析的第一接触点。
根服务器就像互联网的中枢神经系统,因此安全性将非常重要。与根服务器相关的大部分基础设施由 ICANN(互联网名称与数字地址分配机构)负责。全球有 13 个逻辑根服务器,但每个逻辑根服务器实际上都被复制,因此对应这 13 个逻辑服务器,全球实际上有近千台物理服务器。
TLD 服务器
从根服务器向下一层,我们找到TLD(顶级域)服务器,TLD 层中的每个服务器负责解析以.com、.edu、.net 和.org 等结尾的地址之一。
ICANN 对互联网上使用的所有 TLD 拥有权威,并将这些 TLD 的责任委托给各种组织。对于希望在这些 TLD 下注册新域名的个人或实体,他们通常通过域名注册商(Domain Name Registrars)进行,这些是经认证的实体,与注册局接口处理注册流程。
权威服务器
权威服务器是其特定域内域名解析的最终来源。它们存储给定域的实际名称到 IP 地址映射。虽然互联网上存在各种缓存机制来加速域名解析,但当被查询时,正是权威服务器提供正确和最终答案。域名所有者或管理员配置其域的记录,但实际基础设施——DNS 服务器——通常由 DNS 托管提供商或注册商(如 Cloudflare、Namecheap、GoDaddy 等)维护和运营。
递归服务器
递归服务器处理来自客户端设备(如计算机和智能手机)的 DNS 查询。当设备想要解析域名时,它会联系这些服务器。递归服务器代表客户端遍历 DNS 层次结构,咨询各种 DNS 服务器以确定与域名关联的 IP 地址。一旦获得答案,它们就会将其返回给客户端。为了提高效率,递归服务器通常缓存响应,以避免重复查询相同信息。
查看下图,它显示了一些主要 DNS 服务器在 DNS 查询管道中的位置。

查询解析方法
DNS 中有两种主要的查询解析方法:
- 迭代查询解析
- 递归查询解析
这些方法定义了 DNS 服务器如何相互交互以查找与给定域名关联的 IP 地址。以下是每种方法的简要概述。
迭代查询解析
在迭代查询解析中,接收查询的 DNS 服务器向查询服务器提供引荐,引导它遍历 DNS 层次结构。查询服务器积极参与该过程,根据收到的引荐发送后续查询。
让我们尝试通过下图所示示例来理解迭代查询解析的工作原理。

假设请求主机正在请求解析名称 bytebytego.com。以下是这将如何展开:
- 主机首先向本地 DNS 解析器发送查询消息。查询消息包含要转换的主机名 bytebytego.com
- 如果解析器缓存中没有 IP 地址,它会向根 DNS 服务器发送查询
- 根 DNS 服务器识别.com 后缀,提供对负责.com 的 TLD 服务器的引荐
- 解析器然后向这些 TLD 服务器之一发送新查询
- TLD 服务器提供对负责 bytebytego.com 的权威 DNS 服务器的引荐
- 解析器向权威 DNS 服务器发送另一个查询
- 权威 DNS 服务器响应 bytebytego.com 的 IP 地址
- DNS 解析器缓存此 IP 地址,然后将其返回给请求主机
- 现在,请求主机向 http://www.bytebytego.com Web 服务器的 IP 地址发出 HTTP 请求
- Web 服务器返回 www.bytebytego.com 的网页
递归查询解析
在递归查询解析中,接收查询的 DNS 服务器代表客户端承担查找 IP 地址的责任。它可能自己使用迭代查询遍历 DNS 层次结构,直到到达请求域的权威 DNS 服务器。
让我们使用前面的示例,尝试使用递归查询解析来解析 bytebytego.com 的 IP 地址,如下图所示:

本文为学习目的的个人翻译,译文仅供参考。
原文链接:A Crash Course in DNS。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。