web-dev-qa-db-ja.com

ブラウザが複数のIPを処理する方法

誰かが私にexactブラウザの動作に関する情報を、ブラウザが特定のホスト名(たとえば、ip1とip2)に対して複数のAレコードを取得し、そのうちの1つにアクセスできない場合に案内できますか?.

次のような正確な詳細に興味があります(ただし、これらに限定されません)。

  1. ブラウザはOSから2つのIPを取得しますか、それとも1つしか取得しませんか?
  2. ブラウザは最初にどのIPを試しますか(ランダムまたは常に最初のもの)?今、失敗したip1でブラウザが起動したとしましょう
  3. ブラウザはどれくらいの間ip1を試しますか?
  4. ユーザーがip1を待機しているときに「停止」をクリックしてから、[更新]をクリックした場合
    • ブラウザはどのIPを試しますか?
  5. タイムアウトするとどうなりますか?ip2の試行が開始されるか、エラーが発生しますか? (エラーの場合、ユーザーが[更新]をクリックしたときにブラウザーが試行するIP)。
  6. ユーザーが[更新]をクリックすると、ブラウザーは新しいDNSルックアップを試みますか?

ここで、ブラウザが最初にip2の動作を試みたと仮定しましょう。

  1. 次のページ要求では、ブラウザーは引き続きip2を使用しますか、それともランダムにipsを切り替える可能性がありますか?
  2. ブラウザがIPをキャッシュに保持する期間は?
  3. ブラウザが新しいDNSリクエストを送信し、同じIPを取得する場合、同じ既知の正常に機能するIPを使用し続けますか、それともプロセスが最初から開始され、2つのうちいずれかを試す可能性がありますか?

もちろん、それはすべてブラウザに依存している可能性があり、バージョンやプラットフォームによっても異なる可能性があるため、最大限の詳細を提供させていただきます。

これの目的-ラウンドロビンDNSベースが使用され、ホストの1つが失敗したときにユーザーが正確に何を体験するかを理解しようとしています。

DNSロードバランシングがどれほど悪いのかは尋ねていません。「やらない」、「悪い考え」、「ハートビート/プロキシ/ BGP /何でも必要」などの回答は控えてください。

11
Sandman4

結局のところ、私は自分で「研究」をしなければなりませんでした。これがChromium(バージョン12.0.742.112)の動作(ubuntu 11.04で実行)です。

一般的には、次のように機能します。タイムアウトになると(189秒後)、1番目のIPを試し、2番目のIPを試します。すべてのIPが試行されるまで、エラーメッセージは表示されません。次の接続は、最初のIPから再び開始されます(2秒間前に失敗し、2番目のIPが機能した場合でも、ブラウザーは関係ありません)。

興味深いことの1つ-TCPユーザーがキャンセルを押しても接続試行はドロップされません。つまり、キャンセルを押して60秒後に再試行をクリックすると、ページは130秒で表示されます(最初の試行から189) 。)しかし、[キャンセル]をクリックして[更新]をクリックするとafter190秒経過すると、プロセスは最初から開始されます。

元の質問の項目について:

  1. ブラウザはOSから両方のIPを取得します。OSはIPの順序を変更しません。
  2. ブラウザalwaysが最初に表示されるIPに接続しようとします
  3. 189秒間試行します
  4. 2回目の試行では、最初のIPを再試行します。
  5. 最初のIPがタイムアウトすると、ブラウザは黙って2番目のIPに進みます。機能する場合-ページが表示され、機能しない場合-待機が続行されます。
  6. 未検証。 このブログ 状態Chrome chrome:// net-internals /#dnsを見ると、DNSを最大1分間キャッシュします:

    容量:100成功エントリの存続時間(ms):60000失敗エントリの存続時間(ms):0

最初のIPが機能する場合、プロセスは同じで、最初の試行で常に成功します。

5
Sandman4

あなたが望まないことを人々に話す代わりに、それがあなたが達成しようとしていることを説明してみませんか?

必要なものがすべて既知のデータである場合は、自分で調べてみるか、話しているブラウザー(何百ものブラウザー)のドキュメントを読んでください。

ただし、これはDNSとは関係がないことを理解するのに役立ちます。

ブラウザがリクエストを受け取った場合、ブラウザはまずさまざまなキャッシュを調べて、URLが存在しないかどうか、またはホスト名が存在しているかどうかを確認します。
そうでない場合、システムリゾルバにヒットしてホスト名を解決します。

返されたIPが応答しない場合、これは内部的にnegative lookup resultとしてキャッシュされるため、別のAレコードにヒットすることを期待して同じURLを再度直接リクエストすることになります。否定的なIPの結果とともにホスト名の結果を保存するため、何の役にも立ちません。

または、もっと詳しい情報を提供できます。

編集:私はあなたがすべての厳しいとsmartasseryの間でいくつかの情報を提供したのを見ます。

結構:

  1. ブラウザがシステムリゾルバにホスト名を要求すると、そのホスト名に関する情報があればそれを返します。 2つのIPを意味する場合、2つのIPを返します。
  2. それはブラウザに依存します。
  3. それはブラウザに依存しますが、これまでに使用したすべてのブラウザは単一のリクエストを実行し、標準のTCP CONNECT()タイムアウト後にタイムアウトします。そのことについてRFCがあることはかなり確実ですどこかに...
  4. それはブラウザに依存します。 DNSやネットワークとは関係ありません。
  5. 番号。
  6. 番号。

また、DNSレコードがすべての場所、特にクライアントにキャッシュされていることを知らないようです。これらのレコードは、ドメイン所有者が何を意図しているか、またはあなたと彼の間のキャッシュの構成に応じて、期限切れになります。 1時間から1日が一般的であるため、マッドマンのように更新をヒットした場合にリゾルバーが別のDNSクエリを実行することを期待しないでください。

4
adaptr