Domain-Name-System
瀏覽器如何處理多個 IP
當瀏覽器獲取給定主機名(例如 ip1 和 ip2)的多個 A 記錄並且其中一個無法訪問時,有人可以指導我了解有關確切瀏覽器行為的資訊。
我對確切的細節感興趣,例如(但不限於):
- 瀏覽器會從作業系統獲得 2 個 IP,還是只會獲得一個?
- 瀏覽器將首先嘗試哪個 ip(隨機或總是第一個)?現在,假設瀏覽器以失敗的 ip1 啟動
- 瀏覽器會嘗試多長時間 ip1 ?
- 如果使用者在等待 ip1 時點擊“停止”,然後點擊刷新
- 瀏覽器會嘗試哪個IP?
- 當它超時時會發生什麼 - 它會開始嘗試 ip2 還是給出錯誤?(如果出錯,當使用者點擊刷新時,瀏覽器會嘗試哪個 ip)。
- 當使用者點擊刷新時,任何瀏覽器都會嘗試新的 DNS 查找嗎?
現在讓我們假設瀏覽器首先嘗試工作 ip2。
- 對於下一頁請求,瀏覽器是否仍然使用ip2,或者它可能會隨機切換ips?
- 瀏覽器在記憶體中保留 IP 多長時間?
- 當瀏覽器發送新的 DNS 請求並獲得相同的 ips 時,它會繼續使用相同的已知工作 IP,還是該過程從頭開始,它可能會嘗試兩者中的任何一個?
當然,這一切都可能取決於瀏覽器,並且也可能因版本和平台而異,我很樂意提供最多的細節。
這樣做的目的 - 我試圖了解當使用基於循環 DNS 並且其中一台主機發生故障時使用者將體驗到什麼。
拜託,我不是在問 DNS 負載平衡有多糟糕,請不要回答“不要這樣做”、“這是個壞主意”、“你需要心跳/代理/BGP/任何東西”等等。
畢竟,我必須自己做“研究”。這是 Chromium(版本 12.0.742.112)的行為(在 ubuntu 11.04 上執行):
通常它是這樣工作的:嘗試 1-st ip,一旦超時(189 秒後)嘗試 2-nd ip。在嘗試所有 ip 之前沒有給出錯誤消息。下一個連接將再次從第一個 ip 開始(即使它在一秒鐘前失敗並且第二個 ip 工作 - 瀏覽器不在乎)
一件有趣的事情 - 當使用者點擊取消時,TCP 連接嘗試不會被丟棄 - 即當我點擊取消時,60 秒後點擊重試,頁面將在 130 秒後顯示(從第一次嘗試開始為 189)。但是如果我點擊取消並點擊190 秒後刷新,該過程將從頭開始。
關於原始問題中的項目:
- 瀏覽器從作業系統獲取兩個 IP,作業系統不會更改 IP 的順序。
- 瀏覽器總是嘗試連接最先出現的 ip
- 嘗試 189 秒
- 在第二次嘗試時,它將再次嘗試第一個 IP。
- 當第一個 IP 超時時,瀏覽器會靜默繼續訪問第二個 IP。如果它有效 - 頁面顯示,如果沒有 - 等待繼續。
- 未測試。當我們查看 chrome://net-internals/#dns 時,該部落格指出 Chrome 最多記憶體 DNS 1 分鐘:
容量:100 成功條目的生存時間(毫秒):60000 失敗條目的生存時間(毫秒):0
如果第一個 IP 有效,則過程將相同,並且始終會在第一次嘗試時成功。