Назад | Перейти на главную страницу

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

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

Меня интересуют ТОЧНЫЕ детали, такие как (но не ограничиваясь ими):

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

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

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

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

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

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

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

Обычно это работает так: попробуйте 1-й ip, после истечения времени ожидания (через 189 секунд) попробуйте 2-й ip. Сообщения об ошибках не выводятся, пока не будут выполнены все попытки IP-адресов Следующее соединение снова начнется с первого 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-адрес работает, процесс будет таким же, и он всегда будет успешным с первой попытки.

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

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

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

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

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

Или вы можете предоставить дополнительную информацию.

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

Отлично:

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

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