DNS緩存
今天碰到一個(gè)元數(shù)據(jù)集群因DNS緩存導(dǎo)致的錯(cuò)誤,借機(jī)梳理一下n久以前看的DNS緩存問題。
DNS: 全稱 Domain Name System ,即域名系統(tǒng)。它將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫,在數(shù)據(jù)庫中保存域名與IP的對照關(guān)系,從而方便地訪問互聯(lián)網(wǎng)。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號53。
域名解析(主機(jī)名解析):通過域名,得到該域名對應(yīng)的IP地址的過程。
有dns的地方,就有緩存。瀏覽器、操作系統(tǒng)、進(jìn)程(JVM)、Local DNS、根域名服務(wù)器,都會對DNS結(jié)果做一定程度的緩存。
DNS查詢過程:


瀏覽器DNS緩存/Java DNS緩存 ---(未找到/失效)---》 操作系統(tǒng)的hosts文件是否有映射關(guān)系(本地DNS緩存)---(未找到/失效)---》本地DNS服務(wù)器(ISP服務(wù)器,或者自己手動設(shè)置的DNS服務(wù)器)查找---(未找到/失效)---》DNS根服務(wù)器遞歸查找(--》根DNS域名服務(wù)器---返回頂級域名服務(wù)器地址---》訪問頂級域名服務(wù)器(TLD服務(wù)器)---返回NameServer服務(wù)器地址---》返回指定域名的A記錄(指定主機(jī)名或域名的IP地址)和CNAME(別名記錄)
瀏覽器 DNS緩存
chrome://net-internals/#dns
瀏覽器訪問域名拿到實(shí)際IP地址后,會緩存,有效期1分鐘。DNS緩存時(shí)間跟DNS服務(wù)器返回的TTL值無關(guān)。
Java DNS緩存
其實(shí)是由JVM 緩存策略控制。當(dāng)?shù)谝淮问褂媚硞€(gè)域名創(chuàng)建InetAddress對象后,JVM會將域名和映射的IP地址保存在DNS緩存里。下一次直接從緩存取就可以。
JDK1.5之前,這個(gè)JVM緩存是永久保存的,即:除非重啟,否則域名后端IP改變了后,不能響應(yīng)到。
之后的JDK,如果設(shè)置了security manager,永久保存,如果沒有設(shè)置,30s。
參數(shù):
networkaddress.cache.negative.ttl=10
networkaddress.cache.ttl=-1
DNS域名解析還是好耗費(fèi)CPU資源,后面會提。
操作系統(tǒng) DNS緩存(hosts文件)
緩存時(shí)間會參考本地DNS服務(wù)器(ISP-電信運(yùn)營商服務(wù)器)返回的TTL值,但不完全等于。
IOS每24h刷新一次DNS緩存,MAC清緩存:lookupd-flushcache。
Linux緩存:/etc/init.d/nscd restart
DNS原理

樹根:根DNS域名服務(wù)器,一共13臺,不直接解析域名的IP地址,而是返回頂級域名服務(wù)器(TLD服務(wù)器)的IP地址。
頂級域名:頂級DNS服務(wù)器,每個(gè)頂級域名,都有TLD服務(wù)器集群。TLD服務(wù)器提供了權(quán)威DNS服務(wù)器的IP地址。
二級域名:權(quán)威DNS服務(wù)器,管理某個(gè)區(qū)的域名,由于域名下每個(gè)主機(jī)都必須在權(quán)威域名服務(wù)器處注冊登記,所有知道其管轄的域名和IP地址映射關(guān)系,同時(shí),也知道其下級域名的服務(wù)器地址。
三、四級域名:本地DNS服務(wù)器,每一個(gè)因特網(wǎng)服務(wù)提供者lSP(如一個(gè)居民區(qū)的ISP或一個(gè)機(jī)構(gòu)的ISP)都有一臺本地DNS服務(wù)器。
參考:
https://blog.csdn.net/weixin_44523860/article/details/110352555
https://juejin.cn/post/6844903876974346254
浙公網(wǎng)安備 33010602011771號