浅谈DNS缓存机制--浏览器和OS篇

举报
沧海沧海 发表于 2017/12/01 10:37:15 2017/12/01
【摘要】 有人的地方,就有江湖,有DNS的地方,就有缓存。

有人的地方,就有江湖,有DNS的地方,就有缓存。


为了提升域名查询效率,设计了域名缓存机制,当访问过某个网站并得到其IP后,会将其域名和IP缓存下来,下一次访问的时候,就不需要再请求域名服务器获取IP,直接使用缓存中的IP,提高了响应的速度。当然缓存是有有效时间(即TTL值)的,当过了有效时间后,再次请求网站,还是需要先请求域名解析。


目前,除了传统的递归DNS服务器(如运营商的Local DNS, 114dns,Google public DNS等)外,计算机中DNS记录在本地也有两种缓存方式:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问递归DNS服务器,然后递归DNS服务器会递归式的查找域名记录,然后返回结果。那么浏览器DNS缓存和操作系统DNS缓存又是怎样的呢?

浏览器DNS缓存:首先,浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关。浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间,如Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS。常用的浏览器的DNS缓存时间如下:Chrome:为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。在Chrome地址栏中输入chrome://net-internals/#dns 就可以看各域名的DNS 缓存时间。默认,Chrome对每个域名会默认缓存60s:


Firefox:Firefox也有dns缓存功能,但是默认缓存时间只有1分钟,可以通过修改该默认值加快DNS解析速度,方法如下:打开一个新的窗口,地址栏输 入 about:config,回车,进入设置界面。然后搜索 network.dnsCacheExpiration,把原来的60改成 6000(表示缓存6000秒),再搜索network.dnsCacheEntries 把默认的20改成1000(表示缓存1000条)。如果没 有上面两个项目,新建它们即可,新建条目类型为整数型。 当然也可以按照需要设置成其它的值。但是dns缓存太久了也会出问题,比如有的网站ip换了,就无法访问了。针对这样的问题,还可以安装一个 firefox 插件来开启或者 关闭dns cache功能,https://addons.mozilla.org/zh-CN/firefox/addon/5914


以下是第三方之前测试的不同浏览器的DNS缓存时间情况      


(来源链接:https://dyn.com/blog/web-browser-dns-caching-bad-thing/

操作系统DNS缓存:OS缓存会参考DNS服务器响应的TTL值,但是不完全等于TTL值。

     Windows

     Windows系统默认开启DNS缓存服务,叫做DNSClient,可以缓存一些常用的域名。

     


ipconfig/displaydns – 这个命令可以展示现在你电脑已经缓存的域名


ipconfig/flushdns –这条记录可以帮你马上清空已经缓存的记录



Linux


Linux系统的nscd服务可以实现DNS缓存的功能。nscd会缓存三种服务passwd,group,hosts,所以它会记录三个库,分别对应源/etc/passwd, /etc/hosts 和/etc/resolv.conf每个库保存两份缓存,一份是找到记录的,一份是没有找到记录的。每一种缓存都保存有生存时间(TTL)。其作用就是增加cache ,加快如DNS的解析等的速度。配置文件为/etc/nscd.conf    默认该服务在redhat或centos下是关闭的,可以通过services nscd start开启。缓存DB文件在/var/db/nscd下。可以通过nscd -g查看统计的信息,这里列出部分:


也可以通过strings /var/db/nscd/hosts命令查看缓存文件


清除缓存

1.    nscd -i passwd

2.    nscd -i group

3.    nscd -i hosts


除了上面的方法,重启nscd服务同样可以达到清理cache的目的。

 

了解了DNS缓存机制也有助于你判断DNS解析不生效的排查。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200