应用层:DNS 域名系统

禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!

DNS 域名系统

功能与任务

域名系统 DNS(Domain Name System) 是互联网使用的命名系统,用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS,但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。DNS 是:

  1. 一个有分层的 DNS服务器实现的分布式数据库;
  2. 一个使得主机能够查询分布式数据库的应用层协议。

采用客户服务器方式,使大多数名字都在本地进行解析。名字到 IP 地址的解析是由若干个域名服务器程序完成的,域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。当一个应用进程需要把主机名解析为 IP 地址是,该用户进程就调用解析程序,并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报的方式发给本地域名服务器。本地域名服务器查找域名后,把对应的 IP 地址放在回答报文中返回。若本地域名服务器不能回答该请求,则该本地域名服务器就暂时成为 DNS 中的另一个客户,并向其他域名服务器发出查询请求。

为什么是分布式?

DNS 的一种简单的设计是,在互联网中只使用一个 DNS 服务器,该服务器包含所有的映射,所有客户的查询都发往该服务器。现在来考虑下,为什么 DNS 不使用集中式设计而是使用分布式?原因主要有一下 4 点:

  1. 单点故障:如果该 DNS 服务器崩溃,则整个因特网都会因此瘫痪;
  2. 通信容量:单个 DNS 服务器不得不处理所有的 DNS 查询(数量级是上亿台主机);
  3. 远距离的集中式数据库:单个 DNS 服务器不可能“邻近”所有的查询客户,会导致严重的时延;
  4. 维护:单个 DNS 服务器不得不为所有因特网主机保留记录,这使得数据库异常庞大,且需要频繁更新。

总而言之,单一的 DNS 服务器上运行集中式数据库,完全没有拓展能力。

域名结构

互联网采用了层次树状结构的命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字即域名。域名的结构由标号序列组成,各标号之间用点隔开,各标号分别代表不同级别的域名,例如“mail.cctv.com”。
域名只是个逻辑概念,并不代表计算机所在的物理地点。变长的域名和使用有助记忆的字符串,是为了便于人来使用,而 IP 地址是定长的 32 位二进制数字则非常便于机器进行处理。域名中的“点”和点分十进制 IP 地址中的“点”并无一一对应的关系。点分十进制 IP 地址中一定是包含三个“点”,但每一个域名中“点”的数目则不一定正好是三个。
互联网域名空间结构可以抽象为一个树结构,最上面的根结点没有名字。根下面一级的结点就是顶级域名,顶级域名往下划分子域名,即二级域名,还可以继续往下划分。

域名服务器

一个服务器所负责管辖的(或有权限的)范围叫做区 (zone),各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。

当某个 DNS 服务器不能进行 IP 地址转换时,就设法找互联网上别的域名服务器进行解析。互联网上的 DNS 域名服务器也是按层次安排的,每一个域名服务器都只对域名体系中的一部分进行管辖。

DNS 域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器。当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

根域名服务器

根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。在互联网上共有 13 个不同 IP 地址的根域名服务器,它们的名字是用一个英文字母命名,从 a 根域名服务器共有 13 套装置,不是 13 个机器。到 2016 年 2 月,全世界已经在 588 个地点安装了根域名服务器,使世界上大部分 DNS 域名服务器都能就近找到一个根域名服务器。
为了提供更可靠的服务,在每一个地点的根域名服务器往往由多台机器组成。根域名服务器并不直接把域名直接转换成 IP 地址,在使用迭代查询时,根域名服务器把下一步应当找的顶级域名服务器的 IP 地址告诉本地域名服务器。

顶级域名服务器

顶级域名服务器(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。

权限域名服务器

权限域名服务器负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。

本地域名服务器

当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。每一个互联网服务提供者 ISP,或一个大学甚至大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器

域名解析

递归查询

主机向本地域名服务器的查询,一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。

迭代查询

本地域名服务器向根域名服务器的查询,通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

高速缓存

每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。高速缓存可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如,每个项目只存放两天)。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。

参考资料

《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社

posted @ 2020-07-25 12:56  乌漆WhiteMoon  阅读(694)  评论(0编辑  收藏  举报