域名解析是指把域名映射成IP地址或把IP地址映射成域名的过程。前者称为正向解析,后者称为反向解析。当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文,以UDP数据报方式发往本地域名服务器。域名解析的方式有两种:递归查询和递归与迭代相结合的查询。递归查询给根域名服务造成的负载过大,所以在实际中几乎不使用。
常用的是递归与迭代相结合的查询方式,该方式分为两部分
1)主机向本地域名服务器的查询采用的是递归查询
也就是说,如果本地主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步的查询。在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是递归在其他几个域名服务器之间进行的。然后,本地域名服务器从根域名服务器得到了所需的IP地址,最后本地域名服务器将查询结果告诉主机m.xyz.com
2)本地域名服务器向根域名服务器的查询是迭代查询
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器“你下一步应该向哪一个顶级域名服务器进行查询”。然后让本地域名服务器向这个顶级域名服务器进行后续的查询。同样,顶级域名服务器收到查询报文后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应该向哪一个权限域名服务器查询。最后,知道所要解析的域名的IP地址后,把这个结果返回给发起查询的主机
下面举例说明域名解析的过程,假设某客户想要获知域名为y.abc.com主机的IP地址,域名解析的过程(共使用8个UDP报文)如下:
- 客户机向本地域名服务器发出DNS请求报文
- 本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS客户的身份向根域名服务器发出解析请求
- 根域名服务器收到请求后,判断该域名属于.com域,将对应额顶级域名服务器的dns.com的IP地址返回给本地域名服务器
- 本地域名服务器向顶级域名服务器dns.com发出解析请求报文
- 顶级域名服务器dns.com收到请求后,判断该域名属于abc.com.将对应的授权域名服务器dns.abc.com的IP地址返回给本地域名服务器
- 本地域名服务器向授权域名服务器dns.abc.com发起解析请求报文
- 授权域名服务器dns.abc.com收到请求后,将查询结果返回给本地域名服务器
- 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机
为了提高DNS的查询效率,并减少因特网上的DNS查询报文数量,在域名服务器中广泛的使用了高速缓存。当一个DNS服务器接收到DNS查询结果时,它能将该DNS信息缓存在高速缓存中。这样当一个相同的域名查询到达该DNS服务器时,该服务器就能直接提供所要的IP地址,而不需要再去向其他的DNS服务器询问。因为主机名和IP地址的映射不是永久的,所以DNS服务器将在一段时间后丢弃告诉缓存中的信息