《系统设计》课程学习笔记—域名系统(DNS)

329 阅读8分钟

前面,我们了解了使每台机器能够与其他机器连接的IP地址。但正如我们所知,人类更喜欢名字而不是数字。像 google.com 这样的名字更容易记住,而不是像 122.250.192.232 这样的东西。

这将我们带到域名系统(DNS),它是一个分层和分散的命名系统,用于将人类可读的域名转换为IP地址。

DNS如何工作

how-dns-works.webp

DNS查找包括以下八个步骤:

  1. 客户端将 example.com 传入 Web 浏览器,查询将传送到互联网并由DNS解析器接收。

  2. 然后,解析器递归地查询DNS根名称服务器。

  3. 根服务器用顶级域(TLD)的地址响应解析器。

  4. 然后,解析器向 .com TLD发出请求。

  5. TLD服务器然后用 example.com 域的名称服务器的IP地址进行响应。

  6. 最后,递归解析器向域的名称服务器发送查询。

  7. example.com 的 IP 地址然后从名称服务器返回到解析器。

  8. DNS解析器然后使用最初请求的域的IP地址响应 Web 浏览器。

解析IP地址后,客户端应能够从解析的IP地址请求内容。例如,解析的IP可以返回要在浏览器中显示的网页。

服务器类型

现在,让我们看看构成 DNS 基础结构的四个关键服务器组。

DNS 解析器

DNS解析器(也称为DNS递归解析器)是DNS查询中的第一站。递归解析器充当客户端和DNS名称服务器之间的中间人。在从 Web 客户端接收到DNS查询后,递归解析器将使用缓存数据进行响应,或者向根名称服务器发送请求,然后向TLD名称服务器发送另一个请求,然后再向权威名称服务器发送最后一个请求。在从权威名称服务器接收到包含所请求IP地址的响应后,递归解析器将向客户端发送响应。

DNS根服务器

根服务器接受包含域名的递归解析器的查询,根名称服务器根据该域的扩展名(.com.net.org等),通过将递归解析器指向TLD名称服务器来响应。根名称服务器由一个名为互联网名称与数字地址分配机构(ICANN)的非营利组织监管。

每个递归解析器都知道13个DNS根名称服务器。请注意,虽然有13个根名称服务器,但这并不意味着根名称服务器系统中只有13台机器。根名称服务器有13种类型,但在世界各地都有多个副本,它们使用选播路由来提供快速响应。

TLD名称服务器

TLD名称服务器维护共享公共域扩展名的所有域名的信息,例如.com.net 或 URL 中最后一个点之后的任何名称。

TLD名称服务器的管理由互联网编号分配机构(IANA)负责,IANA是ICANN的一个分支。IANA将TLD服务器分为两个主要组:

  • 通用顶级域:这些是像.com.org.net.edu.gov 这样的域。

  • 国家代码顶级域:这些域包括特定于国家或州的任何域。示例包括.uk.us.ru.jp

权威DNS服务器

权威名称服务器通常是IP地址解析程序的最后一步。权威名称服务器包含特定于其服务的域名(例如 google.com)的信息,并且它可以向递归解析器提供DNS A记录中找到的该服务器的IP地址,或者如果该域具有 CNAME 记录(别名),它将向递归解析器提供别名域,此时,递归解析器必须执行全新的DNS查找,以从权威名称服务器获取记录(通常是包含IP地址的 A 记录)。如果找不到域,则返回 NXDOMAIN 消息。

查询类型

DNS系统中有三种类型的查询:

递归

在递归查询中,DNS客户端要求DNS服务器(通常是DNS递归解析器)使用请求的资源记录或错误消息(如果解析器找不到记录)响应客户端。

迭代

在迭代查询中,DNS客户端提供主机名,DNS解析程序返回其可能的最佳答案。如果DNS解析器在其缓存中有相关的DNS记录,则会返回这些记录。如果不是,它将DNS客户端指向根服务器或离所需DNS区域最近的另一个权威名称服务器。然后,DNS客户端必须直接对其引用的DNS服务器重复查询。

非递归

非递归查询是DNS解析器已经知道答案的查询。它要么立即返回DNS记录,因为它已经将其存储在本地缓存中,要么查询对该记录具有权威性的DNS名称服务器,这意味着它肯定拥有该主机名的正确IP。在这两种情况下,都不需要额外的查询(如递归或迭代查询)。响应会立即返回给客户端。

记录类型

DNS记录(又名区域文件)是存在于权威DNS服务器中的指令,其中提供有关域的信息,包括与该域关联的IP地址以及如何处理该域的请求。

这些记录由一系列以DNS语法编写的文本文件组成。DNS语法只是一个字符串,用作命令,告诉DNS服务器要做什么。所有DNS记录都有一个“TTL”,表示生存时间,并指明 DNS 服务器刷新该记录的频率。

记录类型很多,让我们看看一些最常用的记录类型:

  • A(地址记录):这是保存域IP地址的记录。

  • AAAA(IPv6 地址记录):包含域的IPv6地址的记录(A记录存储IPv4地址)。

  • CNAME(规范名称记录):将一个域或子域转发到另一个域,不提供IP地址。

  • MX(邮件交换记录):将邮件定向到电子邮件服务器。

  • TXT(文本记录):此记录允许管理员在记录中存储文本注释。这些记录通常用于电子邮件安全。

  • NS(名称服务器记录):存储DNS条目的名称服务器。

  • SOA(起始授权机构记录):存储关于域的管理信息。

  • SRV(服务定位记录):指定特定服务的端口。

  • PTR(反向查找指针记录):在反向查找中提供域名。

  • CERT(证书记录):存储公钥证书。

子域

子域是主域名的附加部分。它通常用于在逻辑上将网站分成多个部分。我们可以在主域上创建多个子域。

例如 blog.example.com,其中 blog 是子域,example 是主域,.com 是顶级域(TLD)。类似的包括 support.example.comcareers.example.com

DNS区域

DNS区域是域命名空间的一个独特部分,它被委托给负责维护DNS区域的个人、组织或公司等法律实体。DNS区域也是一种管理功能,允许对DNS组件(如权威名称服务器)进行粒度控制。

DNS缓存

DNS缓存(有时称为DNS解析器缓存)是一个由计算机操作系统维护的临时数据库,包含所有最近访问和尝试访问网站和其他互联网域的记录。换句话说,DNS缓存只是最近DNS查找的内存,当我们的计算机试图找出如何加载网站时,它可以快速引用。

域名系统在每个DNS记录上实现生存时间(TTL)。TTL指定DNS客户端或服务器可以缓存记录的秒数。当记录存储在缓存中时,它附带的任何TTL值也会被存储。服务器持续按秒倒计时更新缓存中存储的记录的TTL。当它达到零时,记录将从缓存中清除。此时,如果接收到对该记录的查询,DNS服务器必须启动解析过程。

反向 DNS

反向DNS查找是对与给定IP地址关联的域名的DNS查询。这与常用的正向DNS查找相反,在正向DNS查询中,查询DNS系统以返回IP地址。反向解析IP地址的过程使用 PTR 记录。如果服务器没有 PTR 记录,则无法解析反向查找。

反向查找通常由电子邮件服务器使用。电子邮件服务器在将电子邮件发送到其网络之前检查并查看其是否来自有效的服务器。许多电子邮件服务器拒绝来自不支持反向查找的服务器邮件或来自不合法的服务器的邮件。

注意:反向DNS查找不是普遍采用的,因为它们在互联网中并不重要。

例子

以下是一些广泛使用的托管DNS解决方案: