DNS
什么是DNS?
DNS,英文全称为:Domain Name System,中文译名:域名系统。
本质上,是存储域名和IP地址映射关系的分布式服务。
它将人类可读的域名,转换成数字IP地址,供计算机之间相互连接。
DNS的工作原理
如图所示,模拟的是用户打开浏览器,输入网址,到显示页面到显示器上的流程。
按图中的数字,逐步拆解如下:
- 用户打开web浏览器,在地址栏中输入
www.example.com
,然后敲击回车键。 www.example.com
的请求,被路由到本地DNS服务器
,如果在本地DNS服务器
查找到域名映射的缓存记录,则直接返回IP地址给浏览器。- 如果在
本地DNS服务器
查找不到域名映射的记录,则由本地DNS服务器
将域名www.example.com
,转发给DNS根服务器
。DNS根服务器
不负责解析域名,但是会将对应的域服务器
,作为响应,返回本地DNS服务器
。这里对应的域服务器
是.com域服务器
。也即顶级域名TLD(top level domain)。 本地DNS服务器
发送域名到.com域服务器
,.com域服务器
会使用与example.com
相关的DNS服务器作为响应,返回给本地DNS服务器
。本地DNS服务器
选择其中一台DNS服务器(命名为:Amazon Route 53),将www.example.com
的请求,转发到该服务器。- Amazon Route 53服务器,查找出
www.example.com
的记录,获取到对应的IP地址,并将IP地址返回给DNS解析程序。 本地DNS服务器
接收到域名对应的IP地址后,将IP值返回给浏览器。并根据TTL,缓存域名www.example.com
的映射。- web浏览器根据IP地址,发送请求到目标服务器,请求相关资源。
- 目标服务器将相关资源返回给浏览器,浏览器接收到资源,显示到页面上。
此处的本地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节点有缓存
- 用户在浏览器输入网站域名
www.example.com
,浏览器向本地DNS服务器
发起域名解析请求 - 域名解析请求,被
本地DNS服务器
转发到域名授权DNS服务 - 域名授权DNS查找到,域名通过
CNAME
,映射到www.example.com.c.cdnhwc1.com
,返回给本地DNS服务器
本地DNS服务器
,访问www.example.com.c.cdnhwc1.com
对应的CDN服务器
CDN服务器
对域名进行解析,使用CDN策略,查找出最佳的CDN节点的IP地址,返回给本地DNS服务器
本地DNS服务器
返回CDN节点IP地址给浏览器- 浏览器得到域名
www.example.com
对应的IP地址后,向该IP地址(CDN节点)发出请求 - CDN节点将用户请求的资源进行返回
CDN节点无缓存
前7步的流程,和CDN节点有缓存
的情况一致。
区别是:访问的CDN节点,没有资源副本,需要先向源服务器拉取资源,缓存到CDN节点后,再返回给浏览器。
增加的步骤解析:
- 浏览器的请求到达CDN节点,CDN节点在本地缓存查找不到资源
- CDN节点请求源服务器(ps: 也可以是上级缓存服务器),拉取用户所需的资源
- CDN节点将拉取的资源缓存到本地
- CDN节点将用户请求的资源进行返回
域名解析
什么是A记录?
A记录用来指定主机名或域名,对应的IP地址。
如上图所示,是我的阿里云域名配置,将fe-interview.wangxiaokai.vip
指向对应的IP地址****
。
什么是CNAME记录?
CNAME的作用,是将一个域名映射到另一个域名,也即域名的别名。
如上图所示, 我将note.wangxiaokai.vip
指向另一个域名hosting.gitbook.com
。
访问note.wangxiaokai.vip
等同于访问hosting.gitbook.com
。
CNAME的应用,是需要服务保持稳定域名的场景。
比如CDN节点域名,就是使用CNAME进行映射的。如果后续的地区CDN节点服务器更换IP地址,只需要维护CDN策略而已,不需要用户修改接入逻辑。
最近笔者在整理第一本电子书书稿《前端面试手册》,有兴趣的同学可以关注下~
喜欢我文章的朋友,可以通过以下方式关注我:
- 「star」 或 「watch」 我的GitHub blog - RSS订阅我的个人博客:王先生的基地