leodengzx 2020-07-18
1. 当在输入URL后,浏览器会先检查缓存中是否有此域名对应的解析过的IP,若缓存中有,则解析结束;若无,则转第二步。
浏览器缓存有大小和时间限制,域名被缓存的时间限制可以通过TTL属性来设置。
2. 若果浏览器的缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
在Window中可以通过C:\Windows\System32\drivers\etc\hosts文件来设置,可以将任何域名解析到任何能够访问的IP地址,在Window7后,此文件为只读的;在Linux中这个文件为etc/hosts。
注:第一步和第二步都是在本机完成域名解析,如果在本机中无法完成域名解析,就会请求域名服务器进行解析域名,转第三步。
3. 如果第一步和第二步都无法完成解析,操作系统就会把网络配置中的“DNS服务器地址”发给这里设置的LDNS(Local DNS Server,本地域名服务器)。
LDNS一般都会缓存域名解析结果。缓存时间受域名失效时间限制,缓存空间不是域名时间失效的主要原因。
大约80%的域名解析到这里都已经完成了。
Window下通过ipconfig查看DNS服务器地址,Linux可以通过 cat etc/resolv.conf进行查看。
4. 如果LDNS中没有,会直接到Root Server域名服务器请求解析。
5. 根域名服务器会返回给LDNS一个所查询域的主域名服务器(gTLD Server)。gTLD是国际顶级域名服务器,如.com,.cn等。
6. LDNS再向上一步返回的gTLD服务器发送请求。
7. 接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器(通常为进行注册时的域名服务器)的地址。
8. Name Server域名服务器会查询存储的域名和IP的映射关系表。根据域名得到目标IP记录,连同一个TTL值返回DNS Server域名服务器。
9. 返回该域名对应的IP和TTL值。LDNS会缓存这个域名和IP的对应关系,缓存时间由TTL进行决定。
10. 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
在windows和Linux都可以用nslookup命令来查询域名的解析结果。
在Linux下可以使用dig命令查询DNS解析过程。
在Window下可以在命令行模式下执行ipconfig/flushdns命令来刷新缓存。
在Linux下可以使用etc/init.d/nscd/ restart来清除缓存。