dns查询过程解析
DNS查询模式有递归查询和迭代查询,他们的区别如下:
(1)递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果
为止。
客户端和DNS服务器(本地域名服务器)之间使用的是递归查询,而DNS服务器之间使用的是迭代查询.
图一:
图二:
迭代查询 递归查询
dns解析的过程
客户端通过域名访问站点时,必须要有DNS服务器解析到指定的IP地址上,才能进行下一步的
访问。客户端发起访问请求后,首先检查本地host文件,检查是否存在对应的IP映射关系,如果有则
直接通过映射的IP进行访问;如果没有则将请求发送给首选的DNS服务器。
客户端和DNS服务器之间使用的是递归查询,而DNS服务器之间使用的是迭代查询.
递归查询时要求所请求的DNS服务器应答给客户端所请求的域名和IP的映射关系;
迭代查询时所请求的DNS服务器应答给客户端的不一定是域名和IP地址的映射关系,也可以是另一台
DNS服务器,让客户端再将请求发送到另一台DNS服务器.
下面按上图根据实例介绍DNS解析全过程.
客户端发起访问请求www.163.com:
1.查看本地hosts文件,发现没有www.163.com IP 映射关系,将请求发送给本地DNS服务器
----递归查询----
2.本地DNS服务器不包含163.com的权威域,不存在对应的www记录,因此将请求转发到根域名服务器
(假如 a.root-servers.net.)
3.根域名DNS服务器会返回负责.com域解析的服务器(假如 a.gtld-servers.net.)给本地DNS服务器,
本地DNS服务器再将请求发送给 a.gtld-servers.net
4..com域名服务器只能返回负责163.com域的解析服务器(如 ns1.nease.net.)给本地DNS服务器,本地
DNS服务器再将请求发送给ns1.nease.net.
5.由ns1.nease.net.域名服务器返回www.163.com 的 IP映射关系给本地DNS服务器
(2-5过程)----迭代查询----
6.本地DNS服务器将结果保存到本地缓存,并保持TTL时间,同时将结果应答给客户端.
----递归查询---- ----查询结束----
7.当其他客户端再次向本地DNS服务器查询www.163.com时,在TTL时间内,本地DNS服务器不再向根
域名服务器转发请求,而是直接从缓存中读取数据应答给客户端. 如果已经超过TTL时间,则本地DNS
服务器会再次经历一次上诉2-6的过程.
本地DNS服务器在代替客户端向其他服务器查询时,客户端完全处于等待状态。
递归查询时,返回的结果只有两种:查询成功或查询失败.
迭代查询,又称作重指引,返回的是最佳的查询点或者主机地址.
为了提高DNS查询效率,并减轻服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
例如,在上面的查询过程中,如果在客户端主机上不久前已经有用户查询过163.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询163.com的IP地址,而是直接把告诉缓存中存放的上次查询结果(即163.com的IP地址)告诉用户。
由于名字到地址的绑定并不经常改变,为保持告诉缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。
不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。