计算机网络 02:应用层(3)

123 阅读12分钟

DNS

什么是 DNS

DNS 出现及演化

网络出现的早期 是使用 IP 地址通讯的,那时就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX 上就出现了建立一个叫做 hosts 的文件 (Linux 和 Windows 也继承保留了这个文件)。这个文件中记录这主机名称和 IP 地址的对应表。这样只要输入主机名称,系统就会去加载 hosts 文件并查找对应关系,找到对应的 IP,就可以访问这个 IP 的主机了。

但是后来主机太多了,无法保证所有人都能拿到统一的最新的 hosts 文件,就出现了在文件服务器上集中存放 hosts 文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪负重,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时 DNS 系统出现了,随着解析规模的继续扩大,DNS 系统也在不断的演化,直到现今的多层架构体系。

DNS 概括

DNS(Domain Name System,域名系统),因特网上作为域名和 IP 地址互相映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。通过主机名,最终得到该主机对应的 IP 地址的过程叫做域名解析(或主机名解析)。DNS 协议运行在 UDP 协议之上,使用端口号 53。

DNS 的分布数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space),如下图所示树的最大深度不得超过 127 层,树中每个节点都有一个可以长达 63 个字符的文本标号。

DNS 的作用

  • 正向解析:根据主机名称(域名)查找对应的 IP 地址
  • 反向解析:根据 IP 地址查找对应的主机域名

DNS 系统的分布式数据结构:

v2-1455270ae0d753856037a9e432a8f79b_b.jpg

DNS 相关服务器及实现

什么是 DNS-DNS 如何工作-权威性 DNS 服务器 | Cloudflare 中国官网 | Cloudflare

加载网页涉及 4 个 DNS 服务器

  • DNS 解析器:该解析器可被视为被要求去图书馆的某个地方查找特定图书的图书馆员。DNS 解析器是一种服务器,旨在通过 Web 浏览器等应用程序接收客户端计算机的查询。然后,解析器一般负责发出其他请求,以便满足客户端的 DNS 查询。
  • 根域名服务器:根域名服务器是将人类可读的主机名转换(解析)为 IP 地址的第一步。可将其视为指向不同书架的图书馆中的索引 - 一般其作为对其他更具体位置的引用。
  • TLD 名称服务器:顶级域名服务器(TLD,Top-level domain)可看做是图书馆中一个特殊的书架。这个域名服务器是搜索特定 IP 地址的下一步,其上托管了主机名的最后一部分(例如,在 example.com 中,TLD 服务器为 “com”)。
  • 权威性域名服务器:可将这个最终域名服务器视为书架上的字典,其中特定名称可被转换成其定义。权威性域名服务器是域名服务器查询中的最后一站。如果权威性域名服务器能够访问请求的记录,则其会将已请求主机名的 IP 地址返回到发出初始请求的 DNS 解析器(图书管理员)。

权威性 DNS 服务器与递归 DNS 解析器之间的区别是什么?

这两个概念都是指 DNS 基础设施不可或缺的服务器(服务器组),但各自担当不同的角色,并且位于 DNS 查询管道内的不同位置。考虑二者差异的一种方式是,递归解析器位于 DNS 查询的开头,而权威性域名服务器位于末尾。

递归 DNS 解析器

递归解析器是一种计算机,其响应来自客户端的递归请求并花时间追踪 DNS 记录。为执行此操作,其发出一系列请求,直至到达用于所请求的记录的权威性 DNS 域名服务器为止(或者超时,或者如果未找到记录,则返回错误)。幸运的是,递归 DNS 解析器并不总是需要发出多个请求才能追踪响应客户端所需的记录;缓存是一种数据持久性过程,可通过在 DNS 查找中更早地服务于所请求的资源记录来为所需的请求提供捷径。

dns_record_request_sequence_recursive_resolver.png

权威性 DNS 服务器

简言之,权威性 DNS 服务器是实际持有并负责 DNS 资源记录的服务器。这是位于 DNS 查找链底部的服务器,其将使用所查询的资源记录进行响应,从而最终允许发出请求的 Web 浏览器达到访问网站或其他 Web 资源所需的 IP 地址。权威性域名服务器从自身数据满足查询需求,无需查询其他来源,因为这是某些 DNS 记录的最终真实来源。

dns_record_request_sequence_authoritative_nameserver.png

DNS 查找的 8 个步骤

  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 地址发出HTTP 请求。
  11. 位于该 IP 的服务器返回将在浏览器中呈现的网页(第 10 步)。

what_is_a_dns_server_dns_lookup.png

