系统设计之域名系统

域名系统Domain Name System

域名系统(DNS)是互联网的命名服务,将人类友好的域名映射到机器可读的 IP 地址。 DNS 服务对用户透明。 当用户在浏览器中输入域名时,浏览器必须通过询问 DNS 基础设施将域名翻译为 IP 地址。 一旦获取所需的 IP 地址,用户的请求将被转发到目标 Web 服务器。

重要细节

  1. 命名服务器Name Servers:DNS 不是单一服务器。它是一个完整的基础设施,拥有众多服务器。响应用户查询的 DNS 服务器称为名称服务器。
  2. 资源记录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.iomailserver1.backup.educative.io
  1. 缓存Cache:DNS 在不同层级上使用缓存来减少用户的请求延迟。缓存在减轻 DNS 基础设施负担方面发挥着重要作用,因为它必须满足整个互联网的查询。
  2. 层次结构Hierarchy:DNS 名称服务器以层次形式存在。由于其不断增长的规模和查询负载,层次结构使 DNS 具有高度可扩展性。在下一课中,我们将看看如何使用类似树状结构来管理整个 DNS 数据库。

DNS层次结构

DNS 并不是一个单一的服务器,它接受请求并响应用户查询。它是一个完整的基础设施,具有不同层次的名称服务器。

DNS 层次结构中主要有四种类型的服务器:

  1. DNS解析器DNS resolver:解析器启动查询序列并将请求转发给其他 DNS 名称服务器。通常,DNS 解析器位于用户网络的前提下。然而,DNS 解析器也可以通过缓存技术满足用户的 DNS 查询,我们很快就会看到。这些服务器也可以称为本地或默认服务器。
  2. 根级别命名服务器Root-level name servers:这些服务器接收来自本地服务器的请求。根名称服务器根据顶级域名维护名称服务器,例如 .com , .edu , .us 等。例如,当用户请求 educative.io 的 IP 地址时,根级别名称服务器将返回一个持有 .io 域的 IP 地址的顶级域(TLD)服务器列表。
  3. 顶级域名(TLD)名称服务器:这些服务器保存着权威名称服务器的 IP 地址。查询方将获得属于组织权威服务器的 IP 地址列表。
  4. 权威名称服务器:这些是组织的 DNS 名称服务器,提供 Web 或应用服务器的 IP 地址。

迭代 vs 递归查询解析

执行 DNS 查询有两种方式:

  1. 迭代式:本地服务器请求根服务器、顶级域名服务器和权威服务器的 IP 地址。
  2. 递归:最终用户请求本地服务器。本地服务器进一步请求根 DNS 名称服务器。根名称服务器将请求转发给其他名称服务器。

注意:通常,迭代查询更受欢迎,以减少 DNS 基础设施的查询负载。

缓存

缓存指的是经常请求的资源记录的临时存储。记录是 DNS 数据库中的数据单元,显示名称与值的绑定关系。缓存可以减少用户的响应时间,降低网络流量。当我们在不同层次上使用缓存时,可以减轻 DNS 基础设施的查询负担。缓存可以在浏览器、操作系统、用户网络内的本地名称服务器或 ISP 的 DNS 解析器中实现。

注意:即使没有可用的缓存来解决用户的查询并且必须访问 DNS 基础设施,缓存仍然是有益的。本地服务器或 ISP DNS 解析器可以缓存顶级域服务器或权威服务器的 IP 地址,并避免请求根级服务器。

DNS是一个分布式系统

虽然 DNS 层次结构促进了我们今天所知道的分布式互联网,但它本身也是一个分布式系统。 DNS 的分布式特性具有以下优势:

  1. 它避免成为单点故障(SPOF)。
  2. 它实现了低查询延迟,使用户可以从附近的服务器获得响应。
  3. 在维护和更新或升级过程中,它具有更高的灵活性。例如,如果一个 DNS 服务器宕机或负载过重,另一个 DNS 服务器可以响应用户查询。

高扩展性

由于其分层性质,DNS 是一个高度可扩展的系统。大约有 1,000 个复制的 13 个根级服务器实例分布在全球各地,以策略性地处理用户查询。工作任务分配给 TLD 和根服务器来处理查询,最终由组织自己管理的权威服务器来使整个系统运作。如上所示的 DNS 层次树,不同的服务处理树的不同部分,实现了系统的可扩展性和可管理性。

可靠性

DNS 成为可靠系统的三个主要原因:

  1. 缓存:缓存是在浏览器、操作系统和本地名称服务器中进行的,ISP DNS 解析器也维护着经常访问服务的丰富缓存。即使一些 DNS 服务器暂时宕机,缓存记录也可以被提供,使 DNS 成为一个可靠的系统。
  2. 服务器复制:DNS 在全球范围内系统地复制了每个逻辑服务器的副本,以在低延迟下满足用户请求。冗余服务器提高了整个系统的可靠性。
  3. 协议:尽管许多客户端依赖不可靠的用户数据报协议(UDP)来请求和接收 DNS 响应,但重要的是要认识到 UDP 也提供了独特的优势。它速度更快,因此提高了 DNS 性能。此外,自其创立以来,互联网服务的可靠性已经提高,因此通常更喜欢 UDP 而不是 TCP。如果之前没有响应,DNS 查询通常会在传输层重新传输。因此,请求-响应可能需要额外的往返,这与 TCP 相比提供了更短的延迟,TCP 在数据交换之前每次都需要进行三次握手。

一致性

DNS 使用各种协议在层次结构中的复制服务器之间更新和传输信息。DNS 为了实现高性能而妥协于强一致性,因为与写入相比,数据经常从 DNS 数据库中读取。然而,DNS 提供最终一致性,并懒惰地在复制服务器上更新记录。通常,更新 DNS 服务器上的记录需要从几秒钟到三天不等的时间。在互联网上传播信息的时间取决于 DNS 基础设施、更新的大小以及正在更新的 DNS 树的哪个部分。

一致性也可能因缓存而受到影响。由于权威服务器位于组织内部,可能会在组织服务器故障时更新某些资源记录。因此,默认/本地和 ISP 服务器上的缓存记录可能已过时。为了减轻这个问题,每个缓存记录都有一个称为生存时间(TTL)的过期时间。

相关推荐
zyk_5206 分钟前
前端渲染pdf文件解决方案-pdf.js
前端·javascript·pdf
是发财不是旺财12 分钟前
跟着deepseek学golang--认识golang
开发语言·后端·golang
我的golang之路果然有问题12 分钟前
快速上手GO的net/http包,个人学习笔记
笔记·后端·学习·http·golang·go·net
Apifox.13 分钟前
Apifox 4月更新|Apifox在线文档支持LLMs.txt、评论支持使用@提及成员、支持为团队配置「IP 允许访问名单」
前端·人工智能·后端·ai·ai编程
划水不带桨20 分钟前
大数据去重
前端
沉迷...25 分钟前
手动实现legend 与 echarts图交互 通过js事件实现图标某项的高亮 显示与隐藏
前端·javascript·echarts
可观测性用观测云40 分钟前
观测云数据在Grafana展示的最佳实践
前端
BXCQ_xuan1 小时前
基于Node.js的健身会员管理系统的后端开发实践
后端·mysql·node.js
uwvwko1 小时前
ctfhow——web入门214~218(时间盲注开始)
前端·数据库·mysql·ctf
Json____1 小时前
使用vue2开发一个医疗预约挂号平台-前端静态网站项目练习
前端·vue2·网站模板·静态网站·项目练习·挂号系统