DNS、CDN加速和域名解析之间的关系

1,938 阅读6分钟

DNS

什么是DNS?

DNS,英文全称为:Domain Name System,中文译名:域名系统。
本质上,是存储域名和IP地址映射关系的分布式服务。
它将人类可读的域名,转换成数字IP地址,供计算机之间相互连接。

DNS的工作原理

dns.png

如图所示,模拟的是用户打开浏览器,输入网址,到显示页面到显示器上的流程。
按图中的数字,逐步拆解如下:

  1. 用户打开web浏览器,在地址栏中输入www.example.com,然后敲击回车键。
  2. www.example.com的请求,被路由到本地DNS服务器,如果在本地DNS服务器查找到域名映射的缓存记录,则直接返回IP地址给浏览器。
  3. 如果在本地DNS服务器查找不到域名映射的记录,则由本地DNS服务器将域名www.example.com,转发给DNS根服务器DNS根服务器不负责解析域名,但是会将对应的域服务器,作为响应,返回本地DNS服务器。这里对应的域服务器.com域服务器。也即顶级域名TLD(top level domain)。
  4. 本地DNS服务器发送域名到.com域服务器.com域服务器会使用与example.com相关的DNS服务器作为响应,返回给本地DNS服务器
  5. 本地DNS服务器选择其中一台DNS服务器(命名为:Amazon Route 53),将www.example.com的请求,转发到该服务器。
  6. Amazon Route 53服务器,查找出www.example.com的记录,获取到对应的IP地址,并将IP地址返回给DNS解析程序。
  7. 本地DNS服务器接收到域名对应的IP地址后,将IP值返回给浏览器。并根据TTL,缓存域名www.example.com的映射。
  8. web浏览器根据IP地址,发送请求到目标服务器,请求相关资源。
  9. 目标服务器将相关资源返回给浏览器,浏览器接收到资源,显示到页面上。

此处的本地DNS服务器,一般是ISP(Internet Service Provider)提供。ISP,即是互联网服务提供商。比如,我们熟知的电信,就是ISP。

TTL

DNS解析中,一般都会有一个参数需要设置,即TTL(Time To Live)。
TTL的作用,是告知本地DNS服务器,域名可以在其机器上缓存的最长时间是多久。
比如阿里云,默认的TTL是10分钟,也即本地DNS服务器,可以对域名缓存10分钟。10分钟之后,本地DNS服务器会删除这条记录。删除之后,如果用户再次访问www.example.com,则需要重复上述流程。

TTL的最大值是:24小时。

CDN

什么是CDN?

CDN,英文全名:Content Delivery Network,即内容分发网络。
它是构建在现有互联网基础上的一层智能虚拟网络
通过现实世界,部署在各个地区的物理实体节点服务器,提供内容给用户就近访问。
CDN服务器的本质,是存储源服务器分发的资源,也即资源副本,供用户就近访问,缩短用户查看内容的访问延迟。
比如,Leon公司,源服务器部署在英国,并在中国和英国都部署有CDN服务器。则中国的用户,只需要访问中国CDN服务器即可,不需要通过路由多层转发,访问英国的源服务器。依此,提高网络资源的访问速度。

CDN的好处

CDN服务器,可以解决 网络带宽小用户访问量大网点分布不均匀等问题,并提高用户访问网站的响应速度增强网站的可用性

CDN怎么工作?

CDN加速原理

浏览器发起HTTP请求到本地DNS服务器本地DNS服务器使用CNAME的方式,将资源域名重定向到CDN服务,依靠CDN的策略,查找到最佳CDN节点IP。浏览器访问该节点,用最短访问时延,下载所需的资源。

工作流程

CDN节点有缓存

cdn-1.png

  1. 用户在浏览器输入网站域名www.example.com,浏览器向本地DNS服务器发起域名解析请求
  2. 域名解析请求,被本地DNS服务器转发到域名授权DNS服务
  3. 域名授权DNS查找到,域名通过CNAME,映射到www.example.com.c.cdnhwc1.com,返回给本地DNS服务器
  4. 本地DNS服务器,访问www.example.com.c.cdnhwc1.com对应的CDN服务器
  5. CDN服务器对域名进行解析,使用CDN策略,查找出最佳的CDN节点的IP地址,返回给本地DNS服务器
  6. 本地DNS服务器返回CDN节点IP地址给浏览器
  7. 浏览器得到域名www.example.com对应的IP地址后,向该IP地址(CDN节点)发出请求
  8. CDN节点将用户请求的资源进行返回
CDN节点无缓存

cdn-2.png

前7步的流程,和CDN节点有缓存的情况一致。

区别是:访问的CDN节点,没有资源副本,需要先向源服务器拉取资源,缓存到CDN节点后,再返回给浏览器。

增加的步骤解析:
7. 浏览器的请求到达CDN节点,CDN节点在本地缓存查找不到资源
8. CDN节点请求源服务器(ps: 也可以是上级缓存服务器),拉取用户所需的资源
9. CDN节点将拉取的资源缓存到本地
10. CDN节点将用户请求的资源进行返回

域名解析

什么是A记录?

domain-1.png

A记录用来指定主机名或域名,对应的IP地址。

如上图所示,是我的阿里云域名配置,将fe-interview.wangxiaokai.vip指向对应的IP地址****

什么是CNAME记录?

domain-2.png

CNAME的作用,是将一个域名映射到另一个域名,也即域名的别名

如上图所示, 我将note.wangxiaokai.vip指向另一个域名hosting.gitbook.com
访问note.wangxiaokai.vip等同于访问hosting.gitbook.com

CNAME的应用,是需要服务保持稳定域名的场景。
比如CDN节点域名,就是使用CNAME进行映射的。如果后续的地区CDN节点服务器更换IP地址,只需要维护CDN策略而已,不需要用户修改接入逻辑。

参考


最近笔者在整理第一本电子书书稿《前端面试手册》,有兴趣的同学可以关注下~

喜欢我文章的朋友,可以通过以下方式关注我: