什么是域名系统DNS

一、DNS概述

我们知道用户在与互联网上的主机通信时,必须知道对方的 IP 地址。但是每个 IP 地址都是由 32 位的二进制组成,即使是十进制的 IP 地址表示形式,用户想要记住也是很难的一件事,况且互联网有那么多的主机。

互联网中的主机通常不仅仅只有 IP 地址,还有对应的便于用户记忆的主机名字,比如 www.baidu.com/。产生于应用层上的域名系统 NDS(Domain Name System)就可以用来把互联网上的主机名转换成 IP 地址。

互联网中的域名系统 DNS 被设计成一个层次树状结构的联机分布式数据库系统,并且采取的是客户服务器的方式。DNS 使大多数名字都在本地进行解析,只有少量的解析需要在互联网通信,因此效率很高。采取分布式的一个好处是,即使单个计算机出了故障,也不会妨碍 DNS 系统的正常运行。

域名到 IP 地址的解析是通过许多分布在互联网上的域名服务器完成的。解析的主要过程如下:当一个主机中的进程需要把域名解析为 IP 地址时,该进程就会调用解析程序,并成为 DNS 的 一个客户,把待解析的域名放在 DNS 的请求报中,以 UDP 用户数据报方式发送给本地域名服务器。本地域名服务器在查找域名后,把对应的 IP 地址放在回答报文中返回。获得 IP 地址的后主机即可进行通信。

二、域名结构


我们通过域名树的方式来查看域名的结构,可以看出来,它实际上是一个倒过来的树,最上面的是根,没有对应的名字。因为根没有名字,所以根下面的一级节点就是顶级域名,往下同理。我们以 www.baidu.com/ 为例,www 是三级域名,baidu 是二级域名,com 是顶级域名,各级域名之间通过 . 相连。每个互联网上的主机域名都对应一个 IP 地址,并且这个域名在互联网中是唯一的

三、域名服务器

根据域名服务器所起到的作用,可以把域名服务器分为四种不同的类型。

3.1根域名服务器

根域名服务器(root name server)是最高层次的域名服务器,也是最重要的域名服务器,全球共设有 13 个根域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。当其他的域名服务器无法解析域名时,会首先求助于根域名服务器。假如所有的根域名服务器都挂了,那么整个互联网的 DNS 系统就无法工作了,因为采取的分布式结构,所以只要有一台能够正常工作,互联网的 DNS 系统就不会受到影响。

3.2顶级域名服务器(TLD)

顶级域名服务器(top-level-domain) 负责管理在该顶级域名服务器上注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答。

3.3权限域名服务器

它是负责一个区的域名服务器,当一个权限域名服务器没有给出最后的查询结果时,就会告诉发出查询请求的 DNS 客户,下一步应当查询哪一个权限域名服务器。

3.4本地域名服务器

本地域名服务器(local name server)并不属于上面图示的服务器层次结构,但是它在域名服务系统却发挥着至关重要的作用。当一台主机发出 DNS 查询请求时,这个查询请求报文就会发送给本地域名服务器。每一个互联网提供者,或者一个大学,甚至小到一个学院,都可以拥有一台本地域名服务器,这种域名服务器也被称为默认域名服务器。我们本地网络服务连接的域名服务器指的就是本地域名服务器。
这里写图片描述

四、域名解析过程

域名解析查询的方式有两种:迭代查询与递归查询。

4.1迭代查询

本地域名服务器向根域名服务器的查询方式通常采取迭代查询(iterative query)。迭代查询有以下的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“我这里没有你要的查询结果,你需要向哪一台域名服务器进行查询”。然后本地域名服务器进行后续的查询(不替代本地域名服务器)。

4.2递归查询

主机向本地域名服务器的查询一般都采用递归查询(recursive query)。所谓的递归查询就是:如果主机所询问的本地域名服务器不知道被查出来的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文(替代该主机继续查询),而不是主机自己进行下一步的查询。因此,递归查询返回的结果要么是所查询的 IP 地址,要么报错,表示无法查到所需要的 IP。

五、DNS记录缓存

针对上面两种方式,我们可以知道不管是递归查询还是迭代查询,都会发送 8 个 UDP 用户数据报的报文。为了提高 DNS 的查询效率,减轻根域名服务器的负荷和 DNS 数据报的查询数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

假设我们要查询www.baidu.com/域名对应的 IP 地址,如果本地域名服务器上有该域名对应的 IP 地址,那么可以直接从本地域名服务器上获得对应的 IP 地址,而不需要到根域名服务器上进行查询。当本地域名服务器查询不到 IP 地址时,本地域名服务器也可以不向根域名服务器发送请求报文,而是直接向顶级域名服务器发送查询请求报文。

不仅在本地域名服务器中有高速缓存,在主机中也有。很多主机在启动的时候从本地域名服务器下载名字和地址的全部数据库,维护存放自己使用的域名的高速缓存,只有在缓存中找不到名字时才使用域名服务器。

参考书籍:
《计算机网络》谢希仁 著

猜你喜欢

转载自blog.csdn.net/codejas/article/details/80086068