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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM