DNS的因特网标准是RFC 1034,1035,被设计成为一个联机的分布式数据库系统。

DNS规定,域名中的标号都是由英文字母和数字组成,每个标号不超过63个字符,也不分大小写,(例如,www.baidu.com或WWW.BaiDU.coM在域名中是等效的).标号中除了连接符(-)外不能使用其他的标点符号。  

根域名服务器 (root name server):根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。根域名服务器是最重要的服务器,因为不管是哪一台本地服务器,若要对因特网上的任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。在因特网上共有13个不同IP地址的根域名服务器,它们的名字是用一个英文字母命名,从a一直到m(前13个字母)。这些根域名服务器对应的域名分别是a.rootservers.net,...,m.rootservers.net。但请注意,根域名服务器的数目并不是13个机器,而是13套装置(13 installations)[W-ROOT].实际上截至2014年10月,全球有504台根服务器,被编号为A到M共13个标号大部分借由任播(Anycast)技术,编号相同的根服务器使用同一个IP,504台根服务器总共只使用13个IP,因此可以抵抗针对其所进行的分布式拒绝服务***(DDoS)。中国大陆在北京有两台编号为L的镜像,编号为F、I、J的镜像各一台,共5台;香港有编号为D、J的镜像各2台,编号为A、F、I、L的镜像各一台,共8台;台湾则有编号为F、I、J各一台,共3台。

任播:任播的IP数据包的终点是一组在不同地点的主机,但具有相同的IP地址,IP数据包交付给离数据源点最近的一个主机。

DNS迭代查询和递归查询的过程。

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

第二,本地域名服务器向根域名服务器发出查询通常是采用迭代查询 (iterative query)。迭代查询的特点是:当根域名服务器收到本地域名服务器的迭代请求报文时,要么给出要查询的IP地址,要么告诉本地域名服务器:"你下一步应当向哪一个域名服务器进行查询"。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个个权限域名服务器进行查询。本地域名服务器就这样进行迭代查询。最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询。这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。

DNS迭代查询和递归查询_第1张图片

DNS☆询举例:(a)本地域名服务器采用迭代查询:(b)本地域名服务器采用递归查询

假定域名为m.xyz.com的主机想知道另一个主机(域名为y.abc.com)的IP地址,


下面是图(a)的几个查询步骤:

1.主机m.xyz.com先向其本地域名服务器dns.xyz.com进行递归查询。

2.本地域名服务器采用迭代查询。它先向一个根域名服务器查询。

3.根域名服务器告诉本地域名服务器,下一次应查询的项级域名服务器dns.com的IP地址。

4.本地域名服务器向顶级域名服务器dns.com进行查询。

5.顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。

6.本地域名服务器向权限域名服务器dns.abc.com进行查询。

7.权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。

8.本地域名服务器最后把查询结果告诉主机m.xyz.com。

我们注意到,这8个步骤总共要使用8个UDP用户数据报的报文。本地域名眼务器经

过三次迭代代查询后,从权限域名服务器dns.abc.com得到了主机y.abc.com的IP地址,最后

把结果返回给发起查询的主机m.xyz.com。


 图(b)是本地域名服务器采用递归查询的情况。在这种情况下,本地域名服务器只需

向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的(步骤7

至6)。只是在步骤7,本地域名服务器从根域名服务器得到了所需的IP地址。最后在

步骤8,本地域名服务器把查询结果告诉主机m.xyz.com。整个的查询也是使用8个

UDP报文。

    为了提高DNS查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

    例如,在图(a)的查询过程中,如果在不久前已经有用户查询过域名为y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询y.abc.com的IP地址,而是直接把高速缓存中存放的上次查询结果(即y.abc.com的IP地址)告诉用户。

    假定本地域名服务器的缓存中并没有y.abccom的IP地址,而是存放着顶级域名服务器dns.com的IP地址那么本地域名服务器也可以不向根域名服务器进行查询,而是直接向com顶级域名服务器发送查询请求报文。这样不仅可以大大减轻根域名服务器的负荷,而且也能够使因特网上的DNS查询请求和回答报文的数量大为减少。

    由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如,每个项目只存放两天)。当域名服务器己从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。

    不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最逅使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机自然应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效的项。由于域名改动并不频繁,大多数网点不需花太多精力就能维护数据库的一致性。