經過負載均衡器+域名實現容災切換-(3)瀏覽器的DNS緩存過程

===========================================
瀏覽器訪問的DNS緩存機制
參考:https://blog.csdn.net/realmeh/article/details/22663807
===========================================chrome

關於瀏覽器的DNS緩存機制,有一篇詳細的文章描述:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/windows

簡單來講,一條域名的DNS記錄會在本地有兩種緩存:瀏覽器緩存和操做系統(OS)緩存。
在瀏覽器中訪問的時候,會優先訪問瀏覽器緩存,若是未命中則訪問OS緩存,最後再訪問DNS服務器(通常是ISP提供),而後DNS服務器會遞歸式的查找域名記錄,而後返回。瀏覽器

DNS查詢順序:瀏覽器緩存→系統緩存→路由器緩存→ISP DNS 緩存→遞歸搜索緩存

DNS記錄會有一個TTL值(time to live),單位是秒,意思是這個記錄最大有效期是多少。通過實驗,OS緩存會參考TTL值,可是不徹底等於TTL值,而瀏覽器DNS緩存的時間跟TTL值無關,每種瀏覽器都使用一個固定值。
通過測試,Mac下Chrome的DNS緩存時間是1分鐘。Safari下DNS緩存時間大約爲10秒。安全

聽說修改主機的Hosts文件,能夠清除DNS緩存。爲何修改hosts文件以後,有時會馬上生效,有時卻一直不生效呢?
其實緣由很簡單,Hosts修改的是OS的DNS緩存,而不是瀏覽器的DNS緩存:
例如:我00秒的時候使用chrome訪問過www.google.com.hk,此時瀏覽器DNS緩存產生,而後我修改了hosts文件,將www.google.com.hk指向本地127.0.0.1,而後在05秒的時候嘗試再次訪問這個地址,由於瀏覽器DNS緩存未過時,因此hosts修改沒法體現出來。
另外一種狀況下,我好久都沒有訪問www.baidu.com了,而後我修改了hosts文件,將其指向127.0.0.1,這時由於瀏覽器沒有DNS緩存,因此會查詢操做系統中的DNS緩存,結果此時hosts文件生效!bash

如何清除瀏覽器的DNS緩存呢?
一、chrome
chrome對每一個域名會默認緩存60s。
chrome://chrome-urls/能夠看到chrome全部的配置界面。chrome://dns或者chrome://net-internals/#dns能夠查看chrome瀏覽器的dns緩存信息,點擊「Clear host cache」+而後選擇"clear cache"和 " flush socket",能夠清空chrome的dns緩存。服務器

二、firefox
network.dnsCacheEntries:緩存的數量
network.dnsCacheExpiration:dns緩存的時間
network.dnsCacheExpirationGracePeriod:dns緩存的時間,設置爲0表示不緩存app

若是一個域名的DNS解析結果會有多個的話(A記錄列表),瀏覽器是如何處理的呢?
Chrome瀏覽器會優先向第一個IP發起HTTP請求,若是不通,再向後面的IP發起HTTP請求。socket

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"=-


================================
OS的TTL緩存
================================
不一樣的操做系統,它的TTL值是不相同的,默認狀況下,Linux系統的TTL值爲64或255,Windows NT/2000/XP系統的TTL值爲128,Windows 98系統的TTL值爲32,UNIX主機的TTL值爲255。筆者單位使用的是Windows 2000服務器,TTL值默認爲128,若是將該值修改成255,那麼局域網內的用戶就會覺得這個服務器是Linux系統或UNIX系統,那麼他們就會針對Linux系統或UNIX系統來查找Windows 2000服務器的安全漏洞,不過他們是不會找到什麼安全漏洞的,這樣一來,服務器就安全多了。

修改TTL值其實很是簡單。經過註冊表編輯器就能夠實現,點擊「開始→運行」,在「運行」對話框中輸入「regedit」命令並回車,彈出「註冊表編輯器」對話框,展開「HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters」,找到「DefaultTTL」,將該值修改成十進制的「255」,從新啓動服務器系統後便可。

Windows操做系統下查看TTL時長:命令行執行ipconfig displaydns。目前Win查看是95s。


微軟windows下如何清空dns

   在微軟windows下,你能夠用命令ipconfig /flushd ns來清空dns 緩存內容。

  你也能夠用命令ipconfig /displaydns 來查看dns緩存內容。


Mac OSX下如何清空dns緩存

   在Mac OSX中,你能夠用這個命令lookupd -flushcache 來清空保留的緩存。

  bash-2.05a$ lookupd -flushcache

相關文章
相關標籤/搜索