DNS 是什么?网域名称系统介绍– 系统设计06

system-design-系统设计06-系统设计元件-what-is-dns-hogantech-hoganblab

DNS 的起源

首先我们先使用手机来做举例,其中每个联络人都有一个唯一的手机号码。如果今天我们需要打电话给朋友,我们可以单纯输入电话号码,拨通电话。然而,随着联络人数量的增加,我们不太可能记住所有的电话号码,因此我们会将通讯录处存在手机里,当我们需要拨通电话时,我们只需要找到对应的联络人资讯,就可以拨通电话。

那么,在资讯领域,电脑则是由IP 位址来当作联络用的号码,例如:140.112.0.0 就是一个IP 位址。我们可以使用IP 位址来存取电脑上托管的网站。不过,如同前面举例的,人类不方便辨识出这么多由数字构成的IP 位址,因此我们有了网域名称。例如:google.com 是一个Google 的网站,他对应的IP 为142.250.191.78 。我们也需要一个类似通讯录的地方,来将IP 位址以及网域名称做纪录。

什么是DNS?

网域名称系统(DNS) 是网际网路命名服务(Domain Name System),此DNS 系统会将可以阅读的网域名称对应到机器可读的IP 位址,例如:google.com 对应的IP为142.250.191.78 。当使用者在浏览器中输入网域名称时,浏览器必须透过DNS 将网域名称转换为IP 位址。一旦获得所需的IP 位址,使用者的请求就会转送到目标伺服器。

DNS需要知道的名词

名称伺服器(Name Server)

其实DNS 不是单一伺服器,而是大量伺服器构成的Block,其中回应使用者查询的DNS 伺服器称为名称伺服器。

资源记录(Resource Record)

DNS 资料库会以资源记录(Resource Record) 的形式储存网域名称到IP 位址的对应。 RR 是使用者从名称伺服器请求的最小资讯单元,并且资源纪录有不同类型。这边提供以下几种不同的资源纪录来提供读者做参考。

system-design-06-table

