DNS那些事儿

135 阅读12分钟

引言

从浏览器中输入www.juejin.cn ,按下回车键时,到最终的网页渲染,这个过程发生了哪些事儿?

  1. URL 解析:浏览器首先检查输入的 URL 是否合法,并解析其中的协议(如 http 或 https)、主机名( www.juejin.cn) 和端口号( 默认为 HTTP的80 或HTTPS的 443)。
  2. DNS 解析:浏览器向 DNS 服务器发送请求,将主机名( www.juejin.cn) 转换为对应的 IP 地址。这个过程可能涉及多个 DNS 服务器的查询,直到获取到最终的 IP 地址。
  3. TCP 连接建立:浏览器根据获取到的 IP 地址和端口号,与服务器建立 TCP 连接。如果是 HTTPS 协议,还需要进行 SSL/TLS 握手,以建立加密通信通道。
  4. HTTP 请求:浏览器向服务器发送 HTTP 请求,请求的内容包括请求方法(如 GET)、请求头和请求体等。
  5. 服务器处理请求:服务器接收到请求后,根据请求的内容进行相应的处理,如查询数据库、生成动态页面等。
  6. HTTP 响应:服务器将处理结果封装成 HTTP 响应,发送给浏览器。响应内容包括状态码、响应头和响应体等。
  7. 浏览器解析响应:浏览器接收到服务器的响应后,开始解析响应内容。这可能涉及到多个子请求,如获取 CSS、JavaScript、图片等外部资源。
  8. 页面渲染:浏览器根据解析得到的 HTML、CSS 和 JavaScript 等内容,在屏幕上渲染出最终的页面。这个过程包括构建 DOM 树、应用样式、执行脚本等。
  9. TCP 连接关闭:当页面加载完成后,浏览器与服务器断开 TCP 连接,以释放网络资源。

可以看出,DNS在网页加载的过程中功不可没,那什么是DNS? 它又是怎样将域名和IP进行转换的呢?

什么是 DNS

域名系统 (DNS) 是互联网的电话簿。人们通过例如 nytimes.com 或 espn.com 等域名在线访问信息。Web 浏览器通过 互联网协议 (IP) 地址进行交互。DNS 将域名转换为 IP 地址,以便浏览器能够加载互联网资源。

连接到 Internet 的每个设备都有一个唯一 IP 地址,其他计算机可使用该 IP 地址查找此设备。DNS 服务器使人们无需存储例如 192.168.1.1(IPv4 中)等 IP 地址或更复杂的较新字母数字 IP 地址,例如 2400:cb00:2048:1::c629:d7a2(IPv6 中)。

DNS 服务器

是用于回答 DNS 查询的机器,当发生没有dns缓存的请求时,域名和ip的转换一般会涉及到下面4种服务器。

DNS 解析器

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

在此过程中,递归解析器将缓存从权威性域名服务器收到的信息。当一个客户端请求的域名 IP 地址是另一个客户端最近请求的 IP 地址时,解析器可绕过与域名服务器进行通信的过程,并仅从第二个客户端的缓存中为第一个客户端提供所请求的记录。

大多数 Internet 用户使用他们 ISP (互联网服务提供商,电信、移动)提供的递归解析器,但还有其他可用选择,如:

公共 DNS 解析器wiki

1.1.1.1 Cloudflare

8.8.8.8 google

DNS 根域名服务器

每个递归解析器都知道 13 个 DNS 根域名服务器,它们是递归解析器搜寻 DNS 记录的第一站。根服务器接受包含域名的递归解析器的查询,根域名服务器根据该域的扩展名(.com、.net、.org 等),通过将递归解析器定向到 TLD 域名服务器进行响应。根域名服务器由一家名为 Internet 名称与数字地址分配机构(ICANN)的非营利组织进行监督。

注意,尽管有 13 个根域名服务器,但这并不意味着根域名服务器系统中只有 13 台计算机。一个普遍的误解是,世界上只有 13 台根服务器。实际上根服务器有许多,但只有 13 个 IP 地址用于查询不同的根服务器网络。根域名服务器有 13 种类型,但在世界各地每个类型都有多个副本,它们使用 Anycast 路由来提供快速响应。如果您将根域名服务器的所有实例加在一起,您将有 600 台不同的服务器。

TLD 域名服务器

TLD 域名服务器维护共享通用域扩展名的所有域名的信息,例如 .com、.net 或 url 中最后一个点之后的任何内容。例如,.com TLD 域名服务器包含以“.com”结尾的每个网站的信息。如果用户正在搜索 google.com,则在收到来自根域名服务器的响应后,递归解析器将向 .com TLD 域名服务器发送查询,后者将通过针对该域的权威性域名服务器(见下文)进行响应。

TLD 域名服务器的管理由 Internet 编号分配机构(IANA)加以处理,其为 ICANN 的一个分支机构。IANA 将 TLD 服务器分为两个主要组:

  • 通用顶级域:这些是非特定国家/地区的域,一些最知名的通用 TLD 包括 .com、.org、.net、.edu 和 .gov。
  • 国家/地区代码顶级域:这些包括特定于某个国家/地区或州的任何域。例如,uk、.us、.ru 和 .jp 等。

对于基础设施域实际上存在第三个类别,但该类别几乎从不使用。此类别是为 .arpa 域创建的,该域是在创建新式 DNS 时使用的过渡域;其当今主要是具有历史意义。

