初识网络协议:什么是域名
<p class="md-end-block md-p"><span class="md-plain">上一章我们讲了如何上网,可是实际生活中,我们基本上从来不使用IP地址访问网站,而是使用域名访问。</span></p><p class="md-end-block md-p"><span class="md-plain md-expand">所谓域名,就是使用方便记忆能显示地址组织的名称和性质的由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称。如<span><code>4399.com</code><span class="md-plain">、<span><code>cnblogs.com</code><span class="md-plain">、<span><code>chsi.com.cn</code><span class="md-plain">。</span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain">在我们购买域名的时候,平台会让你绑定IP地址。其实说白了,域名就是IP地址,只不过需要DNS解析而已。</span></p>
<p class="md-end-block md-p"><span class="md-plain">DNS解析流程:</span></p>
<ol class="ol-list">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">电脑客户端会发出一个DNS请求,问<span><code>4399.com</code><span class="md-plain">的IP是啥,并且发给<span><strong>本地域名服务器</strong><span class="md-plain">(本地DNS),本地DNS通常在网络运营商那里。</span></span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">本地DNS收到来自客户端的请求后,会在服务器上查找<span><code>4399.com</code><span class="md-plain">对应的IP地址,有就返回IP地址,没有就去问它的根域名服务器。<span><strong>根域名服务器</strong><span class="md-plain">是最高层次的,全球共有13套,它不直接用于域名解析,而是指一条明路。</span></span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">根DNS收到请求后,发现后缀是<span><code>.com</code><span class="md-plain">,就会让本地DNS转向<span><code>.com</code><span class="md-plain">的<span><strong>顶级域名服务器</strong><span class="md-plain">。</span></span></span></span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">本地DNS转向顶级服务器域名,问<span><code>4399.com</code><span class="md-plain">的IP地址。</span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">顶级域名服务器会让本地DNS找负责<span><code>4399.com</code><span class="md-plain">区域的<span><strong>权威域名服务器</strong><span class="md-plain">。</span></span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">本地DNS转向权威DNS服务器,权威DNS服务器就能直接找出<span><code>4399.com</code><span class="md-plain">对应的IP地址是<span><code>X.X.X.X</code><span class="md-plain">。</span></span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">权威DNS将查询结果告诉本地DNS。</span></p>
</li>
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">本地DNS将IP地址返回客户端,客户端和目标建立连接。</span></p>
</li>
</ol>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2018.cnblogs.com/common/1569897/202002/1569897-20200226141106387-1569337087.png"></span></p>
<p class="md-end-block md-p"><span class="md-plain">上图中<span><strong>本地DNS缓存</strong><span class="md-plain">就是电脑中的hosts文件,Windows在<span><code>C:\Windows\System32\drivers\etc\hosts</code><span class="md-plain">,Linux在<span><code>/etc/hosts</code><span class="md-plain">。</span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain">假如本地DNS有缓存的话,就直接返回缓存结果,而不用去请求本地DNS服务器了。</span></p>
<p class="md-end-block md-p"><span class="md-plain">你可以在hosts文件最下面加上这么一段<span><code>47.102.144.35 test.com</code><span class="md-plain">,这样当你访问<span><code>test.com</code><span class="md-plain">的时候,实际上访问的是<span><code>47.102.144.35</code><span class="md-plain">。</span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain">DNS除了可以通过名称映射为IP地址,还可以<span><strong>负载均衡</strong><span class="md-plain">。</span></span></span></p>
<p class="md-end-block md-p"><span><strong>内部负载均衡</strong><span class="md-plain">:访问数据库的时候,应该使用域名,这样子假如IP地址换了,只需要将域名映射为新的IP地址就好了。不然得把所有访问数据库的应用全部修改一遍,那得多麻烦。</span></span></p>
<p class="md-end-block md-p"><span><strong>全局负载均衡</strong><span class="md-plain">:当用户访问某个域名的时候,实际访问的IP地址可以轮询访问多个数据中心。假如一个数据中心挂了,只需要在DNS服务器里面将这个数据中心对应的IP地址删除就可以了,从而实现一定的高可用。</span></span></p>
<p class="md-end-block md-p"><span class="md-plain">使用Nginx做负载均衡实例:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">upstream test.com {
server </span><span style="color: rgba(128, 0, 128, 1)">47.102</span>.<span style="color: rgba(128, 0, 128, 1)">144.35</span>:<span style="color: rgba(128, 0, 128, 1)">8011</span> weight=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">;
server </span><span style="color: rgba(128, 0, 128, 1)">47.102</span>.<span style="color: rgba(128, 0, 128, 1)">144.35</span>:<span style="color: rgba(128, 0, 128, 1)">8012</span> weight=<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">;
}
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">test.com;</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
# 做了反向代理才能实现负载均衡,负载均衡是做反向代理的目的之一。</span></pre>
</div>
<p class="md-end-block md-p"><span class="md-plain">访问<span><code>test.com</code><span class="md-plain">实际上就是访问<span><code>47.102.144.35</code><span class="md-plain">,这里做了负载均衡,8011权重是3,8012权重是10。</span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain"><span><span class="md-plain"><span><span class="md-plain"><img src="https://img2018.cnblogs.com/common/1569897/202002/1569897-20200226141326096-261772363.png"></span></span></span></span></span></p>
<p class="md-end-block md-p"><img src="https://img2018.cnblogs.com/common/1569897/202002/1569897-20200226141314583-1019788054.png"></p>
<p class="md-end-block md-p"> </p>
<p class="md-end-block md-p">参考资料:《趣谈网络协议》</p><br><br>
来源:https://www.cnblogs.com/74percent/p/12366817.html
頁:
[1]