以下是DNS解析的全过程:
假定域名为m.xyz.com的主机想知道另一台主机(域名 y.abc.com)的IP地址。例如,主机m.xyz.com打算发送邮件给主机y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是图a的查询步骤:
- 主机m.xyz.com先向其本地域名服务器dns.xyz.com进行递归查询。
- 本地域名服务器蔡勇迭代查询。它先向一个根域名服务器查询。
- 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器dns.com的IP地址
- 本地域名服务器向顶级域名服务器 dns.com进行查询。
- 顶级域名服务器dns.com 告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。
- 本地域名服务器向权限域名服务器dns.abc.com进行查询。
- 权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
- 本地域名服务器最后最后把查询结构告诉主机 m.xyz.com。
我们注意到,这8个步骤总共要使用8个UDP用户数据报的报文。本地域名服务器经过三次迭代查询后,从权限域名服务器dns.abc.com得到了主机y.abc.com的IP地址,最后把结构返回给发起查询的主机m.xyz.com。
图b是本地域名服务器采用递归查询的情况,在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的(步骤3至6)。只是在步骤7,本地域名服务器从根域名服务器得到了所需的IP地址。最后在步骤8,本地域名服务器把查询结果告诉主机m.xyz.com。整个的查询也是使用8个UDP报文。
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上DNS查询报文数量,在域名服务器中广泛地使用了高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
例如,在图a的查询过程中,如果在不久前已经有用户查询过域名为y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询,而是直接把高速缓存中存放的上次查询结果告诉用户。
假如本地域名服务器的缓存中并咩有y.abc.com的IP地址,而是存放着顶级域名服务器dns.com的IP地址,那么本地域名服务器也可以不向根域名服务器进行查询,而是直接向顶级域名服务器发送查询报文。
有的时候不但本地域名服务器中需要高速缓存,在主机中也很需要,许多主机在启动时从本地域名服务器中下载域名和地址的全部数据,维护存放在自己最近使用的域名高速缓存,并且只在从缓存中找不到名字时才会使用域名服务器。
参考:《计算机网络》第七版