最近的工作有涉及到这个方面,有试图从书上和网络上获取一些信息,但没有找到一些细节上的东西,或者有些东西说的很难懂,现在把我自己了解的做一个小结,把这个说的简单易懂一些。
DNS(Domain Name System)字面翻译是域名系统,但是现在普遍的翻译是域名解析系统。一台主机去找某个服务器的时候,需要的是该服务器的IP,而用户一般很难记住10.3.0.1这样的地址,所以域名就有了存在的必要。比如,www.baidu.com就是一个域名,它显然要比119.75.218.45这个数字长串要好记,访问百度的时候输入www.baidu.com即可。但是,对于机器而言,处理格式很整齐的IP地址要容易而高效一些。所以就需要有一个系统把用户习惯的域名变成机器习惯的IP,这个过程就叫做域名解析。
域名解析通常分为两种,静态域名解析和动态域名解析(DDNS,Dynamic Domain Name System)。说到静态解析需要先提到本地域名服务器(域名解析系统分布式的系统完成,很多服务器位于各个网络节点上,其他的服务器类型在后面的静态解析中会提到,现在提到的静态解析只和本地域名服务器相关),任何一个网络供应商(ISP,Internet Service Provider)都可以拥有本地域名服务器,它可以存在于任何一个小的范围内,比如说一个大学可以有本地域名服务器,大学下面的一个系也可以有本地域名服务器。作为一种静态的方法,需要手工在本地域名服务器上添加域名和IP地址的映射关系,建成一张映射表。当一台主机想要访问一台服务器时,主机就会拿着要访问的服务器的域名去访问本地域名服务器,本地域名服务器查自己的映射表,将其对应的IP地址返回给主机,这样就完成了域名到IP的转换,这就是静态解析。
再说说动态域名解析。首先,一个域名是有级别的概念,还是以www.baidu.com为例,在这个域名中com是顶级域名,baidu是二级域名,www是三级域名。其次,动态解析的过程不是一蹴而就的,而是几级域名分开解析的,不同级别的域名在不同类型的服务器上解析。服务器氛围根域名服务器、顶级域名服务器和权限域名服务器。根域名服务器是最重要的,是整个域名解析系统里必不可少的,全世界只有7个根域名服务器,不是7台机器,而是分布于各地的7套机器,每套机器下属的服务器个数不一定一样,世界上服务器一共有100多台,中国有三台根域名服务器,分别在北京、香港和台北。顶级域名服务器是根域名服务器下一级得服务器,负责管辖顶级域名(顶级域名有哪些这个很好查,这里就不说了)。权限域名服务器就是最底层的服务器,里面存的就是域名和IP地址的映射,权限域名服务器的多少也和需求有关,一般一些大型的单位通常会架设多台权限域名服务器。具体的解析步骤如下图所示:
图1 DNS动态解析(迭代)
如图所示,和静态解析方式一样,PC机会首先访问本地域名服务器,此时,本地域名服务器并没有所请求的域名和IP的映射关系,它会首先去访问根域名服务器。而根域名服务器只负责管辖顶级域名服务器,所以它只有顶级域名服务器和IP地址的对应关系,它此时会把com服务器的IP地址返回给本地域名服务器。本地域名服务器拿到这个IP后,会用这个IP找到com顶级域名服务器,向其发出请求,而顶级域名服务器只管辖下面的二级域名,所以它只能把baidu.com的服务器IP地址返回给本地域名服务器。本地域名服务器拿到这个IP地址后,会找到baidu.com的权限域名服务器,权限域名服务器会找寻到www.baidu.com对应的IP映射,并将其返回本地域名服务器,再由本地域名服务器返回给PC机,这一次的解析过程就结束了。
图2 DNS动态解析(递归)
这种情况是递归的场景,区别显而易见,第2步,本地域名服务器向根域名服务器请求后,根域名服务器并不会向其返回com顶级域名服务器的IP地址,而是自己作为一个DNS客户去访问下面的顶级域名服务器,最后得到结果后,再逐级返回给本地域名服务器。
如果主机的每次请求都去动态查询,这样会增大网络上的开销,这样显然是不划算的。所以在DNS系统的服务器里,每台服务器都有高速缓存,用以存储通过动态查询而获得的映射关系,下次查询时就能够直接调用。高速缓存里的映射关系和静态解析在本地域名服务器手工添加的映射关系不同,高速缓存建立起来的映射表有老化时间,它会清除掉长时间不用的映射关系。
而对于什么时候采用递归方法,什么时候采用迭代方法,DNS客户端设置时用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求直到返回最终的结果。而DNS服务器之间为了减小开销,一般会使用迭代方法。