互联网上都是通过URL来发布和请求网络资源的,而URL中的域名需要解析成IP地址,才能与主机建立连接,而将域名解析成IP地址就是DNS的责任。
当在一个客户端上输入一个URL时,DNS解析一般会有将近十个步骤:
1.首先浏览器会检查缓存中是否有该URL对应的ip地址的解析,如果缓冲中有该解析,解析过程就将结束。浏览器缓存域名也是有限制的,大小与时间都有限制,域名被缓存的时间限制由TTL属性来控制。缓存时间太大时,一旦域名被解析的ip地址有变化时,以致该域名不能被正确解析,访问不到服务器也就是对应的网站。
2.如果浏览器中没有该URL的缓存ip地址,接下来就回去本地的操作系统文件中查看是否有域名所对应的ip地址的缓存,windows下的该文件在C:\Windows\System32\drivers\etc\hosts可以设置,可以配置任何域名所对应的ip地址。很多病毒或者黑客都会使用该方式进行URL拦截,所以在windows7中已将该文件设置为只读。
前面这两个步骤都是在本机中进行检查有无该URL的缓存,如果本机中无法完成域名的解析,接下来就会真正的请求DNS服务器来解析该域名了
3.在网络配置中,会有DNS服务器这一项(windows可以在dos窗口中输入ipconfig/all来查看),操作系统会把该域名发送到这个LDNS(Local dns服务器),LDNS通常都提供本地互联网提供的DNS解析服务,一般该服务器都是运营商提供在各个城市中的某个位置。这个专门的域名解析服务一般性能都很好,有着很好的缓存功能来缓存解析过的结果。缓存时间是有时间限制的,一般在LDNS限制缓存时间长短的不是缓存空间的大小影响的,一般是受到该域名的失效时间控制的。大约80%的域名服务器解析到该出就能解析完成,所以dns主要承担了域名解析的工作。
4.如果在LDNS域名解析仍然没有命中,那么LDNS会请求到Root Server(根)服务器进行解析。
5.根域名服务器会返回给LDNS一个顶级域名服务器地址(gTLD(Generic top-level domain) Server)。dTLD是顶级域名服务器,如com cn org等
6.LDNS会向上一步返回的gTLD发送请求
7.gTLD会根据域名查找该域名所对应Name Server域名服务器。Name Server就是注册域名时的服务器,一般在某个域名服务商下注册域名时,该域名服务商就会有提供的域名服务器
8.LDNS会向该Name Server域名服务器发送请求,Name Server服务器会根据域名到映射关系表中查找到该域名所对应的ip地址,并将该映射关系以及一个TTL值返回给LDNS
9.LDNS接受返回的域名与ip地址的映射,并将该映射缓存到LDNS服务器中,缓存时间由返回的TTL值决定
10.将解析的结果返回给用户,用户根据TTL值将该域名以及ip地址的映射关系缓存到本地操作系统中。域名解析结束。
实际的DNS解析可能更复杂些,不止这十步,例如Name Server也存在多级,或者有一个GTM来负载均衡,这些都有可能映射域名解析的过程。