DNS全称为(Domain Name System),又名域名服务器,作用是把IP地址和网址名称互换,比如说你登陆新浪要输入新浪网址www.sina.com,而不是输135.165.12.37,因为IP地址太麻烦还不好记,你输入www.sina.com然后通过DNS解析就是135.165.12.37,网址比IP地址直观而且好记,DNS就起到网址解析的作用。1、域名DNS为什么不叫“名字”而叫“域名”呢?这是因为这种命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。IP地址是由32位的二进制数字组成的。用户与网上某台主机通信时,很难记住长达32位的二进制主机地址,大家愿意使用比较容易记忆的主机名字。但是电脑在处理IP数据报时,不使用域名而是使用IP地址,因为IP地址长度固定,而域名的长度不固定,机器处理起来比较困难。网络太大了,只使用一个域名服务器是不可行的,1983开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS,采用客户服务器方式,DNS使大多数名字都在本地解析(resolve),仅有少量解析需要在网上通信,由于DNS是分布式系统,即使单点故障,也不会妨碍整个DNS系统的正常运行,所以效率很高。域名到IP地址的解析是由分布在网络的许多域名服务器共同完成的,人们把运行域名服务器程序的电脑称为域名服务器,域名到IP地址的解析过程的过程如下:当某个应用需要把主机名解析为IP地址时,该应用进程就调用解析程序,并称为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可进行通信,若本地域名服务器不能回答该请求,则此域名服务器就暂时称为DNS的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。2、域名结构 因网络的用户数量较多,命名时采用的是层次树状结构的命名方法。任何一个连接在网络的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。“域”(domain)是名字空间中一个可被管理的划分,DNS规定域名中的标号都有英文和数字组成,每一个标号不超过63个字符(为了记忆方便,一般不会超过12个字符),也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的字符写在最右边。由多个标号组成的完整域名总共不超过255个字符。DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级域名代表什么意思。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理。用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。域名只是逻辑概念,并不代表计算机所在的物理地点。现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:(1)国家顶级域名:cn代表中国,us代表美国,uk代表英国等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。(2)通用顶级域名:最常见的通用顶级域名有7个,即com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。 (3)基础结构域名:这种顶级域名只有一个,即arpa用于反向域名解析,因此称为反向域名。  3、域名服务器 DNS采用的是树状结构,每一个节点都采用一个域名服务器,这样会使得域名服务器的数量太多,使域名服务器系统的运行效率降低,所以在DNS中采用划分区的方法来解决,一个服务器所负责管辖(或有权限)的范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区,在一个区中的所有节点必须是能够连通的,每一个区设置相应的权限域名服务器,用来保存该区中的所有主机到域名IP地址的映射。DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管理单位。当某个DNS服务器不能进行域名到IP地址的转换时,它就会设法找网上别的域名服务器进行解析,网上的DNS服务器也是按照层次安排的,每一个域名服务器只对域名体系中的一部分进行管辖,根据域名服务器所起的作用,可以把域名服务器划分为下面四种不同的类型:3.1、根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和ip地址。不管是哪一个本地域名服务器,要对网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。 3.2、顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。 3.3、权限域名服务器:负责一个“区”的域名服务器。 3.4、本地域名服务器:本地服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。  4、域名的解析过程 4.1、主机向本地域名服务器的查询一般都是采用递归查询。递归查询就是如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。 4.2、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询就是当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器你下一步应当向哪一个域名服务器进行查询。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。 举例说明:域名a主机打算发送邮件给b,需要哪几步呢!1、主机a先向本地服务器进行递归查询。 2、本地服务器采用迭代查询,它先向一个根域名服务器查询。 3、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器的IP地址。 4、本地域名服务器向顶级域名服务器进行查询。 5、顶级域名服务器告诉本地域名服务器,下一步应查询的权限服务器的IP地址。 6、本地域名服务器向权限域名服务器进行查询。 7、权限域名服务器告诉本地域名服务器,所查询的主机的IP地址。 8、本地域名服务器最后把查询结果告诉a。 整个查询过程共用到了8个UDP报文,为了提高DNS查询效率,并减轻服务器的负荷和减少网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。 如在上面的查询过程中,如果在a主机上不久前已经有用户查询过b的IP地址,那么本地域名服务器就不必向根域名服务器重新查询b的IP地址,而是直接把告诉缓存中存放的上次查询结果告诉用户。 由于名字到地址的绑定并不经常改变,为保持告诉缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。 不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,不需要花费什么精力就能确保数据的一致性。
本文出自快速备案,转载时请注明出处及相应链接。