域名系统Domain Name System
域名系统(DNS)是互联网的命名服务,将人类友好的域名映射到机器可读的 IP 地址。 DNS 服务对用户透明。 当用户在浏览器中输入域名时,浏览器必须通过询问 DNS 基础设施将域名翻译为 IP 地址。 一旦获取所需的 IP 地址,用户的请求将被转发到目标 Web 服务器。
重要细节
- 命名服务器Name Servers:DNS 不是单一服务器。它是一个完整的基础设施,拥有众多服务器。响应用户查询的 DNS 服务器称为名称服务器。
- 资源记录Resource Records:DNS 数据库以资源记录(RR)的形式存储域名到 IP 地址的映射。 RR 是用户从名称服务器请求的最小信息单元。 有不同类型的 RR。 下表描述了常见的 RR。 三个重要的信息是类型,名称和值。 名称和值根据 RR 的类型而变化。
Type | **Description ** | **Name ** | **Value ** | **Example (Type, Name, Value) ** |
---|---|---|---|---|
A | Provides the hostname to IP address mapping | Hostname | IP address | (A, relay1.main.educative.io,104.18.2.119) (A,relay1.main.educative.io,104.18.2.119) |
NS | Provides the hostname that is the authoritative DNS for a domain name | Domain name | Hostname | (NS, educative.io, dns.educative.io) |
CNAME | Provides the mapping from alias to canonical hostname | Hostname | Canonical name | (CNAME, educative.io, server1.primary.educative.io) |
MX | Provides the mapping of mail server from alias to canonical hostname | Hostname | Canonical name | (MX, mail.educative.io, mailserver1.backup.educative.io) (MX,mail.educative.io,mailserver1.backup.educative.io) |
- 缓存Cache:DNS 在不同层级上使用缓存来减少用户的请求延迟。缓存在减轻 DNS 基础设施负担方面发挥着重要作用,因为它必须满足整个互联网的查询。
- 层次结构Hierarchy:DNS 名称服务器以层次形式存在。由于其不断增长的规模和查询负载,层次结构使 DNS 具有高度可扩展性。在下一课中,我们将看看如何使用类似树状结构来管理整个 DNS 数据库。
DNS层次结构
DNS 并不是一个单一的服务器,它接受请求并响应用户查询。它是一个完整的基础设施,具有不同层次的名称服务器。
DNS 层次结构中主要有四种类型的服务器:
- DNS解析器DNS resolver:解析器启动查询序列并将请求转发给其他 DNS 名称服务器。通常,DNS 解析器位于用户网络的前提下。然而,DNS 解析器也可以通过缓存技术满足用户的 DNS 查询,我们很快就会看到。这些服务器也可以称为本地或默认服务器。
- 根级别命名服务器Root-level name servers:这些服务器接收来自本地服务器的请求。根名称服务器根据顶级域名维护名称服务器,例如 .com , .edu , .us 等。例如,当用户请求 educative.io 的 IP 地址时,根级别名称服务器将返回一个持有 .io 域的 IP 地址的顶级域(TLD)服务器列表。
- 顶级域名(TLD)名称服务器:这些服务器保存着权威名称服务器的 IP 地址。查询方将获得属于组织权威服务器的 IP 地址列表。
- 权威名称服务器:这些是组织的 DNS 名称服务器,提供 Web 或应用服务器的 IP 地址。
迭代 vs 递归查询解析
执行 DNS 查询有两种方式:
- 迭代式:本地服务器请求根服务器、顶级域名服务器和权威服务器的 IP 地址。
- 递归:最终用户请求本地服务器。本地服务器进一步请求根 DNS 名称服务器。根名称服务器将请求转发给其他名称服务器。
注意:通常,迭代查询更受欢迎,以减少 DNS 基础设施的查询负载。
缓存
缓存指的是经常请求的资源记录的临时存储。记录是 DNS 数据库中的数据单元,显示名称与值的绑定关系。缓存可以减少用户的响应时间,降低网络流量。当我们在不同层次上使用缓存时,可以减轻 DNS 基础设施的查询负担。缓存可以在浏览器、操作系统、用户网络内的本地名称服务器或 ISP 的 DNS 解析器中实现。
注意:即使没有可用的缓存来解决用户的查询并且必须访问 DNS 基础设施,缓存仍然是有益的。本地服务器或 ISP DNS 解析器可以缓存顶级域服务器或权威服务器的 IP 地址,并避免请求根级服务器。
DNS是一个分布式系统
虽然 DNS 层次结构促进了我们今天所知道的分布式互联网,但它本身也是一个分布式系统。 DNS 的分布式特性具有以下优势:
- 它避免成为单点故障(SPOF)。
- 它实现了低查询延迟,使用户可以从附近的服务器获得响应。
- 在维护和更新或升级过程中,它具有更高的灵活性。例如,如果一个 DNS 服务器宕机或负载过重,另一个 DNS 服务器可以响应用户查询。
高扩展性
由于其分层性质,DNS 是一个高度可扩展的系统。大约有 1,000 个复制的 13 个根级服务器实例分布在全球各地,以策略性地处理用户查询。工作任务分配给 TLD 和根服务器来处理查询,最终由组织自己管理的权威服务器来使整个系统运作。如上所示的 DNS 层次树,不同的服务处理树的不同部分,实现了系统的可扩展性和可管理性。
可靠性
DNS 成为可靠系统的三个主要原因:
- 缓存:缓存是在浏览器、操作系统和本地名称服务器中进行的,ISP DNS 解析器也维护着经常访问服务的丰富缓存。即使一些 DNS 服务器暂时宕机,缓存记录也可以被提供,使 DNS 成为一个可靠的系统。
- 服务器复制:DNS 在全球范围内系统地复制了每个逻辑服务器的副本,以在低延迟下满足用户请求。冗余服务器提高了整个系统的可靠性。
- 协议:尽管许多客户端依赖不可靠的用户数据报协议(UDP)来请求和接收 DNS 响应,但重要的是要认识到 UDP 也提供了独特的优势。它速度更快,因此提高了 DNS 性能。此外,自其创立以来,互联网服务的可靠性已经提高,因此通常更喜欢 UDP 而不是 TCP。如果之前没有响应,DNS 查询通常会在传输层重新传输。因此,请求-响应可能需要额外的往返,这与 TCP 相比提供了更短的延迟,TCP 在数据交换之前每次都需要进行三次握手。
一致性
DNS 使用各种协议在层次结构中的复制服务器之间更新和传输信息。DNS 为了实现高性能而妥协于强一致性,因为与写入相比,数据经常从 DNS 数据库中读取。然而,DNS 提供最终一致性,并懒惰地在复制服务器上更新记录。通常,更新 DNS 服务器上的记录需要从几秒钟到三天不等的时间。在互联网上传播信息的时间取决于 DNS 基础设施、更新的大小以及正在更新的 DNS 树的哪个部分。
一致性也可能因缓存而受到影响。由于权威服务器位于组织内部,可能会在组织服务器故障时更新某些资源记录。因此,默认/本地和 ISP 服务器上的缓存记录可能已过时。为了减轻这个问题,每个缓存记录都有一个称为生存时间(TTL)的过期时间。