什么是 DNS 高速缓存?DNS 高速缓存发生在哪里?

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

浏览器 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 Records

DNS 记录 | Cloudflare

DNS 记录(又名区域文件)是位于权威 DNS 服务器中的指令,提供一个域的相关信息,包括哪些 IP 地址与该域关联,以及如何处理对该域的请求。这些记录由一系列以所谓的 DNS 语法编写的文本文件组成。DNS 语法是用作命令的字符串,这些命令告诉 DNS 服务器执行什么操作。此外,所有 DNS 记录都有一个 “TTL”,其代表生存时间,指示 DNS 服务器多久刷新一次该记录。

最常见的 DNS 记录有:

  • A 记录:保存域的 IP 地址的记录。
  • AAAA 记录:包含域的 IPv6 地址的记录(与 A 记录相反,A 记录列出的是 IPv4 地址)。
  • CNAME 记录:将一个域或子域转发到另一个域,不提供 IP 地址。
  • MX 记录:将邮件定向到电子邮件服务器。
  • TXT 记录:可让管理员在记录中存储文本注释。这些记录通常用于电子邮件安全。
  • NS 记录:存储 DNS 条目的名称服务器。
  • SOA 记录:存储域的管理信息。
  • SRV 记录:指定用于特定服务的端口。
  • PTR 记录:在反向查询中提供域名。

P2P Applications(不重要)

Pure P2P architecture(体系结构)

  • no always-on server
  • arbitrary(任意的) end systems directly communicate(直接通信)
  • peers(原叫同龄人,这里指对等端) are intermittently connected and change IP addresses

Video streaming and content distribution networks (CDNs)(不重要)

Video traffic

Video traffic: major consumer of Internet bandwidth

solution: distributed, application-level infrastructure(分布式应用程序级基础架构)

  • CBR(恒定比特率)是指视频编码时采用固定的比特率来保证视频的一致性和稳定性,不论视频场景中的运动、细节、色彩变化等情况如何。因此,CBR 编码方式适用于要求视频画质和大小都相同的场合,比如直播、视频会议等。
  • VBR(可变比特率)是指视频编码时采用动态的比特率来实现更高的压缩效率和更好的视觉质量,它根据不同的场景自适应地改变编码比特率,达到了优化视频质量和压缩比的平衡。因此,VBR 编码方式适用于对视频质量要求高,但视频大小不是首要考虑因素的场合,比如电影、高清视频等。

如:

  • MPEG 1 (CD-ROM) 1.5 Mbps
  • MPEG 2 (DVD) 3-6 Mbps
  • MPEG 4 (often used in Internet, < 1 Mbps)

Streaming multimedia: DASH

DASH(Dynamic, Adaptive Streaming over HTTP)即动态自适应流式传输协议,是一种通过互联网以 HTTP 协议传输音视频内容的方法。DASH 协议允许在不同的网络环境下自动调整音视频的码率和分辨率,以保证用户可以获得最佳的观看体验。简而言之,DASH 协议可以根据用户的网络环境和设备性能自动选择最适合的视频质量,以确保视频的流畅播放和高质量观看。

CDN

CDN(Content Distribution Networks) 即内容分发网络,是一种在网络边缘部署节点的技术,通过靠近用户的部署位置,提高用户访问网站内容的速度和质量。以下是 CDN 的相关知识点:

  1. CDN 的工作原理:CDN 通过将原始服务器上的内容缓存到分布在全球各地的服务器节点上,使用户请求能够从离用户最近的服务器节点获取内容,从而提高用户访问速度和性能。
  2. CDN 的好处:CDN 可以帮助网站提高用户访问速度、减少带宽成本、提高网站的可用性、减轻服务器负载等。
  3. CDN 的部署方式:CDN 可以采用两种部署方式,即自建 CDN 和使用第三方 CDN。自建 CDN 需要投入大量的资金和技术力量,而使用第三方 CDN 的成本较低,但需要考虑接入成本和服务质量等问题。
  4. CDN 的缓存方式:CDN 缓存方式可以分为边缘缓存和中心缓存两种。边缘缓存是将内容缓存到离用户最近的服务器节点上,中心缓存是将内容缓存到核心节点上,然后由核心节点向各个边缘节点分发。
  5. CDN 的工作流程:CDN 的工作流程可以分为 DNS 解析、请求路由、内容缓存和内容传输四个阶段。DNS 解析负责将用户请求路由到最佳的 CDN 节点,请求路由将请求分发到最近的边缘节点上,内容缓存负责将内容存储到缓存中,内容传输将缓存内容传输给用户。