DNS缓存
今天碰到一个元数据集群因DNS缓存导致的错误,借机梳理一下n久以前看的DNS缓存问题。
DNS: 全称 Domain Name System ,即域名系统。它将域名和IP地址相互映射的一个分布式数据库,在数据库中保存域名与IP的对照关系,从而方便地访问互联网。DNS协议运行在UDP协议之上,使用端口号53。
域名解析(主机名解析):通过域名,得到该域名对应的IP地址的过程。
有dns的地方,就有缓存。浏览器、操作系统、进程(JVM)、Local DNS、根域名服务器,都会对DNS结果做一定程度的缓存。
DNS查询过程:
浏览器DNS缓存/Java DNS缓存 ---(未找到/失效)---》 操作系统的hosts文件是否有映射关系(本地DNS缓存)---(未找到/失效)---》本地DNS服务器(ISP服务器,或者自己手动设置的DNS服务器)查找---(未找到/失效)---》DNS根服务器递归查找(--》根DNS域名服务器---返回顶级域名服务器地址---》访问顶级域名服务器(TLD服务器)---返回NameServer服务器地址---》返回指定域名的A记录(指定主机名或域名的IP地址)和CNAME(别名记录)
浏览器 DNS缓存
chrome://net-internals/#dns
浏览器访问域名拿到实际IP地址后,会缓存,有效期1分钟。DNS缓存时间跟DNS服务器返回的TTL值无关。
Java DNS缓存
其实是由JVM 缓存策略控制。当第一次使用某个域名创建InetAddress对象后,JVM会将域名和映射的IP地址保存在DNS缓存里。下一次直接从缓存取就可以。
JDK1.5之前,这个JVM缓存是永久保存的,即:除非重启,否则域名后端IP改变了后,不能响应到。
之后的JDK,如果设置了security manager,永久保存,如果没有设置,30s。
参数:
networkaddress.cache.negative.ttl=10
networkaddress.cache.ttl=-1
DNS域名解析还是好耗费CPU资源,后面会提。
操作系统 DNS缓存(hosts文件)
缓存时间会参考本地DNS服务器(ISP-电信运营商服务器)返回的TTL值,但不完全等于。
IOS每24h刷新一次DNS缓存,MAC清缓存:lookupd-flushcache。
Linux缓存:/etc/init.d/nscd restart
DNS原理
树根:根DNS域名服务器,一共13台,不直接解析域名的IP地址,而是返回顶级域名服务器(TLD服务器)的IP地址。
顶级域名:顶级DNS服务器,每个顶级域名,都有TLD服务器集群。TLD服务器提供了权威DNS服务器的IP地址。
二级域名:权威DNS服务器,管理某个区的域名,由于域名下每个主机都必须在权威域名服务器处注册登记,所有知道其管辖的域名和IP地址映射关系,同时,也知道其下级域名的服务器地址。
三、四级域名:本地DNS服务器,每一个因特网服务提供者lSP(如一个居民区的ISP或一个机构的ISP)都有一台本地DNS服务器。
参考:
https://blog.csdn.net/weixin_44523860/article/details/110352555
https://juejin.cn/post/6844903876974346254
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具