浏览器的DNS解析过程分析
前言
DNS(Domain Name System)域名系统,因为访问一台服务器只能通过IP来访问,所以需要先将域名转换成IP地址。
解析流程
以chrome浏览器访问mail.baidu.com网址为例,
-
检查浏览器缓存中是否存在该域名对应的IP,如果存在则解析结束,否则继续。
-
检查操作系统的hosts文件,以windows系统为例,一般在 C:\Windows\System32\drivers\etc 下,如果有则结束,否则继续。
-
检查操作系统的dns缓存,如果存在则结束,否则继续,以windows系统为例
查询dns缓存 ipconfig /displaydns 导出dns缓存到文件 ipconfig /displaydns > D:/testjar/dns.txt 清除dns缓存 ipconfig /flushdns
以博客园域名 www.cnblogs.com 为例,查询出的记录格式为
记录名称. . . . . . . : www.cnblogs.com 记录类型. . . . . . . : 1 生存时间. . . . . . . : 229 数据长度. . . . . . . : 4 部分. . . . . . . . . : 答案 A (主机)记录 . . . . : 101.37.113.127
-
到本地域名服务器去查询,有则结束,否则继续。以windows系统为例
查询域名服务器地址 ipconfig /all
-
本地域名服务器去查询根域名服务器(全球只有13台),会返回下级服务器(顶级域名服务器)的地址
-
本地域名服务器去查询顶级域名服务器(在这里就是com服务器),同样返回二级域名服务器的地址
-
本地域名服务器去查询二级域名服务器(baidu.com服务器),同样返回三级域名服务器的
-
本地域名服务器去查询三级域名服务器(mail.baidu.com服务器),此时已经是最后一级,如果有则解析结束,且本地域名服务器缓存中加入此对应关系,方便下次查询,
同时返回给浏览器,没有找到则浏览器网页报错。
上面的1,2,3,4步可以叫做递归查询,5,6,7,8步可以叫做迭代查询。
浏览器查看和清除dns缓存
清除dns缓存
以chrome浏览器为例,chrome://chrome-urls/可以看到所有配置页面
chrome://net-internals/#dns可以清除dns
查看dns缓存
chrome://net-internals/#events页面可以看到
点击chrome://net-export/可以看到
点击 Start Logging to Disk 按钮,将当前状态保存到文件中
保存之后再点击 Stop Logging 按钮
再打开netlog_viewer页面(要FQ)
导入之前保存的文件,就可以查看dns信息了
java中进行DNS解析
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException {
InetAddress[] inetAddresses = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress : inetAddresses) {
System.out.println(inetAddress.getHostAddress());
}
//36.152.44.96
//36.152.44.95
}
}
参考
浏览器之DNS解析过程详解
浏览器的DNS缓存查看和清除
如何查看chrome浏览器的DNS缓存
Java实现通过IP获取域名,通过域名获取IP