应用层:DNS 域名系统
<p>禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!<br></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>DNS 域名系统<ul><li>功能与任务</li><li>为什么是分布式?</li></ul></li><li>域名结构</li><li>域名服务器<ul><li>根域名服务器</li><li>顶级域名服务器</li><li>权限域名服务器</li><li>本地域名服务器</li></ul></li><li>域名解析<ul><li>递归查询</li><li>迭代查询</li></ul></li><li>高速缓存</li><li>参考资料</li></ul></div><p></p>
<h1 id="dns-域名系统">DNS 域名系统</h1>
<h2 id="功能与任务">功能与任务</h2>
<p>域名系统 <strong>DNS(Domain Name System)</strong> 是互联网使用的命名系统,用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS,但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字,并使用<strong>分布式的域名系统 DNS</strong>。DNS 是:</p>
<ol>
<li>一个有分层的 <strong>DNS服务器</strong>实现的分布式数据库;</li>
<li>一个使得主机能够查询分布式数据库的应用层协议。</li>
</ol>
<p>采用客户服务器方式,使大多数名字都在本地进行<strong>解析</strong>。名字到 IP 地址的解析是由若干个<strong>域名服务器程序</strong>完成的,域名服务器程序在专设的结点上运行,运行该程序的机器称为<strong>域名服务器</strong>。当一个应用进程需要把主机名解析为 IP 地址是,该用户进程就调用<strong>解析程序</strong>,并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报的方式发给本地域名服务器。本地域名服务器查找域名后,把对应的 IP 地址放在回答报文中返回。若本地域名服务器不能回答该请求,则该本地域名服务器就暂时成为 DNS 中的另一个客户,并向其他域名服务器发出查询请求。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725104412966-864813305.png" alt="" loading="lazy"></p>
<h2 id="为什么是分布式">为什么是分布式?</h2>
<p>DNS 的一种简单的设计是,在互联网中只使用一个 DNS 服务器,该服务器包含所有的映射,所有客户的查询都发往该服务器。现在来考虑下,为什么 DNS 不使用集中式设计而是使用分布式?原因主要有一下 4 点:</p>
<ol>
<li><strong>单点故障</strong>:如果该 DNS 服务器崩溃,则整个因特网都会因此瘫痪;</li>
<li><strong>通信容量</strong>:单个 DNS 服务器不得不处理所有的 DNS 查询(数量级是上亿台主机);</li>
<li><strong>远距离的集中式数据库</strong>:单个 DNS 服务器不可能“邻近”所有的查询客户,会导致严重的时延;</li>
<li><strong>维护</strong>:单个 DNS 服务器不得不为所有因特网主机保留记录,这使得数据库异常庞大,且需要频繁更新。</li>
</ol>
<p>总而言之,单一的 DNS 服务器上运行集中式数据库,完全没有拓展能力。</p>
<h1 id="域名结构">域名结构</h1>
<p>互联网采用了层次树状结构的命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字即<strong>域名</strong>。域名的结构由标号序列组成,各标号之间用点隔开,各标号分别代表不同级别的域名,例如“mail.cctv.com”。<br>
<strong>域名只是个逻辑概念</strong>,并不代表计算机所在的物理地点。变长的域名和使用有助记忆的字符串,是为了便于人来使用,而 IP 地址是定长的 32 位二进制数字则非常便于机器进行处理。域名中的“点”和点分十进制 IP 地址中的“点”并无一一对应的关系。点分十进制 IP 地址中一定是包含三个“点”,但每一个域名中“点”的数目则不一定正好是三个。<br>
互联网域名空间结构可以抽象为一个<strong>树结构</strong>,最上面的根结点没有名字。根下面一级的结点就是顶级域名,顶级域名往下划分子域名,即二级域名,还可以继续往下划分。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725105440860-2071201368.png" alt="" loading="lazy"></p>
<h1 id="域名服务器">域名服务器</h1>
<p>一个服务器所负责管辖的(或有权限的)范围叫做区 (zone),各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的。每一个区设置相应的<strong>权限域名服务器</strong>,用来保存该区中的所有主机的域名到 IP 地址的映射。DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725110330787-755137222.png" alt="" loading="lazy"><br>
当某个 DNS 服务器不能进行 IP 地址转换时,就设法找互联网上别的域名服务器进行解析。互联网上的 DNS 域名服务器也是按层次安排的,每一个域名服务器都只对域名体系中的一部分进行管辖。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725122912911-1849106541.png" alt="" loading="lazy"><br>
DNS 域名服务器都把数据复制到几个域名服务器来保存,其中的一个是<strong>主域名服务器</strong>,其他的是<strong>辅助域名服务器</strong>。当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。</p>
<h2 id="根域名服务器">根域名服务器</h2>
<p><strong>根域名服务器</strong>是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。在互联网上共有 13 个不同 IP 地址的根域名服务器,它们的名字是用一个英文字母命名,从 a 根域名服务器共有 13 套装置,不是 13 个机器。到 2016 年 2 月,全世界已经在 588 个地点安装了根域名服务器,使世界上大部分 DNS 域名服务器都能就近找到一个根域名服务器。<br>
为了提供更可靠的服务,在每一个地点的<strong>根域名服务器往往由多台机器组成</strong>。根域名服务器并不直接把域名直接转换成 IP 地址,在使用迭代查询时,根域名服务器把下一步应当找的顶级域名服务器的 IP 地址告诉本地域名服务器。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725123051961-1192791821.png" alt="" loading="lazy"></p>
<h2 id="顶级域名服务器">顶级域名服务器</h2>
<p><strong>顶级域名服务器</strong>(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。</p>
<h2 id="权限域名服务器">权限域名服务器</h2>
<p><strong>权限域名服务器</strong>负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。</p>
<h2 id="本地域名服务器">本地域名服务器</h2>
<p>当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给<strong>本地域名服务器</strong>。每一个互联网服务提供者 ISP,或一个大学甚至大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为<strong>默认域名服务器</strong>。</p>
<h1 id="域名解析">域名解析</h1>
<h2 id="递归查询">递归查询</h2>
<p>主机向本地域名服务器的查询,一般都是采用<strong>递归查询</strong>。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725123626372-562869133.png" alt="" loading="lazy"></p>
<h2 id="迭代查询">迭代查询</h2>
<p>本地域名服务器向根域名服务器的查询,通常是采用<strong>迭代查询</strong>。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。<br>
<img src="https://img2020.cnblogs.com/blog/1774310/202007/1774310-20200725123637689-2058771932.png" alt="" loading="lazy"></p>
<h1 id="高速缓存">高速缓存</h1>
<p>每个域名服务器都维护一个<strong>高速缓存</strong>,存放最近用过的名字以及从何处获得名字映射信息的记录。高速缓存可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。<br>
为保持高速缓存中的内容正确,域名服务器应为每项内容设置<strong>计时器</strong>,并处理超过合理时间的项(例如,每个项目只存放两天)。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。</p>
<h1 id="参考资料">参考资料</h1>
<p>《计算机网络(第七版)》 谢希仁 著,电子工业出版社<br>
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社</p><br><br>
来源:https://www.cnblogs.com/linfangnan/p/13372484.html
頁:
[1]