Как браузеры обрабатывают несколько IP-адресов [закрыто]

11

Может кто-то направить меня к информации о точном поведении браузеров, когда браузер получает несколько записей A для данного имени хоста (скажем, ip1 и ip2), и одна из них недоступна.

Я заинтересован в точных деталях, таких как (но не ограничиваясь):

  1. Будет ли браузер получать 2 IP-адреса от операционной системы или только один?
  2. Какой ip будет пробовать браузер первым (случайный или всегда первый)? Теперь, допустим, браузер запустился с неисправного ip1
  3. Как долго браузер будет пробовать ip1?
  4. Если пользователь нажимает «стоп», пока он ждет ip1, а затем нажимает кнопку «Обновить»
    • какой IP попробует браузер?
  5. Что произойдет, когда истечет время ожидания - он начнет пробовать ip2 или выдаст ошибку? (И если ошибка, какой ip будет пытаться браузер, когда пользователь нажимает обновить).
  6. Когда пользователь нажимает кнопку «Обновить», будет ли браузер пытаться выполнить новый поиск DNS?

Теперь давайте предположим, что браузер сначала попытался запустить ip2.

  1. Для следующего запроса страницы, будет ли браузер по-прежнему использовать ip2, или он может произвольно переключать ips?
  2. Как долго браузеры хранят IP-адреса в своем кэше?
  3. Когда браузеры отправляют новый запрос DNS и получают те же ips, ПРОДОЛЖАЕТ ли он использовать тот же известный IP-адрес, который работает, или процесс начинается с нуля, и он может попробовать любой из двух?

Конечно, все это может зависеть от браузера, а также может варьироваться в зависимости от версии и платформы, я был бы рад получить максимум деталей.

Цель этого - я пытаюсь понять, что именно пользователи будут испытывать, когда используется циклический перебор на основе DNS и один из хостов выйдет из строя.

Пожалуйста, я НЕ спрашиваю о том, насколько плоха балансировка нагрузки на DNS, и, пожалуйста, воздерживайтесь от ответов "не делайте этого", "это плохая идея", "вам нужно heartbeat / proxy / BGP / что угодно" и так далее.

Sandman4
источник
1
Существует расширение браузера для Firefox, которое показывает IP-адрес (а), а также какой IP-адрес используется в настоящее время ( addons.mozilla.org/en-US/firefox/addon/showip/?src=search ). Вы также можете использовать вкладку «Net» в Firebug, чтобы показать, что IP-запросы обслуживались. Очевидно, что это относится только к Firefox, но я считаю, что консоль разработчика Chrome показывает, что IP-запросы были обработаны.
Пятно
Также обратите внимание, что некоторые DNS-серверы интернет-провайдера будут возвращать только один IP-адрес, почему они это делают, я понятия не имею
Smudge
Спасибо Сэм. И да, консоль chrome отображает DNS-запросы, кэш и показывает, какой IP запрашивается.
Sandman4
Если вы хотите поговорить о точном поведении, то первое, что нужно отметить о том, как веб-браузеры работают с записями, это то, что они этого не делают . Разрешение имен обрабатывается сетевым стеком. Итак, вы пытаетесь спросить о какой-то конкретной странности браузера, которую вы заметили, или вы спрашиваете о разрешении имен?
Роб Мойр
Браузеры получают (из сетевого стека) несколько IP-адресов, перечисленных в записях A для имени хоста. В Google Chrome попробуйте chrome: // net-internals / # dns и посмотрите сами.
Sandman4

Ответы:

5

В конце концов, я должен был сделать "исследование" самостоятельно. Вот поведение Chromium (версия 12.0.742.112) (работает на Ubuntu 11.04):

Обычно это работает так: попробуйте 1-й ip, по истечении времени ожидания (через 189 секунд) попробуйте 2-й ip. Нет сообщений об ошибках, пока все ips не попробовал. Следующее соединение будет начинаться с первого ip снова (даже если оно просто не удалось секунду назад, а второй ip сработал - браузеру все равно)

