精华内容
下载资源
问答
  • 浏览器、操作系统DNS缓存时间

    千次阅读 2018-03-18 17:48:12
    浅谈浏览器、操作系统DNS缓存时间 浅谈浏览器、操作系统DNS缓存时间 单纯的土豆 ...

    浅谈浏览器、操作系统DNS缓存时间


    浅谈浏览器、操作系统DNS缓存时间

    单纯的土豆 2016-12-14

    目录

    1.DNS查询请求类型
    
    2.DNS服务器解析返回IP分配策略与客户端对域名IP选择策略
    
    3.各个环节的DNS缓存介绍
    
    (1)浏览器 DNS缓存
    
    (2)Java DNS缓存
    
    4.OS DNS缓存
    
    5.wwwzhihucom
    
    (1)Windows
    
    (2)Android
    
    (3)IOS
    
    (4)其他系统的DNS相关命令
    
    6.ISP DNS缓存

    摘要:

    1、浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关。
    
    2、Java的网络应用程序的DNS缓存是由JVM的缓存策略控制的
    
    3、OS缓存会参考DNS服务器响应的TTL值,但是不完全等于TTL值。

    正文

    示意图:

    DNS查询请求类型

    查询响应类型

     DNS服务器对于客户请求的答复具有多种类型,常见的有以下四种:   

    • 权威答复:权威答复是返回给客户的正向答复,并且设置了DNS消息中的权威位。此答复代表从具有权威的DNS服务器处发出;   

    • 正向答复:正向答复包含了匹配客户端解析请求的资源记录;   

    • 参考答复:参考答复只在DNS服务器工作在迭代模式下使用,包含了其他有助于客户端解析请求的信息。例如,当DNS服务器不能为客户端发起的解析请求找到某个匹配值时,则向DNS客户端发送参考回复,告诉它有助于解析请求的信息;   

    • 否定答复:否定答复指出权威服务器在解析客户端的请求时可能遇到了以下两种情况之一:

      (1)权威DNS服务器报告客户端查询的名字不存在;

      (2)权威DNS服务器报告存在对应的名字但是不存在指定类型的资源记录。

    无论正向答复还是否定答复,DNS客户端都将结果保存在自己的本地缓存中。

    DNS的TTL是指Time to live,既存活时间

    DNS服务器解析返回IP分配策略与客户端对域名IP选择策略

    一个简单测试,先解析163域名

    C:\Users\cmcc>nslookup www.163.com
    服务器:  ns4.zj.chinamobile.com
    Address:  211.140.188.188
    
    非权威应答:
    名称:c01.i05.cmbzj.hadns.net
    Addresses:  111.1.38.160
      111.1.38.159
      223.94.95.114
      223.94.95.119
    Aliases:  www.163.com
      www.163.com.cloudcdn.net
      c01.i05.hacdn.net

    可以看到该域名返回了多个IP,DNS服务器对IP返回会有一些策略保证客户访问对服务器的负载均衡或速度保证,如IP随机返回,按最近离用户最近IP返回等,其主要的控制策略是调整列表中第一个返回的IP。RFC1794解释了dns对负载均衡的支持:

    http://www.faqs.org/rfcs/rfc1794.html

    一般的客户端(如浏览器)对DNS返回的IP的选择是取第一个IP,如果第一个IP失败了再去取第二个IP。也有一些客户端在连接第一个IP失败后就直接失败了。

    各个环节的DNS缓存介绍

    浏览器 DNS缓存

    浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关

    浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间,其中Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS。Chrome浏览器看本身的DNS缓存时间比较方便,在地址栏输入

    chrome://net-internals/#dns

    就能看到看浏览器的缓存

    Java DNS缓存

    Java的网络应用程序的DNS缓存是由JVM的缓存策略控制的,当InetAddress类第一次使用某个域名(如www.google.com)创建InetAddress对象后,JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中。当下一次InetAddress类再使用这个域名时,就直接从DNS缓存里获得所需的信息,而无需再访问DNS服务器。两种方式更改这个值:

    • 可以在应用程序中直接设置缓存过期时间:

      java.security.Security.setProperty(“networkaddress.cache.ttl”, 10);


    • 更改jre中security文件中的设置

      C:\Program Files\Java\jre1.8.0_31\lib\security\java.security


    The Java-level namelookup cache policy for successful lookups:
    any negative value: caching forever
    any positive value: the number of seconds to cache an address for
    zero: do not cache
    
    default value is forever (FOREVER). For security reasons, this
    caching is made forever when a security manager is set. When a security
    manager is not set, the default behavior in this implementation
    is to cache for 30 seconds.

    networkaddress.cache.negative.ttl=10
    networkaddress.cache.ttl=-1

    该文件中的文字对以上值已经解释的比较清楚。cache.negative.ttl就是指缓存DNS否定答复的时间。

    OS DNS缓存

    OS缓存会参考DNS服务器响应的TTL值,但是不完全等于TTL值

    测试,以知乎的DNS解析为例:

    C:\windows\system32>ipconfig /displaydns

    www.zhihu.com
    记录名称. . . . . . . : www.zhihu.com
    记录类型. . . . . . . : 1
    生存时间. . . . . . . : 323 (秒)
    数据长度. . . . . . . : 4
    部分. . . . . . . . . : 答案
    A (主机)记录 . . . . : 60.28.215.71

    记录名称. . . . . . . : www.zhihu.com
    记录类型. . . . . . . : 1
    生存时间. . . . . . . : 323
    数据长度. . . . . . . : 4
    部分. . . . . . . . . : 答案
    A (主机)记录 . . . . : 60.28.215.70

    通过域名解析命令获取ISP端的域名服务中的TTL时间:

    C:\Users\cmcc>nslookup -d www.zhihu.com

    服务器: ns4.zj.chinamobile.com
    Address: 211.140.188.188
    
    Got answer:
    HEADER:
    opcode = QUERY, id = 2, rcode = NOERROR
    header flags: response, want recursion, recursion avail.
    questions = 1, answers = 2, authority records = 2, additional = 18

    QUESTIONS:
    www.zhihu.com, type = A, class = IN
    ANSWERS:
    -> www.zhihu.com
    internet address = 60.28.215.71
    ttl = 900 (15 mins)
    -> www.zhihu.com
    internet address = 60.28.215.70
    ttl = 900 (15 mins)
    AUTHORITY RECORDS:
    -> zhihu.com
    nameserver = ns3.dnsv4.com
    ttl = 136 (2 mins 16 secs)

    可以看到本地ISP服务器上缓存的时间是15分钟,就算刷新了本机操作系统缓存,ISP上仍然存在。

    Windows

    Windows2003之前的DNS缓存设置时间在注册表的位置是HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Dnscache/Parameters

    键名MaxCacheEntryTtlLimit,为DNS缓存条目TTL最大值,在XP和2003系统中此项名称为MaxCacheTtl。

    MSDN中对此有详细介绍:https://technet.microsoft.com/en-us/library/cc959517.aspx

    非常详细的解释了DNS域TTL与操作系统的DNS缓存策略的关系:

    The default value for MaxCacheEntryTtlLimit is DWORD = 0x15180 = 86400 seconds = 1 day
    if DNS zone TTL < MaxCacheEntryTtlLimit, then DNS TTL is used
    if DNS zone TTL > MaxCacheEntryTtlLimit, then MaxCacheEntryTtlLimit is used

    以下命令windows系统可使用:

    ipconfig /displaydns  显示本机dns, 生存时间, 80-8000都有
    ipconfig /flushdns  刷新windows dns缓存

    Android

    Addresses are cached for 600 seconds (10 minutes) by default. Failed lookups are cached for 10 seconds.
    DNS caching
    In Android 4.0 (Ice Cream Sandwich) and earlier, DNS caching was performed both by InetAddress and by the C library, which meant that DNS TTLs could not be honored correctly. In later releases, caching is done solely by the C library and DNS TTLs are honored.

    IOS

    按照官方文档说法,iOS设备上每24小时刷新一次DNS缓存

    其他系统的DNS相关命令

    MAC

    lookupd-flushcache 清缓存

    Linux

    /etc/init.d/nscd restart 清缓存

    ISP DNS缓存

    ISP(电信运营商)缓存有些不靠谱,有些缓存服务器(不多)会忽略网站DNS提供的TTL,自己设置一个较长的TTL,导致顶级DNS更新时不能及时拿到新的IP地址。

    可以看出,在从Root DNS请求域名解析的过程中,有太多的层次影响DNS的获取,缓存是双刃剑,提高了获取DNS的速度,也会影响DNS在IP变更时不能及时更新到最新。


    转自https://segmentfault.com/a/1190000002662495

            <ul class="tags">
                                                        <li><a href="https://www.cloudxns.net/en/Support/lists/tags/CDN.html">CDN</a></li>
                                                                            <li><a href="https://www.cloudxns.net/en/Support/lists/tags/dns.html">dns</a></li>
                                                                            <li><a href="https://www.cloudxns.net/en/Support/lists/tags/ns.html">ns</a></li>
                                                                            <li><a href="https://www.cloudxns.net/en/Support/lists/tags/TTL.html">TTL</a></li>
                                                                            <li><a href="https://www.cloudxns.net/en/Support/lists/tags/isp.html">isp</a></li>
                                                </ul>
                    </div>
    
    展开全文
  • Firefox有dns缓存功能,但是默认缓存时间只有1分钟,可以通过修改该默认值加快DNS解析速度,方法如下: 打开一个新的窗口,地址栏输 入 about:config,回车,进入设置界面。然后搜索 network.dnsCacheExpiration ,...

    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 。

    IE解决方式:

    禁用DNS缓存的方法,将下面内容保存为注册表文件,在运行写入注册表:

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "DnsCacheEnabled"=dword:00000000
    "DnsCacheTimeout"=dword:00000000
    "ServerInfoTimeOut"=dword:00000000

    写入注册表以后IE将不再缓存DNS,我们对hosts便会立即生效,无需再重启浏览器。

    如果需要恢复IE的DNS缓存,只需清楚我们之前写入的注册表内容。跟上面的方法一样:

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "DnsCacheEnabled"=-
    "DnsCacheTimeout"=-
    "ServerInfoTimeOut"=-

    Chrome浏览器:

    为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。你在谷歌Chrome浏览器的地址栏中输入about:DNS,回车,就可以看到本地的DNS缓存。

    firefox下有个DNS Flusher插件,但没有chrome版本,其实在chrome下清除DNS缓存非常简单:
    1、用chrome打开:chrome://net-internals/#dns
    2、点击上面的“clean host cache”

    也可以清空在工具中选择清空Cache,这样DNS cache会一同清空。


    微软windows下如何清空dns

     在微软windows下,你可以用命令ipconfig /flushd ns来清空dns 缓存内容。

    你也可以用命令ipconfig /displaydns 来查看dns缓存内容。


     

    Mac OSX下如何清空dns缓存


    在Mac OSX中,你可以用这个命令lookupd -flushcache 来清空保留的缓存。
    bash-2.05a$ lookupd -flushcache


     

    Linux 下如何清空dns缓存

    在linux中,nscd进程负责管理DNS缓存。
    要清空DNS缓存,重启nscd守护进程就行了。
    要重启nscd进程,使用命令(不带引号)'/etc/rc.d/init.d/nscd restart '

    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 。

    IE解决方式:

    禁用DNS缓存的方法,将下面内容保存为注册表文件,在运行写入注册表:

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "DnsCacheEnabled"=dword:00000000
    "DnsCacheTimeout"=dword:00000000
    "ServerInfoTimeOut"=dword:00000000

    写入注册表以后IE将不再缓存DNS,我们对hosts便会立即生效,无需再重启浏览器。

    如果需要恢复IE的DNS缓存,只需清楚我们之前写入的注册表内容。跟上面的方法一样:

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "DnsCacheEnabled"=-
    "DnsCacheTimeout"=-
    "ServerInfoTimeOut"=-

    Chrome浏览器:

    为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。你在谷歌Chrome浏览器的地址栏中输入about:DNS,回车,就可以看到本地的DNS缓存。

    firefox下有个DNS Flusher插件,但没有chrome版本,其实在chrome下清除DNS缓存非常简单:
    1、用chrome打开:chrome://net-internals/#dns
    2、点击上面的“clean host cache”

    也可以清空在工具中选择清空Cache,这样DNS cache会一同清空。

    微软windows下如何清空dns

     在微软windows下,你可以用命令ipconfig /flushd ns来清空dns 缓存内容。

    你也可以用命令ipconfig /displaydns 来查看dns缓存内容。


     

    Mac OSX下如何清空dns缓存


    在Mac OSX中,你可以用这个命令lookupd -flushcache 来清空保留的缓存。
    bash-2.05a$ lookupd -flushcache


     

    Linux 下如何清空dns缓存

    在linux中,nscd进程负责管理DNS缓存。
    要清空DNS缓存,重启nscd守护进程就行了。
    要重启nscd进程,使用命令(不带引号)'/etc/rc.d/init.d/nscd restart '

    展开全文
  • 主流操作系统、浏览器DNS缓存时间

    千次阅读 2016-04-07 10:11:54
    本文总结一些常见的浏览器和操作系统的DNS缓存时间。 Table of Contents 1 操作系统的DNS缓存 1.1 windows1.2 macOS 2 浏览器的DNS缓存 2.1 chrome2.2 IE2.3 firefox2.4 safari 3 浏览器对DNS解析...

    本文总结一些常见的浏览器和操作系统的DNS缓存时间。

    1 操作系统的DNS缓存

     

    1.1 windows

    windows DNS缓存的默认值是 MaxCacheTTL,见这里,它的默认值是86400s,也就是一天。它是TTLu 这篇文章列出了一些浏览器的DNS缓存时间。

    浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。

    1.2 macOS

    macOS 严格遵循DNS协议中的TTL

    2 浏览器的DNS缓存

    浏览器为了提高响应时间,也会缓存DNS记录。

    这篇文章 列出了一些浏览器的DNS缓存时间

    浏览器DNS缓存时间跟TTL无关,每种浏览器都有一个固定值

    2.1 chrome

    为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。

    chrome://net-internals/#dns 这里可以看各域名的DNS 缓存时间。chrome对每个域名会默认缓存60s。

    2.2 IE

    IE将DNS缓存30min。见这里

    2.3 firefox

    Firefox有dns缓存功能,但是默认缓存时间只有1分钟,可以通过修改该默认值加快DNS解析速度,方法如下:

    打开一个新的窗口,地址栏输 入 about:config,回车,进入设置界面。然后搜索 network.dnsCacheExpiration ,把原来的60改成 6000(表示缓存6000秒),再搜索network.dnsCacheEntries 把默认的20改成1000(表示缓存1000条)。如果没 有上面两个项目,新建它们即可,

    新建条目类型为整数型。 当然也可以按照需要设置成其它的值。

    2.4 safari

    约为10s

    3 浏览器对DNS解析结果的处理

    如果一个域名的DNS解析结果会有多个的话,浏览器是如何处理的呢?

    Chrome浏览器会优先向第一个IP发起HTTP请求,如果不通,再向后面的IP发起HTTP请求。

    Date: 2014-11-21T17:13+0800

    Author: CobbLiu

    Org version 7.9.3f with Emacs version 24


    转自:http://www.cnblogs.com/cobbliu/p/4109149.html

    展开全文
  • DNS缓存时间笔记

    2018-10-16 10:45:49
    浏览器缓存,chrome查看(chrome://net-internals/#dns)(默认缓存时间1分钟),firefox(about:config 中的 network.dnsCacheExpirationGracePeriod)(默认缓存时间1分钟),safari缓存时间10秒钟,IE缓存时间默认30...
    1. 浏览器缓存,chrome查看(chrome://net-internals/#dns)(默认缓存时间1分钟),firefox(about:config 中的 network.dnsCacheExpirationGracePeriod)(默认缓存时间1分钟),safari缓存时间10秒钟,IE缓存时间默认30分钟
    2. 清除本地缓存,windows(ipconfig /flushd ns),mac(lookupd -flushcache),linux(/etc/rc.d/init.d/nscd restart)

    转载于:https://juejin.im/post/5bc5bfa0e51d450e6973b714

    展开全文
  • 理想情况下,各地DNS的缓存时间即为设置的ttl时间,所以可以通过设置ttl时间来控制DNS缓存的时间。ttl时间设置的短,DNS缓存过期快,在机器故障的时候很快切换,对用户的影响小;但是由于ttl设置的太短,缓存很快...
  • windows客户端电脑正常情况下是接收DNS服务器解析域名的TTL值, 此外 浏览器也会缓存域名。 首先进入命令提示符下(开始——运行——cmd): 先运行:ipconfig /displaydns 这个命令,查看一下本机已经缓存了那些的dns...
  • java 中的DNS默认成功保存时间 30 s,失败时间 10s import java.lang.reflect.Field; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java....
  • import java.lang.reflect.Field; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.SimpleDateFormat;...import java.util.ArrayList;...import java.uti...
  • 默认缓存时长 刷新方法 Windows MaxCacheTTL 86400s[24H] ipconfig /flushdns MacOS DNS TTL 3600s[1H] # killall -HUP mDNSResponder #或者 # dscacheutil -flushcache #或者 # discoveryutil md
  • 原文: ... dns缓存刷新时间是多久?一般来说,我们只知道DNS解析是互联网绝大多数应用的实际寻址方式,在我们打开某站点,DNS返回了正确的IP之后,此时系统会将dns缓存...但是dns缓存文件也是有时间限制的,当到了一...
  • DNS缓存

    2016-01-31 00:46:00
    有DNS的地方,就有缓存...本文总结一些常见的浏览器和操作系统的DNS缓存时间。 Table of Contents 1 操作系统的DNS缓存 1.1 windows 1.2 macOS 2 浏览器的DNS缓存 2.1 chrome 2.2 IE 2.3 fi...
  • 浏览器 DNS缓存 浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关。...每种浏览器都有一个固定的DNS缓存时间,其中Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS。Chrome浏览器看本身的DNS缓...
  • options { listen-on port 53 { 12.0.0.125; }; listen-on-v6 port 53 { ::1; }; directory “/var/named”; dump-file “/var/named/data/cache_dump.db”;...statistics-file “/var/named/data/named_stats.txt”;...
  • 本文总结一些常见的浏览器和操作系统的DNS缓存时间 浏览器先查询自己的缓存,查不到,则调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址 DNS查询顺序:浏览器缓存→系统缓存→路由器缓存→ISP DNS ...
  • 清理dns缓存

    2019-04-09 12:30:00
    并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。 当然,在超过N...
  • 一文搞懂DNS缓存

    万次阅读 2019-03-05 11:52:32
    1、浏览器DNS缓存时间跟DNS服务器返回的TTL值无关。 2、Application的DNS缓存是由应用程序控制的,以java为例,Java的网络应用程序的DNS缓存是由JVM的缓存策略控制的 3、OS缓存会参考DNS服务器响应的TTL值,但是...
  • JVM如何设置DNS缓存失效时间

    千次阅读 2017-09-04 10:42:47
    JVM为了提高效率,会将第一次的DNS结果缓存起来。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,320
精华内容 528
关键字:

dns缓存时间