DNS 缓存
DNS 缓存(DNS caching)
有时也叫做 DNS 解析器缓存,它是由操作系统维护的临时数据库,它包含有最近的网站和其他 Internet 域的访问记录。也就是说, DNS 缓存只是计算机为了满足快速的响应速度而把已加载过的资源缓存起来,再次访问时可以直接快速引用的一项技术和手段。那么 DNS 的缓存是如何工作的呢?
DNS 缓存的工作流程
在浏览器向外部发出请求之前,计算机会拦截每个请求并在 DNS 缓存数据库中查找域名,该数据库包含有最近的域名列表,以及 DNS 首次发出请求时 DNS 为它们计算的地址。
DNS 记录和报文
共同实现 DNS 分布式数据库的所有 DNS 服务器存储了资源记录(Resource Record, RR)
,RR 提供了主机名到 IP 地址的映射。每个 DNS 回答报文中会包含一条或多条资源记录。RR 记录用于回复客户端查询。
资源记录是一个包含了下列字段的 4 元组
(Name, Value, Type, TTL)
RR 会有不同的类型,下面是不同类型的 RR 汇总表
DNS RR 类型 | 解释 |
A 记录 | IPv4 主机记录,用于将域名映射到 IPv4 地址 |
AAAA 记录 | IPv6 主机记录,用于将域名映射到 IPv6 地址 |
CNAME 记录 | 别名记录,用于映射 DNS 域名的别名 |
MX 记录 | 邮件交换器,用于将 DNS 域名映射到邮件服务器 |
PTR 记录 | 指针,用于反向查找(IP地址到域名解析) |
SRV 记录 | SRV记录,用于映射可用服务。 |
DNS 报文
DNS 有两种报文,一种是查询报文,一种是响应报文,并且这两种报文有着相同的格式,下面是 DNS 的报文格式
下面对报文格式进行解释
- 前 12 个报文是
首部区域
,也就是说首部区域有 12 个字节,第一个字段(标识符)是一个 16 比特的数,用于标示该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接受到的回答。标志字段含有若干标志,标志字段表示为 1 比特,它用于指出报文是 0-查询报文还是 1-响应报文。 问题区域
包含着正在进行的查询信息。这个区域包括:1) 名字字段,包含正在被查询的主机名字;2) 类型字段,指出有关该名字的正被询问的问题类型,例如主机地址是与一个名字相关联(类型 A)还是与某个名字的邮件服务器相关联(类型 MX)。- 在来自 DNS 服务器的回答中,回答区域包含了对最初请求的名字的资源记录。上面说过 DNS RR记录是个四元组,而且元组中的 Type 会有不同的类型。在回答报文的回答区域中可以包含多条 RR,因此一个主机名能够有多个 IP 地址。
权威区域
包含了其他权威服务器的记录附加区域
包含了其他有帮助的记录。
关于具体 DNS 记录的详细介绍我会出一篇文章专门探讨。
P2P 文件分发
我们上面探讨的协议 HTTP、SMTP、DNS 都采用了客户-服务器
模式,这种模式会极大依赖总是打开的基础设施服务器。而 P2P
是客户端与客户端模式,对总是打开的基础设施服务器有最小的依赖。
P2P 的全称是 Peer-to-peer, P2P
,是一种分布式体系结构的计算机网络。在 P2P 体系中,所有的计算机和设备都被称为对等体,他们互相交换工作。对等网络中的每个对等方都等于其他对等方。网络中没有特权对等体,也没有主管理员设备。
从某种意义上说,对等网络是计算机世界中最平等的网络。每个对等方都相等,并且每个对等方具有与其他对等方相同的权利和义务。对等体同时是客户端和服务器。
实际上,对等网络中可用的每个资源都是在对等之间共享的,而无需任何中央服务器。P2P 网络中的共享资源可以是诸如处理器使用率,磁盘存储容量或网络带宽等。
P2P 用来做什么
P2P 的主要目标是共享资源并帮助计算机和设备协同工作,提供特定服务或执行特定任务。如前面说到的,P2P 用于共享各种计算资源,例如网络带宽或磁盘存储空间。但是,对等网络最常见的例子是 Internet 上的文件共享。对等网络非常适合文件共享,因为它们允许连接到它们计算机等同时接收文件和发送文件。
BitTorrent
是 P2P 使用的主要协议。
P2P 网络的作用
P2P 网络具有一些使它们有用的特征
- 很难完全掉线,即使其中的一个对等方掉线,其他对等方仍在运行并进行通信。为了使 P2P(对等)网络停止工作,你必须关闭所有对等网络。对等网络具有很强的可扩展性。添加新的对等节点很容易,因为你无需在中央服务器上进行任何中央配置。
- 当涉及到文件共享时,对等网络越大,速度越快。在 P2P 网络中的许多对等点上存储相同的文件意味着当某人需要下载文件时,该文件会同时从多个位置下载。
视频流和内容分发网
因特网视频
在流式存储视频应用中,最基础的媒体是预先录制的视频例如电影、电视节目、录制好的体育事件或者用户生成的视频。这些预先录制好的视频会放置在服务器上,用户按需向服务器发送请求来观看视频。许多因特网公司现在提供流式视频,这些公司包括 Netflix、YouTube 、亚马逊和优酷等。
视频式一系列的图像,通常会以一种恒定的速率(如每秒 24 或 30 张图像)来展现。一幅未压缩、数字编码的图像由像素阵列组成,其中每个像素有一些比特编码来表示亮度和颜色。视频的一个重要特征是它能够被压缩、因而可用比特率来权衡视频质量。
HTTP 流和 DASH
在 HTTP 流中,视频只是存储在 HTTP 服务器中的一个文件,每个文件有特定的 URL。当用户想要看视频时,客户与服务器创建一个 TCP 连接并发送该 URL 的 HTTP GET 请求。服务器则以底层网络协议和流量条件允许的尽可能快的速率,在一个 HTTP 响应中发送该文件视频。
尽管 HTTP 流在实践中已经得到广泛部署,但是它有严重缺陷,即所有客户接收到相同编码的视频,但是对于客户而言,带宽是动态变化的,在不同的时间,带宽大小有很大不同。这种情况导致了一种新型 HTTP 流的研发,它常常被称为 经 HTTP 的动态适应性流(Dynamic Adaptive Streaming over HTTP, DASH)
。在 DASH 中,视频编码为几个不同的版本,每个版本对应不同的比特率。
DASH 允许客户使用不同的以太网接入速率流式播放具有不同编码速率的视频。使用 3G 连接的客户能够接受一个低比特率的版本,使用光纤能够接受高比特率的版本。
使用 DASH 后,每个视频版本存储在 HTTP 中,每个版本都有一个不同的 URL。HTTP 服务器也会有一个 告示文件(manifest file)
,为每个版本提供了一个 URL 及其比特率。
内容分发网
现如今,许多因特网视频公司日复一日地向数以百万计的用户按需分发每秒数兆比特的流。对于一个因特网视频公司,或许提供流式视频服务最为直接的方法是建立一个单一的超大规模的数据中心。在数据中心内部存储所有视频,然后把视频返回到全世界范围内的客户。这种方式存在三个问题
- 如果客户远离数据中心,服务器到客户的分组将跨越许多通信链路并可能通过很多 ISP,造成通信延迟
- 流式视频可能经过相同的链路发送了许多次,造成带宽和资源浪费。
- 单点问题,如果单一结点故障,这可能是灾难性的。
为了应对向分布于全世界的用户分发巨量视频数据的挑战,几乎所有主要的视频流公司都利用 内容分发网(Content Distribution Network, CDN)
。CDN 管理分布在多个地理位置上的服务器,在它的服务器上存储视频副本,并且所有试图将每个用户请求定向到一个提供最好用户体验的 CDN 位置。那么服务器如何选址呢?事实上有两种服务器安置原则
深入
,它的主要目标是靠近用户,通过减少端用户和 CDN 集群之间链路和路由器的数量,从而改善了用户感受的时延和吞吐量。邀请做客
,这个原则是通过在少量(例如 10 个)关键位置建造大集群来邀请 ISP 来做客,与深入设计原则相比,邀请做客设计通常产生较低的维护和管理开销。
CDN 可以是专用 CDN(private CDN)
, 即它由内容提供商自己所拥有;另一种 CDN 是 第三方 CDN(third-party CDN)
,它代表多个内容提供商分发内容。
CDN 分发过程
上面我们探讨了一下 CDN 的选址过程,那么 CDN 是如何工作的呢?
当用户主机中的一个浏览器指令检索一个特定的视频(由 URL 标识)时,CDN 必须能够截获请求,来进行下面的操作
- 确定此时适用于该客户的 CDN 服务器集群
- 将客户的请求重定向到集群中的某台服务器上
大多数 CDN 利用 DNS 协议来截获和重定向请求。
下面是 CDN 的具体工作流程
假设一个内容提供商 NetCinema
,雇用了第三方 CDN 公司 KingCDN
来向它的客户分发视频。在 NetCinema 的 Web 网页上,它的每个视频都被指派了一个 URL,该 URL 包括了字符串 video
以及视频本身的标识符。下面要访问 http://video.netcinema.com/6Y7B23V
,它的工作过程如下
- 用户访问位于 NetCinema 的 Web 网页
- 当用户点击链接
http://video.netcinema.com/6Y7B23V
时,该用户主机发送了对于 video.netcinema.com 的 DNS 请求 - 用户本地 DNS 服务器(LDNS, Local DNS) 将该 DNS 请求中继到一台用于 NetCinema 的权威 DNS 服务器,该服务器观察到主机名 video.netcinema.com 中的字符串
video
。为了将该 DNS 请求移交给 KingCDN,NetCinema 权威 DNS 服务器并不返回一个 IP 地址,而是向 LDNS 返回一个 KingCDN 域的主机名,如 a1105.kingcdn.com - 从此时起,DNS 请求就会进入 KingCDN 专用 DNS 基础设施,用户的 LDNS 则发送第二个请求,此时是对 a1105.kingcdn.com 的 DNS 请求,KingCDN 的 DNS 系统最终向 LDNS 返回 KingCDN 内容服务器的 IP 地址。所以正是这里,在 KingCDN 的 DNS 系统中,指定了 CDN 服务器,客户将能够从这台服务器接收它的内容
- LDNS 向用户主机转发内容服务 CDN 节点的 IP 地址
- 一旦客户收到 KingCDN 内容服务器的 IP 地址,它与具有该 IP 地址的服务器创建一条 TCP 连接,并且发出对该视频的 HTTP
GET
请求。如果使用了 DASH,服务器将首先向客户发送具有 URL 列表的告示文件,每个 URL 对应视频的每个版本,并且客户将动态的选择来自不同版本的块。
CDN 的集群选择策略
任何 CDN 的部署,其核心是 集群选择策略(cluster selection strategy)
, 即动态的将客户定向到 CDN 中某个服务器集群或数据中心的机制。一种简单的策略是指派客户到 地理上最为临近(geographically closest)
的集群。这种选择策略忽略了时延和可用带宽随因特网路径时间而变化,总是为特定的客户指派相同的集群;还有一种选择策略是 实时测量(real-time measurement)
,该机制是基于集群和客户之间的时延和丢包性能执行周期性检查。
文章参考
《计算机网络-自顶向下方法》
https://baike.baidu.com/item/应用层协议/3668945?fr=aladdin
https://developer.mozilla.org/en-US/docs/Web/HTTP
https://baike.baidu.com/item/WEB服务器/8390210?fr=aladdin
https://baike.baidu.com/item/内容分发网络/4034265
https://baike.baidu.com/item/HTML/97049?fr=aladdin
https://www.jianshu.com/p/3dd8f1879acb
DNS原理及其解析过程
https://en.wikipedia.org/wiki/Decentralised_system
https://en.wikipedia.org/wiki/Domain_Name_System
https://www.lifewire.com/what-is-a-dns-cache-817514
https://blog.csdn.net/tianxuhong/article/details/74922454
https://www.omnisecu.com/tcpip/what-is-dns-resource-record.php