Domain-Name-System

瀏覽器如何處理多個 IP

  • December 7, 2015

當瀏覽器獲取給定主機名(例如 ip1 和 ip2)的多個 A 記錄並且其中一個無法訪問時,有人可以指導我了解有關確切瀏覽器行為的資訊。

我對確切的細節感興趣,例如(但不限於):

  1. 瀏覽器會從作業系統獲得 2 個 IP,還是只會獲得一個?
  2. 瀏覽器將首先嘗試哪個 ip(隨機或總是第一個)?現在,假設瀏覽器以失敗的 ip1 啟動
  3. 瀏覽器會嘗試多長時間 ip1 ?
  4. 如果使用者在等待 ip1 時點擊“停止”,然後點擊刷新
  • 瀏覽器會嘗試哪個IP?
  1. 當它超時時會發生什麼 - 它會開始嘗試 ip2 還是給出錯誤?(如果出錯,當使用者點擊刷新時,瀏覽器會嘗試哪個 ip)。
  2. 當使用者點擊刷新時,任何瀏覽器都會嘗試新的 DNS 查找嗎?

現在讓我們假設瀏覽器首先嘗試工作 ip2。

  1. 對於下一頁請求,瀏覽器是否仍然使用ip2,或者它可能會隨機切換ips?
  2. 瀏覽器在記憶體中保留 IP 多長時間?
  3. 當瀏覽器發送新的 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 秒刷新,該過程將從頭開始。

關於原始問題中的項目:

  1. 瀏覽器從作業系統獲取兩個 IP,作業系統不會更改 IP 的順序。
  2. 瀏覽器總是嘗試連接最先出現的 ip
  3. 嘗試 189 秒
  4. 在第二次嘗試時,它將再次嘗試第一個 IP。
  5. 當第一個 IP 超時時,瀏覽器會靜默繼續訪問第二個 IP。如果它有效 - 頁面顯示,如果沒有 - 等待繼續。
  6. 未測試。當我們查看 chrome://net-internals/#dns 時,該部落格指出 Chrome 最多記憶體 DNS 1 分鐘:

容量:100 成功條目的生存時間(毫秒):60000 失敗條目的生存時間(毫秒):0

如果第一個 IP 有效,則過程將相同,並且始終會在第一次嘗試時成功。

引用自:https://serverfault.com/questions/327708