学习笔记之DNS系列1——DNS是什么及其工作原理

IT知识
405
0
0
2022-09-30
标签   DNS
编辑器不太对劲,正确格式请见这里

What is DNS? | How DNS works

DNS允许用户使用域名而不是IP地址来连接网站。来学习DNS的工作原理吧。

What is DNS?

域名系统(DNS)是Internet上的电话簿。人们通过域名在线获取信息,比如nytimes.com或espn.com。Web浏览器通过Internet Protocol (IP)地址进行交互。DNS将域名转换为IP地址,以便浏览器加载Internet资源。

每个连接到Internet的设备都有一个唯一的IP地址,其他机器可以通过这个IP地址找到该设备。DNS服务器使得人们不再需要记忆IP地址,如192.168.1.1 (IPv4),或更复杂的较新的字母数字IP地址,如 2400

2048


d7a2 (IPv6)

DNS

How does DNS work?

DNS解析的过程包括将主机名(如www.example.com)转换为计算机友好的IP地址(如192.168.1.1)。互联网上的每个设备都有一个IP地址,而这个地址是找到合适的互联网设备所必需的——就像街道地址被用来找到一个特定的家庭一样。当用户想要加载网页时,必须在用户输入到浏览器的内容(example.com)和定位example.com网页所需的机器友好地址之间进行转换。

输入域名转换为IP

为了理解DNS解析背后的过程,了解DNS查询必须通过的不同硬件组件是很重要的。对于web浏览器,DNS查找发生在“幕后”,除了最初的请求外,不需要与用户电脑的其它交互。

There are 4 DNS servers involved in loading a webpage:

  • DNS递归器——递归器可以被看作是一个图书管理员,他被要求在图书馆的某个地方找到一本书。DNS递归器是一种服务器,旨在接收客户机通过应用程序(如web浏览器)而发来的查询。然后递归器通常负责发出(向其它服务器的)额外的请求,以满足客户端的DNS查询。
  • 根服务器根服务器是将人类可读的主机名转换成IP地址的第一步。它可以被看作是图书馆中指向不同书架的索引——通常它作为对其他更具体位置的引用。
  • TLD 名称服务器 - 顶级域服务器(TLD)可以看作是图书馆中的一个特定的书架。这个名称服务器是搜索特定IP地址的下一步,它托管主机名的最后一部分(在example.com中,TLD服务器是”com”)
  • 权威的名称服务器 - 这个最终的名称服务器可以看作是书架上的一本字典,其中特定的名称可以被翻译为其定义。权威的名称服务器是名称服务器查询的最后一站。如果权威的名称服务器有被请求的记录,它将把被请求主机名的IP地址返回给发出最初请求的DNS递归器(图书管理员)。
authoritative: 权威的。authorized: 授权的。

What’s the difference between an authoritative DNS server and a recursive DNS resolver?

这两个概念都指的是服务器(服务器组),它们是DNS基础设施不可或缺的一部分,但各自执行不同的角色,并位于DNS查询管道中的不同位置。考虑两者区别的一种方法是,递归解析器在DNS查询的开头,权威名称服务器在结尾。

Recursive DNS resolver

递归解析器是响应来自客户端的递归请求并花费时间跟踪DNS记录的计算机。它通过发出一系列请求,直到它到达被请求记录的权威DNS域名服务器(如果没有找到记录,就会超时或返回一个错误)。幸运的是,递归DNS解析器并不总是需要发出多个请求来跟踪响应客户端所需的记录;缓存是一个数据持久化过程,它通过提供早些时候的DNS查询所请求的资源记录来帮助简化必要的请求。

How DNS works - the 10 steps in a DNS query

Authoritative DNS server

简单地说,权威性DNS服务器是实际持有并负责DNS资源记录的服务器。这是位于DNS查询链底部的服务器,它将响应所查询的资源记录,最终允许web浏览器发出请求,以到达访问网站或其他web资源所需的IP地址。一个权威的域名服务器可以用自己的数据而不需要查询其他来源来满足查询,因为它是某些DNS记录的最终来源。

DNS query diagram

值得注意的是,在查询子域(如foo.example.com或blog.cloudflare.com)的情况下,一个额外的域名服务器将被添加到权威的域名服务器之后的序列中,这个被添加的服务器负责存储子域的CNAME记录

DNS query diagram

许多DNS服务与Cloudflare提供的DNS服务之间有一个关键的区别。不同的DNS递归解析器(如谷歌DNS、OpenDNS和Comcast等提供商)都维护DNS递归解析器的数据中心installations。这些解析器允许通过DNS优化计算机系统的优化集群来快速和简单的查询,但它们与Cloudflare托管的域名服务器有本质上的不同。

installation: 机房,设备处

Cloudflare维护着基础设施级别的名称服务器,这些服务器是互联网功能不可或缺的一部分。一个关键的例子是f-root服务器网络,Cloudflare部分负责托管。F-root是根级DNS名称服务器基础设施组件之一,负责每天数十亿次的Internet请求。我们的Anycast网络使我们处于一个独特的位置,可以在不中断服务的情况下处理大量DNS流量。

What are the steps in a DNS lookup?

对于大多数情况,DNS关注的是将域名转换为适当的IP地址。为了解这个过程的原理,跟踪DNS查找的路径(因为它从web浏览器,通过DNS查找过程,然后再回来)是有帮助的。让我们看看这些步骤。

