===========================================
浏览器访问的DNS缓存机制
参考:
===========================================
关于浏览器的DNS缓存机制,有一篇详细的文章描述:
简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。
在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),然后DNS服务器会递归式的查找域名记录,然后返回。
DNS查询顺序:浏览器缓存→系统缓存→路由器缓存→ISP DNS 缓存→递归搜索
DNS记录会有一个TTL值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考TTL值,但是不完全等于TTL值,而浏览器DNS缓存的时间跟TTL值无关,每种浏览器都使用一个固定值。
经过测试,Mac下的DNS缓存时间是1分钟。下DNS缓存时间大约为10秒。
据说修改主机的Hosts文件,可以清除DNS缓存。为什么修改hosts文件之后,有时会立刻生效,有时却一直不生效呢?
其实原因很简单,Hosts修改的是OS的DNS缓存,而不是浏览器的DNS缓存:
例如:我00秒的时候使用访问过,此时浏览器DNS缓存产生,然后我修改了hosts文件,将指向本地127.0.0.1,然后在05秒的时候尝试再次访问这个地址,因为浏览器DNS缓存未过期,所以hosts修改无法体现出来。
另一种情况下,我很久都没有访问了,然后我修改了hosts文件,将其指向127.0.0.1,这时因为浏览器没有DNS缓存谷歌浏览器清除DNS缓存的方法,所以会查询操作系统中的DNS缓存,结果此时hosts文件生效!
如何清除浏览器的DNS缓存呢?
1、
对每个域名会默认缓存60s。
://-urls/可以看到所有的配置界面。://dns或者://net-/#dns可以查看浏览器的dns缓存信息,点击“Clear host cache”+然后选择"clear cache"和 " flush ",可以清空的dns缓存。
2、
.:缓存的数量
.:dns缓存的时间
.:dns缓存的时间,设置为0表示不缓存
如果一个域名的DNS解析结果会有多个的话(A记录列表),浏览器是如何处理的呢?
浏览器会优先向第一个IP发起HTTP请求,如果不通,再向后面的IP发起HTTP请求。
有dns缓存功能,但是默认缓存时间只有1分钟,可以通过修改该默认值加快DNS解析速度,方法如下:
打开一个新的窗口谷歌浏览器清除DNS缓存的方法,地址栏输 入 about:,回车,进入设置界面。然后搜索 . ,把原来的60改成 6000(表示缓存6000秒),再搜索. 把默认的20改成1000(表示缓存1000条)。如果没 有上面两个项目,新建它们即可,新建条目类型为整数型。 当然也可以按照需要设置成其它的值。
但是dns缓存太久了也会出问题,比如有的网站ip换了,就无法访问了。
针对这样的问题,还可以安装一个 插件来开启或者 关闭dns cache功能, 。
IE解决方式:
禁用DNS缓存的方法,将下面内容保存为注册表文件,在运行写入注册表:
5.00
[\\\\\ ]
""=dword:
""=dword:
""=dword:
写入注册表以后IE将不再缓存DNS,我们对hosts便会立即生效,无需再重启浏览器。
如果需要恢复IE的DNS缓存,只需清楚我们之前写入的注册表内容。跟上面的方法一样:
5.00
[\\\\\ ]
""=-
""=-
""=-
================================
OS的TTL缓存
================================
不同的操作系统,它的TTL值是不相同的,默认情况下,Linux系统的TTL值为64或255, NT/2000/XP系统的TTL值为128, 98系统的TTL值为32,UNIX主机的TTL值为255。笔者单位使用的是 2000服务器,TTL值默认为128,如果将该值修改为255,那么局域网内的用户就会以为这个服务器是Linux系统或UNIX系统,那么他们就会针对Linux系统或UNIX系统来查找 2000服务器的安全漏洞,不过他们是不会找到什么安全漏洞的,这样一来,服务器就安全多了。
修改TTL值其实非常简单。通过注册表编辑器就可以实现,点击“开始→运行”,在“运行”对话框中输入“”命令并回车,弹出“注册表编辑器”对话框,展开“\\\\Tcpip\”,找到“”,将该值修改为十进制的“255”,重新启动服务器系统后即可。
操作系统下查看TTL时长:命令行执行 。目前Win查看是95s。
微软下如何清空dns
在微软下,你可以用命令 / ns来清空dns 缓存内容。
你也可以用命令 / 来查看dns缓存内容。
Mac OSX下如何清空dns缓存
在Mac OSX中,你可以用这个命令 - 来清空保留的缓存。
bash-2.05a$ -
评论留言