你是否在面试时被问到一个问题:“在浏览器地址栏,输入一个网址,发生了什么?”
这个问题有一点tricky,你应该追问一句,这个网址是什么形式的,是FQDN 还是IP?如果是FQDN格式的网址,第一步当然是解析域名。DNS查询,浏览器缓存是最先检查的地方,chrome可以在地址栏输入chrome://net-internals/#dns 来访问。不过这个页面很简陋,并没有提供DNS缓存的细节,如具体的被缓存的DNS条目,以及相关的TTL,而仅仅提供了清除DNS缓存的功能,Clear host cache。这个表述有一定的迷惑性,这里host到底是指浏览器还是操作系统?是否真的存在浏览器DNS缓存,又如何验证呢?
下面以chrome访问www.baidu.com为例,验证一下上述2个问题。
工具:
wireshark用来抓取dns报文,过滤器里填dns.qry.name==www.baidu.com
ipconfig可以用来查看操作系统的DNS缓存
主要用到下面2个参数
ipconfig/displaydns | findstr “www.baidu.com” #查找百度的dns缓存
ipconfig/flushdns #清空缓存
测试流程:
0. 确认开始系统DNS缓存中无www.baidu.com,有则清掉
ipconfig/displaydns | findstr “www.baidu.com”
ipconfig