注意:通常DNS查找信息将被缓存到查询计算机的本地或远程DNS基础设施中。DNS查找通常有8个步骤。当DNS信息被缓存时,DNS查找过程中的步骤会被跳过,这使得它更快。下面的示例概括了没有缓存的情况下的所有8个步骤。

The 8 steps in a DNS lookup:

  1. 用户在web浏览器中输入example.com,查询传入Internet,并由DNS递归解析器接收。
  2. 然后,解析器查询一个DNS根命名服务器(.)
  3. 然后,根服务器使用顶级域 (TLD) DNS 服务器(例如 .com 或 .net)的地址响应解析器,该服务器存储其域的信息。在搜索 example.com 时,我们的请求指向 .com TLD。
  4. 然后,解析器向 .com TLD 发出请求。
  5. 然后,TLD 服务器使用域名称服务器 example.com 的 IP 地址进行响应。
  6. 最后,递归解析器向域的名称服务器发送查询。
  7. 然后,example.com 的 IP 地址从名称服务器返回到解析器。
  8. 然后,DNS 解析器使用最初请求域的 IP 地址响应 Web 浏览器。
一旦DNS查找的这8步返回了example.com的IP地址,浏览器就可以对web页面发出请求:
  1. 浏览器向该IP地址发出HTTP请求。
  2. 该IP上的服务器返回要在浏览器中呈现的网页(步骤10)

DNS query diagram

What is a DNS resolver?

DNS解析器是DNS查找的第一站,它负责处理发出初始请求的客户端。解析器启动一系列查询,最终将URL转换为必要的IP地址。

注意:一个典型的非缓存DNS查找将涉及递归和迭代查询。

区分递归DNS查询和递归DNS解析器是很重要的。查询指的是向需要解析该查询的DNS解析器提出的请求。DNS递归解析器是接受递归查询并通过发出必要的请求来处理响应的计算机。

DNS query diagram

What are the types of DNS queries?

在典型的DNS查找中,会出现三种类型的查询。通过使用这些查询的组合,DNS解析的优化过程可以减少查询的距离。在理想的情况下,缓存的记录数据将可用,从而允许DNS名称服务器返回一个非递归查询。

3 types of DNS queries:

  1. 递归查询——在递归查询中,DNS客户端要求DNS服务器(通常是DNS递归解析器)响应客户端请求的资源记录,或者如果解析器找不到记录,则返回错误消息。
  2. 迭代查询——在这种情况下,DNS客户端将允许DNS服务器返回它能返回的最佳答案。如果查询的DNS服务器与查询名称不匹配,它将返回一个权威的指向下级域名空间的DNS服务器的引用。然后,DNS客户端将对这个引用地址进行查询。这个过程在查询链中继续,直到出现错误或超时。
  3. 非递归查询——这通常发生在当DNS解析器客户端向DNS服务器查询一条它可以访问的记录时,要么因为DNS服务器具有权威性,要么因为该记录存在于其缓存中。通常,DNS服务器会缓存DNS记录,以防止额外的带宽消耗和上游服务器负载。

What is DNS caching? Where does DNS caching occur?

缓存的目的是在某个位置临时存储数据,从而提高数据请求的性能和可靠性。DNS缓存是将数据存储在离请求客户端更近的地方,这样DNS查询可以更早地被解析,并且可以避免在DNS查找链中进一步的额外查询,从而改进负载时间并减少带宽/CPU消耗。DNS数据可以缓存到不同的位置,每个位置都将存储DNS记录一段时间(由生存时间(time-to-live, TTL)决定)。

Browser DNS caching

现代的web浏览器默认设计为缓存DNS记录一段时间。这里的目的很明显;DNS缓存越靠近浏览器,为了检查缓存并向IP地址发出正确的请求所需的处理步骤就越少。当对DNS记录发出请求时,浏览器缓存是为请求记录检查的第一个位置。

在Chrome中,你可以在 chrome://net-internals/#dns. 看到你的DNS缓存的状态。

Operating system (OS) level DNS caching

操作系统级DNS解析器是DNS查询离开您的计算机之前的第二个也是最后一个本地驻点。操作系统中设计用来处理此查询的进程通常称为存根解析器或DNS客户端。当存根解析器从应用程序获得请求时,它首先检查自己的缓存,看看是否有该记录。如果没有,它就发送一个DNS查询(带有递归标志)到本地网络外,到Internet服务提供商(ISP)内部的DNS递归解析器。

当ISP内部的递归解析器接收到DNS查询时,就像前面的所有步骤一样,它也会检查所请求的主机到ip地址的转换是否已经存储在其本地持久层中。

根据缓存中的记录类型,递归解析器还具有其他功能:

  1. 如果解析器没有A记录,但有权威域名服务器的NS记录,它将跳过DNS查询的几个步骤,直接查询那些域名服务器。此快捷方式可防止从根和 .com 名称服务器(在我们搜索 example.com 时)进行查找,并有助于更快地解析 DNS 查询。
  2. 如果解析器没有 NS 记录,它将跳过根服务器,向 TLD 服务器(在我们的例子中为 .com)发送查询。
  3. 在不太可能的情况下,解析器没有指向TLD服务器的记录,这时它将查询根服务器。此事件通常发生在DNS缓存被清除之后。