对于类InetAddress,它有一个属性"networkaddress.cache.dnegative.ttl";。Javadoc说
networkaddress.cache.negative.ttl (default: 10)
Specified in java.security to indicate the caching policy for un-successful name lookups from the name service.. The value is specified as integer to indicate the number of seconds to cache the failure for un-successful lookups.
A value of 0 indicates "never cache". A value of -1 indicates "cache forever".
请原谅我愚蠢的问题,如果名称查找不成功,有什么可以缓存的?名称查找不成功意味着没有IP地址返回,因此无法缓存任何IP地址。
这是否意味着该参数将只是简单地返回"0";主机未找到";在缓存期间返回相同名称查找的代码,而不是执行实际的DNS查询?
感谢
所有(递归(名称服务器都有负TTL的概念,即缓存多长时间"未找到数据";答案类型。
这是由权威名称服务器在SOA
字段中给出的,最后一项是负TTL。在域已启用DNSSEC的情况下,它也可以从NSEC
/NSEC3
记录的TTL派生。
考虑到这一点,系统就不会过度查询已知不存在的东西。与所有缓存一样,它是一种性能优化,是本地内存(用于存储缓存(与网络IO(用于发送和等待回复(之间的折衷。
您可以在上找到DNS级别的更多详细信息https://serverfault.com/questions/426807/how-long-does-negative-dns-caching-typically-last例如
Java框架似乎只是继承了这一思想,并具有类似的设置。