Використовуючи кілька A-записів для мого домену - чи веб-браузери ніколи не пробують більше одного?


94

Якщо я додаю кілька A-записів для свого домену, вони повертаються в порядку кругового замовлення серверами DNS.

Приклад:

192.0.2.1 A example.com
192.0.2.2 A example.com
192.0.2.3 A example.com

Але як реагують веб-браузери, якщо перший хост ( 192.0.2.1) не працює (недоступний)? Чи пробують вони другий хост ( 192.0.2.2) чи повертають повідомлення про помилку користувачеві? Чи є різниця між найпопулярнішими браузерами?

Якщо я реалізую власний додаток, я можу реалізувати так, щоб другий використовувався у випадку, коли перший не працює, тому це можливо. І це було б дуже корисно для створення веб-сайту про відмову.

Відповіді:


87

Так, більшість браузерів за останні 5-10 років спробують інші записи А, якщо один не відповідає. Іноді це, мабуть, називається "повторний пошук браузера" або "повторний клієнт". Ви в значній мірі тільки знайти матеріал про це в контексті різних браузерів подвигів , які ця функція дозволяє з сайтами , не використовуючи його (див DNS перепрісваіванія і DNS пиннинг , анти-Dns пиннинг, анти-анти-Dns пиннинг, анти-анти -anti-dns закріплення тощо). Вигляд поганої репутації, але це доводить, що вона існує.

Практично кожен веб-переглядач дійсно отримує повний список записів A, і справді перевіряє інших, чи не вдається той, який він використовує. Ви можете очікувати, що кожен клієнт матиме 30-секундне очікування, коли він вперше спробує отримати доступ до сайту, коли сервер не працює, поки він не підключиться до робочої адреси. Потім браузер буде кешувати, яка адреса працює, і продовжить використовувати її для майбутніх запитів, якщо вона також не завершиться, тоді доведеться знову шукати список. Тож зачекайте 30 секунд на перший запит, після чого добре.

Але це не те, що ви обов'язково хочете використовувати, це буде багато застережень щодо сумісності браузера, ОС сумісності, сумісності з проксі, кешами керування матимуть дивні ефекти на те, чи пам’ятає він, які IP-адреси вниз або починає мати що чекайте 30 секунд на кожен запит, люди, які пишуть власні клієнти для вашого сайту, в кінцевому підсумку використовують gethostbyname замість getaddrinfo і не зможуть впоратися з відмовою, усілякі можливі проблеми.

Ви також не можете розраховувати на кілька записів A, щоб дозволити "master" та "slave" сервери, тому що ви ніколи не дізнаєтесь, яку адресу браузер вибере зі списку. Всі вони повинні бути настільки ж здатними обробляти відвідувачів, якщо вони працюють, тому що будь-хто може отримати трафік, якщо він працює. Веб-переглядач може подумати, що ваш третій сервер зі списку є найбільш привабливим, можливо, він виглядає найближчим, і він обере саме той, хоча всі троє все ще працюють.

Але якщо ви можете жити з обмеженнями і мати досить просту систему HTTP, з якою можна передбачити взаємодію браузера, вона буде працювати.

О, вам також доведеться мати справу з багатьма людьми, які говорять вам, що цього не існує (оскільки це було правдою 15 років тому). Але ви можете спробувати telnet-ing до доменного імені з кількома записами A, деякі з мертвими IP-адресами та якісь хороші, якщо вам доведеться це довести (так, навіть хороший старий telnet зараз використовує цейдрінфо і обробляє декілька записів A в цей день витончено) - він надрукує приємний список IP-адрес, які він намагається, поки остаточно не вдається.


12
Ось звіт Національного бюро економічних досліджень, який підтримує відповідь Джоффа.
Марко

3
Інтригуюче, хоча stackexchange.com вказує на один IP, Google повертає кілька: $ dig google.com @ ns1.google.com ;; ВІДПОВІДЬ РОЗДІЛ: google.com. 300 В A 74.125.226.6 google.com. 300 В A 74.125.226.7 google.com. 300 В A 74.125.226.0 google.com. 300 В A 74.125.226.4 google.com. 300 В A 74.125.226.8 google.com. 300 В A 74.125.226.2 google.com. 300 В A 74.125.226.1 google.com. 300 В A 74.125.226.3 google.com. 300 В A 74.125.226.5 google.com. 300 В A 74.125.226.14 google.com. 300 IN A 74.125.226.9
Луї Сент-Амур

1
Вибачте, але я не думаю, що це так працює. Браузери не мають нічого спільного з вирішенням IP-адрес - це відбувається в системному програмному забезпеченні. Якщо ви надаєте кілька записів A, слід припустити, що будь-який клієнт отримає випадковий список зі списку.
Ян Штейнман

19
Це є , як це працює в сучасних браузерах. Всі вони вирішують використовувати системні дзвінки на зразок getaddrinfo (), щоб отримувати декілька IP-адрес та внутрішньо обробляти помилки, а не отримувати єдину IP-адресу від системи. Інші коментатори та відповідачі тут є частиною "безлічі людей, які говорять вам, що цього не існує" з останнього абзацу Джоффа --- Я припускаю, що вони означають добре, але вони поширюють дезінформацію.
Роберт Тупело-Шнек

