DNS域名解析

所谓DNS域名解析就是把互联网中的命名系统转换成对应的IP地址。
互联网中的域名解析系统被设计成C/S结构的数据库系统,称为域名服务器,数据库中存的有域名–IP地址的映射关系。不过大多数的域名解析都是在本地进行解析的,所以总和来说DNS域名解析的效率很高。
注:一个域名可能对应多个IP,根据场景,不同的本地域名服务器中对应的IP地址可能是不同的。比如百度在深圳和北京都已一台服务器,那么其中深圳的本地域名服务器中存的可能是深圳那台百度服务器的IP地址,而北京的本地域名服务器中存的是北京那台百度服务器的IP地址。

域名服务器

域名服务器可以分为四种,分别是根域名服务器,*域名服务器,权限域名服务器以及本地域名服务器,其中根域名服务器的等级最高,其次是*,权限和本地。
所有的服务器系统可以看作是一个树状结构,如图所示
DNS域名解析

  • 根域名服务器,是最高层次的服务器,他知道所有*域名服务器的域名和IP,当本地域名服务器无法解析一个域名时会首先求助于根域名服务器,因为根域名服务器相当于树的根节点,通过根可以遍历查找所有的节点,根域名服务器的实现也是源于此。
  • *域名服务器,管理存在该域名服务器中的所有二级域名
  • 权限域名服务器,管理一个区的域名服务器。
  • 本地域名服务器,他不存在树状结构中,但一台主机发出DNS请求时会首先去本地域名服务器进行解析。
    注:由于是树状结构,所以上一级的域名服务器存着所有下级域名服务器的域名和IP,类似于树的子指针。

域名解析过程

在分析应解析过程成之前要先了解两个本机的解析系统,在前面我们说过大多数的域名解析是在本地完成的,因为在本机中有两种域名的存储形式

  • host文件,由用户自己写入映射关系,且查找的优先级最高
  • DNS缓存,DNS缓存会根据用户浏览的网页把对应的IP存起来,优先级仅次于host文件,关机会清除。所以在开机的时候DNS缓存会向本地域名服务器发出请求,把常用的域名对应的IP存下来,便于用户的查找,提高效率。

在用户键入域名时会首先查找本地的host文件,如果没有对应关系就回去DNS缓存中查询,如果还是灭有才会向本地域名服务器发出递归查询请求,这个时候本地域名服务器就会向根域名服务器发出迭代查询请求。

递归查询

DNS域名解析
递归查询如图所示本地域名服务器首先询问根域名服务器,根域名服务器会询问*域名服务器,*域名服务器又会询问权限域名服务器,权限域名服务器查找到之后会返回给*,*得到后返回给跟域名服务器,根域名得到后又返回给本地域名服务器,也就是说其中的查询过程是由各级都参与完成的。
总结:本地域名服务器一旦发出请求,得到的只有ip地址或者没有查到的情况,请求和查询方式均在服务器之间进行,这种方式会消耗高级服务器的资源,一般不在此使用。

迭代查询

DNS域名解析
迭代查询如图所示,本地域名服务器先询问根域名服务器,根域名服务器查询后会将可能存在映射关系的*域名服务器发给本地域名服务器,本地域名服务器接着向该*域名服务器发出询问,*域名服务器又会将可能存在映射关系的权限域名服务器发给本地域名服务器,本地域名服务器再去想权限域名服务器发出查询请求,最后再把结果会送给客户。
总结:本地域名服务器发出请求,得到的回应会是ip地址或者下一级的服务器ip地址,所有的请求查询工作由本地域名服务器进行,减少了高级服务器的负担。

注:一般为了方便解析,本地域名服务器如果查到了本地储存库中没有对应的映射关系,在请求得到结果之后会把结果存在本地储存库中,便于下一次主机进行查询。