域名系统(DNS)
域名系统(Domain Name System,DNS)是一种分层和分散的命名系统,用于识别可通过互联网或其他互联网协议(IP)网络访问的计算机。DNS 中包含的资源记录将域名与其他形式的信息相关联,从而将人类友好的域名映射到计算机使用底层网络协议定位的服务和设备 IP 地址。最新的 DNS 规范记录于 RFC 1034 与 RFC 1035。
DNS 反映了互联网中的管理责任结构。每个子域都是委托给管理者的管理自治区域。对于由注册管理机构运营的区域,管理信息通常由注册管理机构的 RDAP(Registration Data Access Protocol)和 WHOIS 服务补充。该数据可用于深入了解互联网上的给定主机并跟踪其责任。
地址解析机制
域名解析器通过从最右边(顶级)域标签开始的一系列查询来确定负责相关域名的域名服务器。为了正确操作其域名解析器,网络主机配置有根名称服务器的已知地址的初始缓存。管理员通过从可靠来源检索数据集定期更新提示。假设解析器没有缓存记录来加速该过程,则解析过程从查询其中一个根服务器开始。在典型的操作中,根服务器不直接回答,而是通过对更权威的服务器的引用进行响应,例如,对 “www.wikipedia.org” 的查询被引用到 org 服务器。解析器现在查询引用的服务器,并反复重复此过程,直到收到权威答案。如果互联网上的每个解析都需要从根开始,那么这种机制会给根服务器带来很大的流量负担。实际上,DNS 服务器中使用缓存来减轻根服务器的负载,因此,根名称服务器实际上只参与了所有请求的一小部分。

为了提高效率、减少互联网上的 DNS 流量并提高最终用户应用程序的性能,域名系统支持 DNS 缓存服务器。这些服务器将 DNS 查询结果存储在配置中确定的生存时间(Time To Live,TTL)更新有问题的域名记录。互联网服务提供商(ISP)通常为客户提供递归和缓存名称服务器。另外,许多路由器也实现了 DNS 缓存和递归以提高本地网络的效率。某些应用程序(例如 Web 浏览器)也会维护内部 DNS 缓存以避免通过网络重复查找。
主机名和 IP 地址不需要以一对一的关系匹配。多个主机名可能对应于一个 IP 地址,这在虚拟主机中很有用,其中许多网站都由一个主机提供服务。或者,单个主机名可以解析为多个 IP 地址,以促进容错并将负载分配到企业或全球互联网上的多个服务器实例。
全球 DNS 的顶层,存在 13 组根名称服务器,它们的附加“副本”通过泛播(Anycast)寻址在全球范围内分布。
资源记录(RR)
DNS 为网络资源指定了一个信息元素数据库。信息元素的类型通过 DNS 记录类型列表(List of DNS reocrd types)、资源记录(Resource Record,RR)进行分类和组织。每条记录都有一个类型(名称和编号)、一个过期时间(生存时间)、一个类和特定于类型的数据。相同类型的资源记录被描述为一个资源记录集(RRset),没有特殊的排序。DNS 解析器在查询时返回整个集合,但服务器可能会执行循环排序以实现负载平衡。相比之下,域名系统安全扩展(DNSSEC) 以规范顺序处理完整的资源记录集。当通过互联网协议网络发送时,所有记录都使用 RFC 1035 中指定的通用格式:
资源记录的域如下:
| 域 | 描述 | 长度(八位字节) |
|---|---|---|
| NAME | 此记录所属的节点的名称 | 变量 |
| TYPE | 数字形式的 RR 类型(例如,MX RR 为 15) | 2 |
| CLASS | CLASS代码 | 2 |
| TTL | RR 保持有效的秒数(最大值为 2^31-1,约 68 年) | 4 |
| RDLENGTH | RDATA 字段的长度 | 2 |
| RDATA | 其他 RR 特定数据 | 变量,根据RDLENGTH |
DNS 记录类型列表中最常见的有如下类型:
| 类型 | Type id | 定义文档 | 描述 | 方法 |
|---|---|---|---|---|
| A | 1 | RFC 1035 | 地址记录 | 返回一个 32 位IPv4地址,最常用于将主机名映射到主机的 IP 地址 |
| NS | 2 | RFC 1035 | 名称服务器记录 | 委托 DNS 区域(DNS zone)使用给定的权威名称服务器(Authoritative name server) |
| CNAME | 5 | RFC 1035 | 规范名称记录 | 一个名称到另一个名称的别名:DNS 查找将通过使用新名称重试查找来继续 |
| MX | 15 | RFC 1035 与 RFC 7505 | 邮件交换记录 | 将域名映射到该域的邮件 传输代理列表(Message Transfer Agents,MTA) |
| TXT | 16 | RFC 1035 | 文字记录 | 最初用于 DNS 记录中的任意人类可读文本。然而,自 1990 年代初以来,该记录更多地携带机器可读数据,例如 RFC 1464 规范声明的,OE、SPF、DKIM、DMARC、DNS-SD等 |
| AAAA | 28 | RFC 3596 | IPv6地址记录 | 返回一个 128 位IPv6地址,最常用于将主机名映射到主机的 IP 地址 |
| SRV | 33 | RFC 2782 | 服务定位器 | 通用服务位置记录,用于较新的协议,而不是创建特定于协议的记录,例如 MX |
规范名称记录(CNAME)
规范名称记录(Canonical NAME record,CNAME)是域名系统(DNS)中的一种资源记录(RR)类型,它将一个域名(别名)映射到另一个域名(规范名称)。
当从一个 IP 地址运行多个服务(如 FTP 服务器 和 Web 服务器,每个都在不同的端口上运行)时,使用 CNAME 是十分方便的。例如,可以使用 CNAME 记录将 ftp.example.com 和 www.example.com 指向 example.com 的 DNS 条目,该条目又具有指向 IP 地址的 A 记录。然后,如果 IP 地址发生变化,只需在网络内的一处记录更改:即在 DNS A 记录中,例如 example.com。ftp.example.com 和 www.example.com 都属于 example.com 的别名,而 example.com 则称为 ftp.example.com 和 www.example.com 的规范名称。
有两点需要注意:
- CNAME 记录必须始终指向另一个域名,而不是直接指向 IP 地址。
- 由于效率低下,应避免指向其他 CNAME 记录的 CNAME 记录(但即使这样做了也不算是个错误)。
内容分发网络(CDN)
内容分发网络(Content Delivery Network or Content Distribution Network,CDN)是是一组分布式服务器,共同组成的一个对内容传输的覆盖网络(Overlay Network),用来加速用户对网络的内容访问。
CDN 最常见的调度方式就是 DNS 调度形式。对于 CDN 客户来说,不需要改动网站架构,只需要修改自己的 DNS 解析,设置一个 CNAME 指向 CDN 服务商即可。
CDN 节点通常部署在多个位置,通常在多个互联网主干上。好处包括降低带宽成本、缩短页面加载时间以及提高内容的全球可用性。对内容的请求通常通过算法定向到以某种方式优化的节点。在优化性能时,可以选择最适合向用户提供内容的位置。这可以通过选择跳数最少、距请求客户端的网络秒数最少或服务器性能(根据当前和历史)可用性最高的位置来衡量,以优化跨本地网络的交付。在优化成本时,可以选择成本最低的位置。在最佳情况下,这两个目标趋于一致,因为靠近网络边缘的最终用户的 边缘服务器 可能在性能或成本方面具有优势。