缓存(Caching

DNS 使用不同层的快取,来减少使用者的请求延迟。快取在减轻DNS 负担方面发挥着重要功能,因为它必须满足整个全球网际网路的查询。

层次结构(Hierarchy)

DNS 名称伺服器采用层次结构形式。由于其规模和查询负载不断增加,分层结构使DNS 具有高度可扩展性。

DNS 如何运作?

AWS 图示与描述

首先提供 AWS 图示以及原文描述,接下来会分别针对一些专有名词做讲解。

system-design-06-what-is-dns
  1. 使用者开启Web 浏览器,在网址列中输入 www.example.com,然后按Enter 键。
  2. www.example.com 的请求将路由到DNS 解析器,该解析器通常由使用者的Internet 服务供应商(ISP) 管理,例如有线Internet 供应商、DSL 宽频供应商或公司网路。
  3. ISP 的DNS 解析器将对 www.example.com 的请求转送至DNS 根名称伺服器。
  4. ISP 的DNS 解析器再次转送 www.example.com 的请求,这次转送至.com 网域的TLD 名称伺服器之一。 .com 网域的名称伺服器使用与 example.com 网域关联的四个Amazon Route 53 名称伺服器的名称来回应请求。
  5. ISP 的DNS 解析器选择Amazon Route 53 名称伺服器,并将 www.example.com 的请求转送到该名称伺服器。
  6. Amazon Route 53 名称伺服器在 example.com 托管区域中寻找 www.example.com 记录,取得关联值(例如Web 伺服器的IP 位址192.0.2.44),并将IP 位址传回给DNS解析器。
  7. ISP 的DNS 解析器最终获得使用者所需的IP 位址。解析器将该值传回给Web 浏览器。 DNS 解析器也会将 example.com 的IP 位址快取(储存)一段您指定的时间,以便下次有人浏览 example.com 时它可以更快地回应。有关详细信息,请参阅生存时间(TTL)。
  8. Web 浏览器向从DNS 解析器取得的IP 位址发送对 www.example.com 的请求。例如,您的内容就是在Amazon EC2 执行个体上执行的Web 伺服器或配置为网站终端节点的Amazon S3 储存桶。
  9. 位于192.0.2.44 的Web 伺服器或其他资源将 www.example.com 的网页传回给Web 浏览器,并且Web 浏览器显示该页面。

DNS层次结构(Hierarchy)

如前面所描述,DNS 不是接受请求并回应使用者查询的单一伺服器,而是由非常多伺服器结合而成,大型的系统,具有不同层次结构的名称伺服器。

DNS Hierarchy 四种伺服器

DNS 解析器(Resolver)

解析器用来将查询的字串变成一个查询序列,请求转送至其他DNS 名称伺服器。正常情况下,DNS 解析器本身就存在于用户的网路。

根级名称伺服器(Root-level Name Server)

这些伺服器接收来自本机伺服器的请求。根名称伺服器维护基于顶级网域的名称伺服器,例如.com、.edu、.us 等。例如,当使用者要求 educative.io 的IP 位址时,根级名称伺服器将传回保存.io 网域的IP 位址的顶级网域(TLD) 伺服器清单。

顶级网域名称伺服器(Top-level Domain Server)

这些伺服器保存权威名称伺服器的IP 位址。查询方将获得属于该组织的权威伺服器的IP 位址清单。

权威名称伺服器(Authoritative Name Server

这些是一些大公司的DNS 名称伺服器,提供网路或应用程式伺服器的IP 位址。

迭代与递归查询

有两种方法可以执行DNS 查询,这边也附上CloudFlare 的DNS 简化流程图,仔细看也可以发现是与AWS 的图很相像的。

迭代查询

本机伺服器向根伺服器(Root server)、顶级网域名称伺服器(TLD) 和权威伺服器(Authoritative Name Server)请求IP 位址。

递归查询

最终用户请求本地伺服器。本机伺服器进一步请求根级名称伺服器(Root-level Name Server)。根级名称伺服器(Root-level Name Server)将请求转送到其他名称伺服器。

system-design-06-how-dns-work

缓存

什么是快取呢?快取是指经常请求的资料,将它们储存在某一个地方,需要的时候可以快速取得。

在DNS 里面,也是会有快取的!快取可以大幅减少用户的回应时间并减少网路流量,当我们在不同的层次结构中使用快取时,它也可以减轻DNS 基础架构的大量查询负担。快取亦可以在浏览器、作业系统、使用者网路内的本机名称伺服器或ISP 的DNS 解析器中看到。

DNS 之于分散式系统

之前的文章介绍了分散式系统的概念,也介绍一个好的软体系统应该要有哪些特性。那们让我们来聊聊,DNS 中与抽象、特性、需求有关的部分吧。

其实DNS本身就是一个分散式系统,并且这些分散式特性具有以下优点:

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

这边也讲解DNS 如何提升扩展性(Scalability)、可靠性(Reliability)和一致性(Consistency)。

扩展性(Scalability)

DNS 是一个高度可扩展的系统。根据 Cloudflare 的文章,目前全球有13 台根级名称伺服器(Root-level Name Server) ,并且另外根据这些根伺服器而复制出来的实例,分布在世界各地,用来处理使用者查询。这些请求被分配到TLD 和根伺服器来处理查询,最后分配到由大公司自行管理的权威伺服器以使整个系统正常运作。

可靠性(Reliability)

缓存

快取是在浏览器、作业系统和本机名称伺服器中完成的,ISP DNS 解析器也维护着经常存取的服务的丰富快取。即使某些DNS 伺服器暂时关闭,也可以提供快取记录,使DNS 成为可靠的系统。

伺服器复制

DNS 系统性地,复制了遍布全球的每个副本伺服器,用来降低延迟处理用户请求,并且提高了整个系统的可靠性。

持续性(Consistency)

DNS 使用各种协定在层次结构中的复制伺服器之间更新和传输资讯。 DNS 则在一致性方面做出妥协以实现高效能。因为与写入相比,从DNS 的资料库读取资料的频率更高。不过,DNS 提供最终一致性并延迟更新复制伺服器上的记录。

由于前面提到的快取机制,一致性也会受到影响。由于权威伺服器位于组织内,因此在组织中的伺服器发生故障的情况下,权威伺服器上的某些资源记录可能会被更新。因此,预设/本地和ISP 伺服器上的快取记录可能会过时。为了缓解此问题,每个快取记录都带有一个称为生存时间(TTL) 的过期时间。

后记

这一篇距离上一篇 系统设计元件介绍Building Block – 系统设计05 隔了一段时间,主要是因为花了比较多的时间了解DNS 的原理,并且也认为DNS 不管是在面试、日常工作都是需要知道的一个必备知识,因此花了不少篇幅,深度讲解了DNS 。

未来如果是范围比较大的主题,也会依然花不少篇幅去做讲解,谢谢阅读!

引用

DNS Design: Scalability, Performance, Robustness

Cloudflare: What is a DNS root server?

AWS: What is DNS?

IBM: What is the DNS protocol?

相关文章

系统设计元件介绍Building Block – 系统设计05

Back-of-the-envelope 封底计算– 系统设计04

软体设计非功能性特性– 系统设计03

抽象在系统设计中的应用– 系统设计02

现代系统设计入门 - 系统设计 01

zh_CN简体中文