图1-10是DNS域名解析的主要请求过程实例图。浏览器
如图1-10所示,当一个用户在浏览器中输入www.abc.com时,DNS解析将会有将近10个步骤,这个过程大致描述以下。当用户在浏览器中输入域名并按下回车键后,缓存
第1步:服务器
浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,若是缓存中有,这个解析过程就将结束。浏览器缓存域名也是有限制的,不只浏览器缓存大小有限制,并且缓存的时间也有限制,一般状况下为几分钟到几小时不等,域名被缓存。网络
第2步:负载均衡
若是用户的浏览器缓存中没有,浏览器会查找操做系统缓存中是否有这个域名对应的DNS解析结果。其实操做系统也会有一个域名解析的过程,在Windows中能够经过C:\Windows\System32\drivers\etc\hosts文件来设置,你能够将任何域名解析到任何可以访问的IP地址。若是你在这里指定了一个域名对应的IP地址,那么浏览器会首先使用这个IP地址。例如,咱们在测试时能够将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是由于有这种本地DNS解析的规程,因此黑客就有可能经过修改你的域名解析来把特定的域名解析到它指定的IP地址上,致使这些域名被劫持。性能
这致使早期的Windows版本中出现过很严重的问题,并且对于通常没有太多电脑知识的用户来讲,出现问题后很难发现,即便发现也很难本身解决,因此Windows 7中将hosts文件设置成了只读的,防止这个文件被轻易修改。测试
在Linux中这个配置文件是/etc/named.conf,修改这个文件能够达到一样的目的,当解析到这个配置文件中的某个域名时,操做系统会在缓存中缓存这个解析结果,缓存的时间一样是受这个域名的失效时间和缓存的空间大小控制的。操作系统
前面这两个步骤都是在本机完成的,因此在图1-10中没有表示出来。到这里尚未涉及真正的域名解析服务器,若是在本机中仍然没法完成域名的解析,就会真正请求域名服务器来解析这个域名了。blog
第3步:ip
如何、怎么知道域名服务器呢?在咱们的网络配置中都会有"DNS服务器地址"这一项,这个地址就用于解决前面所说的若是两个过程没法解析时要怎么办,操做系统会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。这个DNS一般都提供给你本地互联网接入的一个DNS解析服务,例如你是在学校接入互联网,那么你的DNS服务器确定在你的学校,若是你是在一个小区接入互联网的,那这个DNS就是提供给你接入互联网的应用提供商,即电信或者联通,也就是一般所说的SPA,那么这个DNS一般也会在你所在城市的某个角落,一般不会很远。在Windows下能够经过ipconfig查询这个地址。在Linux下能够经过以下方式查询配置的DNS Server ( $cat /etc/resolv.conf )
这个专门的域名解析服务器性能都会很好,它们通常都会缓存域名解析结果,固然缓存时间是受域名的失效时间控制的,通常缓存空间不是影响域名失效的主要因素。大约80%的域名解析都到这里就已经完成了,因此LDNS主要承担了域名的解析工做。
第4步:
若是LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。
第5步:
根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。
第6步:
本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。
第7步:
接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server一般就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
第8步:
Name Server域名服务器会查询存储的域名和IP的映射关系表,正常状况下都根据域名获得目标IP记录,连同一个TTL值返回给DNS Server域名服务器。
第9步:
返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。
第10步:
把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
在实际的DNS解析过程当中,可能还不止这10个步骤,如Name Server也可能有多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析的过程