通过负载均衡器+域名实现容灾切换-(3)浏览器的DNS缓存过程
===========================================
瀏覽器訪問的DNS緩存機制
參考:https://blog.csdn.net/realmeh/article/details/22663807
===========================================
關于瀏覽器的DNS緩存機制,有一篇詳細的文章描述:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/
簡單來說,一條域名的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文件生效!
如何清除瀏覽器的DNS緩存呢?
1、chrome
chrome對每個域名會默認緩存60s。
chrome://chrome-urls/可以看到chrome所有的配置界面。chrome://dns或者chrome://net-internals/#dns可以查看chrome瀏覽器的dns緩存信息,點擊“Clear host cache”+然后選擇"clear cache"和 " flush socket",可以清空chrome的dns緩存。
2、firefox
network.dnsCacheEntries:緩存的數量
network.dnsCacheExpiration:dns緩存的時間
network.dnsCacheExpirationGracePeriod:dns緩存的時間,設置為0表示不緩存
如果一個域名的DNS解析結果會有多個的話(A記錄列表),瀏覽器是如何處理的呢?
Chrome瀏覽器會優先向第一個IP發起HTTP請求,如果不通,再向后面的IP發起HTTP請求。
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
轉載于:https://www.cnblogs.com/yickel/p/10961963.html
總結
以上是生活随笔為你收集整理的通过负载均衡器+域名实现容灾切换-(3)浏览器的DNS缓存过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我被认定为高层次人才了!
- 下一篇: 注释,今晚我不关心代码,我只想你