CDN和DNS
DNS
DNS 提供了互联网中的主机名到 IP 地址转换的目录服务,在互联网中起着十分重要的作用。
严格来说 DNS 具有两层含义:
- 由分层的 DNS 服务器实现的分布式数据库
- 查询分布式数据库的应用层协议,运输层协议使用 UDP,端口号 53
提供的服务
除了主机名到 IP 地址转换,DNS 提供了其他服务:
- 主机别名: 主机可以拥有多个主机名(一个规范主机名,多个别名),DNS 服务可以获取别名对应的 IP 和规范主机名
- 邮件服务器别名: 和主机别名相同,邮件服务器也可以拥有别名便于记忆
- 负载分配: 一个规范主机名可以对应多台服务器(多个 IP),DNS 可以在这些 IP 地址集合中循环分配负载
工作原理
分布式、层次数据库
DNS 使用了大量的 DNS 服务器,它们以层次方式组织并分布在全世界范围。
DNS 服务器存储着主机到 IP 的映射,这些映射分布在所有的 DNS 服务器上,每一台都仅存储一部分的映射。
DNS 服务器在层次上分为三种:
- 根 DNS 服务器:根服务器遍及全球,根服务器提供的是 TLD 服务器的 IP
- 顶级域服务器(TLD):每个顶级域都有对应的 TLD 服务器(或集群),TLD 服务器提供的是权威 DNS 服务器的 IP
- 权威 DNS 服务器:互联网中可访问的主机都需要在权威 DNS 服务器中保存主机名到主机 IP 的映射
本地 DNS 服务器
在 DNS 服务器层次之外存在着一类至关重要的 DNS 服务器:本地 DNS 服务器。
每个 ISP 都会有一台或多台本地 DNS 服务器,当和某个 ISP 相连通过 DHCP 分配 IP 地址时,会提供一台或多台本地 DNS 服务器的 IP。
当我们进行访问某个网站时,会先将主机名发送给本地 DNS 服务器,接着本地 DNS 服务器会依次向根服务器、顶级域服务器、权威 DNS 服务器进行询问,最后将该主机名对应的 IP 返回给我们。
一般向本地 DNS 服务器的查询是递归查询,本地 DNS 服务器的查询是迭代查询。
DNS 记录
DNS 分布式数据库存储的映射被称为资源记录,每个 DNS 回答报文中包含了一条或多条资源记录。
资源记录一个 4 元组:(Name, Value, Type, TTL)
TTL 记录的是生存时间,而 Name 和 Value 字段的值和含义取决于 Type 字段:
- Type = A,表示的这个资源记录提供的是主机名到 IP 地址的映射,Name = 主机名,Value = IP 地址
- Type = NS,则 Name = 域,Value = 能够获得该域中主机 IP 的 DNS 服务器的主机名
- Type = CNAME,则 Name = 别名,Value = 别名为 Name 的主机对应的规范主机名
- Type = MX,Name = 别名,Value = 别名为 Name 的邮件服务器的规范主机名
一台权威 DNS 服务器会包含一条用于该(特定)主机名的类型 A 记录,其他的服务器也可能在缓存中包含这样一条记录。
如果服务器不是用于某主机名的权威 DNS 服务器,则该服务器会包含一条类型 NS 记录和一条类型 A 记录:
- NS 记录:包含该主机名的域和其该域所对应的 DNS 服务器主机名
- A 记录:DNS 服务器主机名和其对应的 IP
例如:一台 edu 顶级域 DNS 服务器不是 gaia.cs.umass.edu 的权威 DNS 服务器,则该顶级域服务器包含一条 NS 类型记录和一条 A 类型记录:
- NS 类型记录:(umass.edu, dns.umass.edu, NS)
- A 类型记录:(dns,umass.edu, xxx.xxx.xxx.xxx, A)
CDN
CDN 的全称是 Content Delivery Network,即内容分发网络。
CDN 管理分布在多个地理位置上的服务器(CDN 节点),服务器中存储着资源的副本,并试图将每个用户的请求定向到一个用户体验最好的 CDN 节点上。
原理
当用户主机请求一个地址时,CDN 必须截获该请求并执行操作:
- 确定此时适合用于该客户的 CDN 服务器集群
- 将客户的请求重定向到该集群的某台服务器
截获和重定向
大多数 CDN 利用 DNS 来截获和重定向请求。
CDN 对域名解析过程进行了调整,对应的权威 DNS 服务器返回的不是 IP 地址而是某个 CDN 域的主机名(CNAME 记录)
本地服务器会对该服务器发起 DNS 请求,这时就进入了 CDN 专用 DNS 基础设施,此时会返回最适合的服务器的 IP 地址。
集群选择策略
任何 CDN 部署,其核心是集群选择策略,就是动态的将客户定向到 CDN 中的某个服务器集群或数据中心的机制。
最简单的策略就是指派客户到地理上最为邻近的集群,这种简单的策略忽略了时延和可用带宽的变化。
CDN 可以对其集群和客户之间的实验和丢包性能执行周期性的实时测量,基于当前流量条件来决定最好的集群。









