第一步:本地客户端如果访问一个网站,首先需要dns解析,先查看本地的host文件后将该请求发送给本地域名服务器
第二步:但本地DNS缓存收到请求后,就先查询本地的缓存,如果有该记录,则本地的域名服务器就直接把查询的结果返回
第三步:如果本地DNS缓存中没有该记录,则本地域名服务器就直接把请求发送给根域名服务器,然后根域服务器再返回给本地域名服务器一个所查寻域(根的子域)的主域名服务器的地址
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该记录,则返回相关的下级域名服务器的地址
第五步:重复第四步,直到找到正确的记录
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时会将结果返回给客户据
递归查询:在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
迭代查询:DNS所在服务器若没有可以响应的结果,会向客户机提供其他能够解析查询请求的DNS服务器地址,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
1、浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置
2、如果用户浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果,其实操作系统也有一个域名解析的过程,在windows中可以通过C:windowssystem32driversetchosts文件来设置
3、前两个过程无法解析时,就要用到我们网络配置中的“DNS服务器地址”,操作系统会把这个域名发送个LDNS,也就是本地区的域名服务器,这个DNS通常都提供给用户本地互联网接入的一个DNS解析服务,例如用户是在学校接入互联网,那么用户的DNS服务器肯定在学校。windows环境下通过命令输入ipconfig,linux环境下通过cat /etc/resolv.conf就可以查询配置的DNS服务器了。这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的,大约80%的域名解析到这里就结束了,所以LDNS主要承担了域名的解析工作
4、如果LDNS仍然没有命中,就直接到根域名服务器(Root Server)请求解析
5、根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD Server)地址,gTLD是通用的顶级域名服务器,如com,cn,org等
6、本地域名服务器LDNS再向上一步返回的GTLD服务器发送请求
7、接受请求的gTLD服务器查找并返回此域名对应的权限域名服务器(Name Server)的地址,这个Name Server通常就是用户注册的域名服务器,例如用户在某个域名服务提供商申请的域名,那么这个域名解析任务就是由这个域名提供商的服务器来完成
8、权限域名服务器会查询存储的域名和ip的映射关系表,在正常情况下都根据域名得到的目标ip地址,连同一个TTL值返回给NDS Server域名服务器
9、返回该域名对应的ip和TTL值,LNDS会缓存这个域名和ip的对应关系,缓存时间由TTL值控制
10、把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束