1
Щоб підтвердити заяву Джоффа про "браузери 5-10 років тому", ось тест, зроблений Національним бюро економічних досліджень, який стверджує, що ви отримаєте подібну систему, яка працює до IE 8. Звук справедливий для мене. :)
Джомар Севільойо

5

Попереджуйте, що Windows Vista реалізує тупі частини RFC3484 (тобто зворотну підтримку від IPV6 до IPV4), і віддасть перевагу IP-адресу, яка ділиться більшою кількістю префіксів з IP-адресою користувача, а не вибирає одну навмання. Оскільки більшість користувачів мають IP-адреси, що починаються з 192.168, це означає, що залежно від того, хто з ваших IP-адрес може поділитися більшістю біт префікса, отримає більшу частину трафіку Vista. Microsoft виправила цей особливий ідіотизм у Windows 7 та пізніших версіях, тож це не стільки проблема, скільки раніше.


Vista, це добре!
the0ther

3

Це основна методика розподілу балансування навантаження DNS: DNS Round Robin. Це не має нічого спільного з браузером, це залежить від реалізації резолюції та локального / віддаленого кешу адреси DNS. Зміни полягають у тому, що якщо сервер не працює, через кешування у DNS-шарі веб-сайт може виявитися недоступним.

Тут ви знайдете основні пояснення щодо Round Robin DNS на WikiPedia.


1
Ну, оскільки браузер є роздільною здатністю - це залежить від реалізації браузера, як того, що я знаю.
Йонас

2
Ні, є системна бібліотека, яка вирішує dns, звичайно, використовуючи сервер імен DNS, який ви налаштовуєте в системі. Функція є частиною стандартної бібліотеки операційної системи.
кеч

Але і nslookup cnn.comв Windows, і host cnn.comв Linux повертається список IP-адрес, тож це однозначно залежить від реалізації браузера .
Йонас

5
@iivel: Ні, це неправда. Якщо я напишу програму Java і вирішую ім’я за допомогою InetAddress.getAllByName ("example.com"), я отримую список з усіма IP-адресами, тож я можу вибрати, щоб запустити TCP-з'єднання з усіма ними, якщо хочу. І те саме, якщо ви використовуєте getaddrinfo () в C. Отже, це безумовно вибір, який роблять розробники, а не Операційна система.
Йонас

1
@ J.Money Це питання задає саме те, що стосується реалізації, а не як ми можемо це зробити.
Франклін Ю

0

ОС визначає, який IP використовувати, а не браузер. Windows обійде повернутий список (у списку, переданому з DNS), хоча й надалі буде використовувати ту саму адресу, поки DNS не змиється або не вичерпається. * Реалізації ix частково залежать від пакетної реалізації пакету tcp, але зазвичай також дотримуються методу круглої роботи.


2
Ні, це неправильно. Якщо я напишу програму Java і вирішую ім'я, InetAddress.getAllByName("example.com")я отримую список із усіма IP-адресами, тож я можу вибрати, щоб запустити TCP-з'єднання з усіма ними, якщо хочу. І те саме, якщо ви використовуєте getaddrinfo()в C. Отже, це безумовно вибір, який роблять розробники, а не Операційна система. DNS-сервер вирішує лише в тому порядку, в якому повертається список IP-адрес.
Йонас

Гаразд, так що ви можете вручну робити все, що завгодно, зі стеком - ви можете навіть згорнути свій власний і забути про winsock всі разом. Однак якщо ви пишете додаток і дозволите операційній системі робити все, що робиться (абстрактно далеко) - тоді поведінка є такою, як зазначалося. Ви запитували конкретно про традиційну поведінку програми - не те, що можливо. Більшість розробників поводяться з використанням невирішеного імені та дозволяють ОС робити те, що робить, а не чітко поєднувати поведінку разом.
iivel

1
Не впевнений, чому відповідь було оскаржено, але питання в тому, що роблять браузери. Наразі всі браузери дозволяють ОС робити дозвіл (окрім деяких плагінів для Firefox та Chrome). Якщо ви хочете отримати детальну інформацію про те, як забезпечити доступність, якщо постачальник послуг знизиться - перегляньте балансири завантаження або кластеризацію.
iivel

Браузери, напевно, так і роблять, як ви кажете - нехай ОС робить пошук DNS, але він повертає список із IP-адресами в браузер. І питання: Що роблять найпопулярніші браузери, якщо перша адреса недоступна? вони спробують другий?
Йонас

2
Стаття, яку ви цитували Піта Тенерейло, як відомо, застаріла (в основному невірна в наші дні). З Chrome, chrome: // net-Internals / # dns відображається поточний кеш DNS. Я не вірю, що ОС завжди визначає, який IP використовувати. Принаймні за допомогою Chrome ви можете використовувати AAAA, якщо вони доступні, або лише A. OP говорить про те, як браузери вибирають DNS, а не про те, як комп'ютер знаходить свій DNS-сервер ....
sdaffa23fdsf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.