域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP
地址来实现,域名解析就是将域名重新转换为IP
地址的过程。一个域名对应一个IP
地址,一个IP
地址可以对应多个域名,所以多个域名可以同时被解析到一个IP
地址,域名解析需要由专门的域名解析服务器DNS
服务器来完成。
DNS
解析查询的方式有两种:递归解析查询和迭代解析查询,通常来说,客户端和本地域名服务器是递归查询,而本地域名服务器和其他域名服务器之间是迭代查询。
假如我们本地客户端是A
,有三个域名解析服务器B
、C
、D
,首先在本地客户端A
发起一次DNS
解析请求,对B
服务器请求解析DNS
,B
服务器查询后并无解析记录,则B
服务器对C
服务器请求解析DNS
,,C
服务器查询后并无解析记录,则C
服务器对D
服务器请求解析DNS
,,D
服务器查询到解析记录,将解析记录返回到C
服务器,C
服务器将解析记录返回到B
服务器,B
服务器将解析记录返回到A
服务器,完成一次递归解析查询。
假如我们本地客户端是A
,有三个域名解析服务器B
、C
、D
,首先在本地客户端A
发起一次DNS
解析请求,对B
服务器请求解析DNS
,B
服务器查询后并无解析记录,返回到A
未查询成功并携带C
服务器的地址,客户端A
对C
服务器请求解析DNS
,C
服务器查询后并无解析记录,返回到A
未查询成功并携带D
服务器的地址,客户端A
对D
服务器请求解析DNS
,查询到解析记录,并将解析记录返回到A
,完成一次迭代解析查询。
在输入URL
后浏览器首先检查自身的DNS
缓存是否对于此域名有IP
地址,通常浏览器对于自身DNS
解析缓存保留时间比较短,且数量也有限制,chrome
对于域名解析的缓存时间为60s
,可以通过地址栏输入chrome://net-internals/#dns
清除DNS
缓存。
HOSTS
文件是一个系统文件,其作用就是将域名与其对应的IP
地址建立一个对应关系,当进行DNS
解析时系统会首先自动从HOSTS
文件中寻找对应的IP
地址,如果没有找到,则系统会再将域名提交DNS
域名解析服务器进行IP
地址的解析。Windows
操作系统的此文件通常在C:\Windows\system32\drivers\etc\
目录下,Linux
操作系统的此文件通常在/etc/
目录下。
客户端向本地域名服务器请求解析,本地域名服务器一般是运营商ISP
提供的,一般是通过53
端口发送UDP
报文请求服务器解析DNS
,从客户端到本地域名服务器的解析是递归查询的。假如请求的解析域名为example.expamle.com
,本地域名解析服务器未命中,则本地域名解析服务器开始迭代查询。
本地域名解析服务器向根域名服务器a.rootserver.net
进行请求,根域名服务器查询到.com
顶级域名所对应的服务器,然后向本地域名服务器返回.com
顶级域名所对应的服务器解析地址。
本地域名解析服务器向顶级域名解析服务器进行请求,顶级域名解析服务器查询到example.com
二级域名所对应的服务器,然后向本地域名服务器返回example.com
二级域名所对应的服务器解析地址。
本地域名解析服务器向二级域名解析服务器进行请求,二级域名解析服务器如果未命中,则会向本地域名解析服务器返回example.example.com
所对应的权限域名解析服务器的地址,通常来说二级域名解析服务器及以后都可以称为权限域名解析服务器。
本地域名解析服务器向权限域名解析服务器进行请求,权限域名解析服务器查询到解析记录后,便返回本地域名解析服务器,本地域名解析服务器将查询到的IP
地址返回到客户端,并将域名与IP
的对应关系进行缓存,假如在权限域名解析服务器还未查询到域名对应的IP
地址,则返回解析失败,此外如果客户端还配置了多个DNS
服务器的地址,则在查询失败后还会继续向其他所配置的DNS
解析服务器进行查询。