Одна интересная вещь - попытка TCP-соединения не прерывается, когда пользователь нажимает кнопку отмены - то есть, когда я нажимаю кнопку отмены и через 60 секунд нажимаю кнопку «Повторить», страница будет отображаться через 130 секунд (189 с первой попытки). Но если я нажму кнопку «Отмена» и щелкните обновите через 190 секунд, процесс начнется с начала.

Относительно пунктов в оригинальном Вопросе:

  1. Браузер получает оба IP-адреса от ОС, ОС не меняет порядок IP-адресов.
  2. Браузер всегда пытается подключиться к IP, который появляется первым
  3. Пытается за 189 секунд
  4. Во 2-й попытке он снова попробует первый IP.
  5. Когда время ожидания первого IP-адреса истекло, браузер автоматически переходит ко второму IP-адресу. Если это работает - страница появляется, если нет - ожидание продолжается.
  6. Не проверено. В этом блоге Chrome кэширует DNS на срок до 1 минуты, когда мы смотрим на chrome: // net-internals / # dns:

    Емкость: 100 Время жизни (мс) для записей об успехе: 60000 Время жизни (мс) для записей об ошибках: 0

Если первый IP работает, процесс будет таким же, и он всегда будет успешным с первой попытки.

Sandman4
источник
4

Вместо того, чтобы говорить людям, чего вы не хотите, почему бы не объяснить, чего вы пытаетесь достичь?

Если все, что вам нужно, это известные данные, тогда иди и исследуй себя, или прочитай документацию любого браузера (о сотнях), о котором ты говоришь.

Это может помочь вам узнать, что это не имеет ничего общего с DNS, хотя.

Если браузер получает запрос, он сначала просматривает различные кэши, чтобы узнать, присутствует ли URL, а если нет, то имя хоста.
Если нет, то он ударит системный распознаватель для разрешения имени хоста.

Если возвращаемый IP-адрес не отвечает, он наверняка кеширует это внутренне как отрицательный результат поиска , поэтому прямой запрос того же URL-адреса снова в надежде на попадание в другую запись A для него, вероятно, не будет иметь смысла, поскольку сохранили результат имени хоста вместе с отрицательным результатом IP.

Или, вы знаете, вы могли бы предоставить больше информации.

РЕДАКТИРОВАТЬ: я вижу, вы предоставили некоторую информацию между всеми требовательными и smartassery.

Отлично:

  1. Если браузер запрашивает у системного преобразователя имя хоста, он получит любую информацию об этом имени хоста. Если это означает 2 IP-адреса, то он вернет 2 IP-адреса.
  2. Это зависит от браузера.
  3. Это зависит от браузера, но все браузеры, которые я когда-либо использовал, выполняют один запрос, и время ожидания истекает после стандартного таймаута TCP CONNECT (); Я уверен, что где-то есть RFC ...
  4. Это зависит от браузера. Это не имеет ничего общего с DNS или сетью.
  5. Нет.
  6. Нет.

Вы также, кажется, не знаете, что записи DNS кэшируются везде, особенно на клиентах. Срок действия этих записей истекает в зависимости от намерений владельца домена или от того, какие кэши между вами и ним настроены. Обычно от одного часа до одного дня, поэтому не ожидайте, что распознаватель выполнит другой DNS-запрос, если вы нажмете «Обновить», как сумасшедший.

adaptr
источник
2
Добавлено объяснение того, чего я пытаюсь добиться. Я после известных данных, я надеялся, что кто-то знает, потому что это может занять несколько дней, чтобы найти соответствующую информацию. Требовать? Я прошу информацию, которая мне нужна, я не могу требовать - каждый может ответить или нет. Смартассеры? Мне больно от твоего поста, и я не думаю, что заслуживаю этого.
Sandman4
1
Я просто не хотел, чтобы дискуссия превратилась в пламя против балансировки нагрузки DNS. В любом случае, спасибо, что указали мне на TCP CONNECT ().
Sandman4