DNS、CDN加速和域名解析之间的关系
<h2 id="dns">DNS</h2><h3 id="什么是dns">什么是DNS?</h3>
<p>DNS,英文全称为:Domain Name System,中文译名:域名系统。<br>
本质上,是存储域名和IP地址映射关系的分布式服务。<br>
它将人类可读的域名,转换成数字IP地址,供计算机之间相互连接。</p>
<h3 id="dns的工作原理">DNS的工作原理</h3>
<p><img src="https://img2022.cnblogs.com/blog/718206/202205/718206-20220511092406435-813236419.png"></p>
<p>如图所示,模拟的是用户打开浏览器,输入网址,到显示页面到显示器上的流程。<br>
按图中的数字,逐步拆解如下:</p>
<ol>
<li>用户打开web浏览器,在地址栏中输入<code>www.example.com</code>,然后敲击回车键。</li>
<li><code>www.example.com</code>的请求,被路由到<code>本地DNS服务器</code>,如果在<code>本地DNS服务器</code>查找到域名映射的缓存记录,则直接返回IP地址给浏览器。</li>
<li>如果在<code>本地DNS服务器</code>查找不到域名映射的记录,则由<code>本地DNS服务器</code>将域名<code>www.example.com</code>,转发给<code>DNS根服务器</code>。<br>
<code>DNS根服务器</code>不负责解析域名,但是会将对应的<code>域服务器</code>,作为响应,返回<code>本地DNS服务器</code>。这里对应的<code>域服务器</code>是<code>.com域服务器</code>。也即顶级域名TLD(top level domain)。</li>
<li><code>本地DNS服务器</code>发送域名到<code>.com域服务器</code>, <code>.com域服务器</code>会使用与<code>example.com</code>相关的DNS服务器作为响应,返回给<code>本地DNS服务器</code>。</li>
<li><code>本地DNS服务器</code>选择其中一台DNS服务器(命名为:Amazon Route 53),将<code>www.example.com</code>的请求,转发到该服务器。</li>
<li>Amazon Route 53服务器,查找出<code>www.example.com</code>的记录,获取到对应的IP地址,并将IP地址返回给DNS解析程序。</li>
<li><code>本地DNS服务器</code>接收到域名对应的IP地址后,将IP值返回给浏览器。并根据TTL,缓存域名<code>www.example.com</code>的映射。</li>
<li>web浏览器根据IP地址,发送请求到目标服务器,请求相关资源。</li>
<li>目标服务器将相关资源返回给浏览器,浏览器接收到资源,显示到页面上。</li>
</ol>
<p>此处的<code>本地DNS服务器</code>,一般是ISP(Internet Service Provider)提供。ISP,即是互联网服务提供商。比如,我们熟知的电信,就是ISP。</p>
<h3 id="ttl">TTL</h3>
<p>DNS解析中,一般都会有一个参数需要设置,即TTL(Time To Live)。<br>
TTL的作用,是告知<code>本地DNS服务器</code>,域名可以在其机器上缓存的最长时间是多久。<br>
比如阿里云,默认的TTL是10分钟,也即<code>本地DNS服务器</code>,可以对域名缓存10分钟。10分钟之后,<code>本地DNS服务器</code>会删除这条记录。删除之后,如果用户再次访问<code>www.example.com</code>,则需要重复上述流程。</p>
<p><strong>TTL的最大值是:24小时。</strong></p>
<h2 id="cdn">CDN</h2>
<h3 id="什么是cdn">什么是CDN?</h3>
<p>CDN,英文全名:Content Delivery Network,即内容分发网络。<br>
它是构建在现有互联网基础上的一层<strong>智能虚拟网络</strong>。<br>
通过现实世界,部署在各个地区的物理实体节点服务器,提供内容给用户就近访问。<br>
CDN服务器的本质,是存储<code>源服务器</code>分发的资源,也即资源副本,供用户就近访问,缩短用户查看内容的访问延迟。<br>
比如,Leon公司,<code>源服务器</code>部署在英国,并在中国和英国都部署有CDN服务器。则中国的用户,只需要访问<code>中国CDN服务器</code>即可,不需要通过路由多层转发,访问英国的<code>源服务器</code>。依此,提高网络资源的访问速度。</p>
<h3 id="cdn的好处">CDN的好处</h3>
<p>CDN服务器,可以解决 <code>网络带宽小</code>、<code>用户访问量大</code>、<code>网点分布不均匀</code>等问题,并<code>提高用户访问网站的响应速度</code>,<code>增强网站的可用性</code>。</p>
<h3 id="cdn怎么工作">CDN怎么工作?</h3>
<h4 id="cdn加速原理">CDN加速原理</h4>
<p>浏览器发起HTTP请求到<code>本地DNS服务器</code>,<code>本地DNS服务器</code>使用<code>CNAME</code>的方式,将资源域名重定向到CDN服务,依靠CDN的策略,查找到最佳CDN节点IP。浏览器访问该节点,用最短访问时延,下载所需的资源。</p>
<h4 id="工作流程">工作流程</h4>
<h5 id="cdn节点有缓存">CDN节点有缓存</h5>
<p><img src="https://img2022.cnblogs.com/blog/718206/202205/718206-20220511092429444-630236376.png"></p>
<ol>
<li>用户在浏览器输入网站域名<code>www.example.com</code>,浏览器向<code>本地DNS服务器</code>发起域名解析请求</li>
<li>域名解析请求,被<code>本地DNS服务器</code>转发到域名授权DNS服务</li>
<li>域名授权DNS查找到,域名通过<code>CNAME</code>,映射到<code>www.example.com.c.cdnhwc1.com</code>,返回给<code>本地DNS服务器</code></li>
<li><code>本地DNS服务器</code>,访问<code>www.example.com.c.cdnhwc1.com</code>对应的<code>CDN服务器</code></li>
<li><code>CDN服务器</code>对域名进行解析,使用CDN策略,查找出最佳的CDN节点的IP地址,返回给<code>本地DNS服务器</code></li>
<li><code>本地DNS服务器</code>返回CDN节点IP地址给浏览器</li>
<li>浏览器得到域名<code>www.example.com</code>对应的IP地址后,向该IP地址(CDN节点)发出请求</li>
<li>CDN节点将用户请求的资源进行返回</li>
</ol>
<h5 id="cdn节点无缓存">CDN节点无缓存</h5>
<p><img src="https://img2022.cnblogs.com/blog/718206/202205/718206-20220511092439410-1371244836.png"></p>
<p>前7步的流程,和<code>CDN节点有缓存</code>的情况一致。</p>
<p>区别是:访问的CDN节点,<strong>没有资源副本</strong>,需要先向源服务器拉取资源,缓存到CDN节点后,再返回给浏览器。</p>
<p>增加的步骤解析:<br>
7. 浏览器的请求到达CDN节点,CDN节点在本地缓存查找不到资源<br>
8. CDN节点请求源服务器(ps: 也可以是上级缓存服务器),拉取用户所需的资源<br>
9. CDN节点将拉取的资源缓存到本地<br>
10. CDN节点将用户请求的资源进行返回</p>
<h2 id="域名解析">域名解析</h2>
<h3 id="什么是a记录">什么是A记录?</h3>
<p><img src="https://img2022.cnblogs.com/blog/718206/202205/718206-20220511092451383-1167716106.png"></p>
<p>A记录用来指定主机名或域名,对应的IP地址。</p>
<p>如上图所示,是我的阿里云域名配置,将<code>fe-interview.wangxiaokai.vip</code>指向对应的IP地址<code>****</code>。</p>
<h3 id="什么是cname记录">什么是CNAME记录?</h3>
<p><img src="https://img2022.cnblogs.com/blog/718206/202205/718206-20220511092459744-1376225956.png"></p>
<p>CNAME的作用,是将一个域名映射到另一个域名,也即域名的<strong>别名</strong>。</p>
<p>如上图所示, 我将<code>note.wangxiaokai.vip</code>指向另一个域名<code>hosting.gitbook.com</code>。<br>
访问<code>note.wangxiaokai.vip</code>等同于访问<code>hosting.gitbook.com</code>。</p>
<p>CNAME的应用,是需要服务保持稳定域名的场景。<br>
比如CDN节点域名,就是使用CNAME进行映射的。如果后续的地区CDN节点服务器更换IP地址,只需要维护CDN策略而已,不需要用户修改接入逻辑。</p>
<h2 id="参考">参考</h2>
<ul>
<li>什么是 DNS?</li>
<li>一张图看懂DNS域名解析全过程</li>
<li>CDN的加速原理是什么?</li>
<li>CDN基本工作过程</li>
<li>Cname解析和A记录解析的区别</li>
</ul>
</div>
<div id="MySignature" role="contentinfo">
<hr style="margin-top: 30px">
<p>
<strong>最近笔者在整理第一本电子书书稿《前端面试手册》,有兴趣的同学可以关注下~</strong>
</p>
<p style="margin-top: 20px; margin-bottom: 20px">
喜欢我文章的朋友,可以通过以下方式关注我:
</p>
<ul>
<li><strong>「star」</strong> 或 <strong>「watch」</strong> 我的GitHub blog</li>
<li>RSS订阅我的个人博客:</li>
</ul>
<img src="https://img2018.cnblogs.com/blog/718206/201908/718206-20190808234850902-481673533.png" alt="wall的个人博客"><br><br>
来源:https://www.cnblogs.com/walls/p/16256635.html
頁:
[1]