权威性域名服务器

当递归解析器收到来自 TLD 域名服务器的响应时,该响应会将解析器定向到权威性域名服务器。权威性域名服务器通常是解析器查找 IP 地址过程中的最后一步。权威名称服务器包含特定于其服务域名的信息(例如,google.com)权威性域名服务器包含特定于其所服务的域名的信息(例如 google.com),并且它可为递归解析器提供在 DNS A 记录中找到的服务器的 IP 地址,或者如果该域具有 CNAME 记录(别名),它将为递归解析器提供一个别名域,这时递归解析器将必须执行全新 DNS 查找,以便从权威性域名服务器获取记录(通常为包含 IP 地址的 A 记录)。Cloudflare DNS 分发权威性域名服务器,这些域名服务器带有 Anycast 路由,可使其变得更可靠。

DNS 查找有哪些步骤

大多数情况下,DNS 与正被转换为相应 IP 地址的域名有关。要了解此过程的工作方式,在 DNS 查找从 Web 浏览器经过 DNS 查找过程然后再返回时,跟踪 DNS 查找的路径会有所帮助。我们来看一下这些步骤。

注意:通常,DNS 查找信息将本地缓存在查询计算机内,或者远程缓存在 DNS 基础设施内。DNS 查找通常有 8 个步骤。缓存 DNS 信息时,将从 DNS 查找过程中跳过一些步骤,从而使该过程更快。以下示例概述了不缓存任何内容时的所有 10个步骤。

  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 浏览器。
  9. DNS 查找的这 8 个步骤返回 example.com 的 IP 地址后,浏览器便能发出对该网页的请求:
  10. 位于该 IP 的服务器返回将在浏览器中呈现的网页(第 10 步)

image.png

域名的树状结构

  1. 根域名

    1.   所有域名都是以根域名作为起点的,用. 表示,放在域名的结尾。因为这部分对于所有域名都是相同的,所以就省略不写了。在任何一个域名结尾加一个点,浏览器都可以正常解读。例如:www.baidu.com.
  2. 顶级域名

    1.   根域名的下一级是顶级域名,常见的有:通用顶级域名( .com 、 .net )、国家和地区顶级域名(.cn)。
  3. 子域名

    1.   子域名将顶级域名进一步细分。域名层次结构中,顶级域名下面是二级域名,它位于顶级域名的左侧。例如,在zh.wikipedia.org中,wikipedia是二级域名。w3.org中,w3也是二级域名,与前例中的wikipedia属于一个层面。
    2.   二级域名下面是三级域名,它位于二级域名的左侧。例如,在zh.wikipedia.org中,zh是三级域名;zh-classical.wikipedia.org中,zh-classical也是三级域名,与前例中的zh属于一个层面。从右侧到左侧,隔一个点依次下降一层(有几个.,通常就叫做几级域名)。

DNS缓存

缓存的目的是将数据临时存储在某个位置,从而提高数据请求的性能和可靠性。DNS 高速缓存涉及将数据存储在更靠近请求客户端的位置,以便能够更早地解析 DNS 查询,并且能够避免在 DNS 查找链中进一步向下的额外查询,从而缩短加载时间并减少带宽/CPU 消耗。DNS 数据可缓存到各种不同的位置上,每个位置均将存储 DNS 记录并保存由生存时间(TTL)决定的一段时间。

浏览器 DNS 缓存

现代 Web 浏览器设计为默认将 DNS 记录缓存一段时间。目的很明显;越靠近 Web 浏览器进行 DNS 缓存,为检查缓存并向 IP 地址发出正确请求而必须采取的处理步骤就越少。发出对 DNS 记录的请求时,浏览器缓存是针对所请求的记录而检查的第一个位置。

在 Chrome 浏览器中,您可以转到 chrome://net-internals/#dns 查看 DNS 缓存的状态。

操作系统(OS)级 DNS 缓存

操作系统级 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 高速缓存后发生。

可能引起的DNS问题

客户端向本地DNS服务器发出DNS查询请求时,通常使用UDP协议,默认端口号为53。由于UDP是无连接不可靠的传输协议,DNS查询和响应报文在网络传输过程中可能会丢失、重复或失序。所以可能会造成DNS 泄漏、DNS 劫持等问题。

  1. DNS劫持

    DNS劫持则是指攻击者通过某种方式篡改DNS服务器的响应,使得客户端在请求某个域名时,解析到了攻击者指定的IP地址,而不是真正的目标服务器地址。DNS劫持的目的通常是为了实现钓鱼攻击、广告劫持等。

  2. DNS泄露

    1. DNS泄露(DNS Leak)是指在使用VPN、代理等隐私保护工具时,设备的DNS查询请求意外地绕过了保护机制,暴露给了未加密的网络,导致用户的上网隐私和安全受到威胁。

    2. 通常情况下,当用户连接VPN时,所有的网络流量(包括DNS查询)都应该通过加密隧道传输,由VPN服务器代为请求和转发。但如果设备的DNS设置存在问题,或VPN软件本身有缺陷,就可能导致DNS查询请求直接发送到ISP的DNS服务器或其他第三方DNS服务器,绕过了VPN的保护。

    3. [DNS泄漏检测网站] (surfshark.com/zh/dns-leak…)