Почему команда dig возвращает только один IP-адрес google.com?

Как мы знаем, Google имеет более одного IP-адреса. Если мы используем веб-сайт https://toolbox.googleapps.com/apps/dig/#A/[email protected] приводит более одного IP-адреса google.

Если я выполню следующую команду, сценарий будет другим:

gyan@localhost:~/codes/java/net$ dig google.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11777
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     269 IN  A   216.58.220.46

;; Query time: 0 msec
;; SERVER: 10.100.171.1#53(10.100.171.1)
;; WHEN: Fri Nov 04 16:18:07 IST 2016
;; MSG SIZE  rcvd: 55

gyan@localhost:~/codes/java/net$ 

Возвращен только один IP-адрес, который не совпадает с адресом, возвращенным вышеуказанным веб-сайтом. Этот IP-адрес также время от времени меняется.

Но если я запускаю команду dig для amazon.com:

gyan@localhost:~/codes/java/net$ dig amazon.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55090
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;amazon.com.            IN  A

;; ANSWER SECTION:
amazon.com.     34  IN  A   54.239.26.128
amazon.com.     34  IN  A   54.239.17.7
amazon.com.     34  IN  A   54.239.25.192
amazon.com.     34  IN  A   54.239.25.208
amazon.com.     34  IN  A   54.239.25.200
amazon.com.     34  IN  A   54.239.17.6

;; Query time: 74 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Nov 04 16:23:17 IST 2016
;; MSG SIZE  rcvd: 135

gyan@localhost:~/codes/java/net$ 

Эти 6 IP-адресов никогда не меняются для amazon.com. И веб-сайт https://toolbox.googleapps.com/apps/dig/#A/[email protected] также возвращает те же 6 IP-адресов.

Я сомневаюсь, чем DNS-поиск для google.com отличается от amazon.com? Почему Google выдает только одну запись, а не более одной, как Amazon?


person my name is GYAN    schedule 04.11.2016    source источник
comment
DNS-запросы для двух разных доменов, безусловно, будут разными; тем не менее, GeoDNS и Anycast, вероятно, то, что вы ищете :)   -  person Dusan Bajic    schedule 04.11.2016
comment
Я не знал об их наборе инструментов. Очень полезно!   -  person o9000    schedule 04.11.2016


Ответы (1)


Как мы знаем, Google имеет более одного IP-адреса.

Истинный. Но это не означает, что клиент должен знать больше, чем один из них.

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

Балансировка нагрузки на основе DNS всегда была хаком. У него есть проблемы из-за кэширования: если преобразователь DNS интернет-провайдера кэширует ответ, большое количество пользователей будет подключаться к этим нескольким IP-адресам, что снижает эффективность балансировки нагрузки. Обходной путь для этого — снизить TTL записей, чтобы записи оставались в кэше в течение небольшого промежутка времени, после чего выполняется новый запрос. Например, значение TTL равно 34 секундам для записей amazon.com A в опубликованных вами результатах раскопок.

Метод работает не очень. Уменьшение TTL приводит к дальнейшему увеличению задержки для небольших HTTP-запросов. Кроме того, результат балансировки нагрузки DNS немного непредсказуем в том смысле, что он не гарантирует, что серверы будут обрабатывать нагрузку равномерно.

Однако, если у вас есть балансировщик нагрузки, работающий на сетевом уровне (представьте себе, что это блок обратного NAT: один IP-адрес выходит в Интернет, мультиплексируя трафик на большое количество серверов за ним), он может обрабатывать множество подключений и также имеет хороший аптайм, нет необходимости делать балансировку нагрузки на уровне DNS.

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

Другой вопрос заключается в том, почему, если вы запрашиваете 8.8.8.8 из панели инструментов, вы получаете несколько адресов, а при запросе с вашего компьютера вы получаете только один.

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

DNS-серверы не обязаны возвращать одинаковые ответы разным клиентам. На самом деле обычно возвращаются разные ответы в зависимости от географического положения клиента: например, если пользователь из Европы запрашивает google.com, он получит IP-адрес центра обработки данных в Европе, а не в США.

В этом случае я думаю, что геолокация DNS используется для некоторых клиентов, а не для других. Это может быть связано с размером сети, из которой отправляется запрос, и мощностью балансировщика сетевой нагрузки. Например, если балансировщик нагрузки может обрабатывать 1 000 000 одновременных подключений, а сеть, из которой вы отправляете запрос, имеет 100 000 IP-адресов, нет необходимости выполнять балансировку нагрузки DNS. Но если сеть большая (в вашем примере размер центра обработки данных, на котором запущен набор инструментов, балансировщик сетевой нагрузки может не справиться с этим, поэтому балансировка нагрузки DNS включена, и вы получаете несколько случайных IP-адресов из пула.

Примечание: под «сетью» я подразумеваю набор машин, которые используют один и тот же преобразователь DNS.

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

person o9000    schedule 04.11.2016
comment
Вы уверены в утверждении, что DNS-запрос отправляет веб-сервер, а не ваш компьютер. обычно мы читаем в книгах. этому компьютеру нужен запрос к DNS-серверам для разрешения ip-адреса. - person hackwithharsha; 15.06.2020
comment
@hackwithharsha Я думаю, он имел в виду веб-сервер, на котором размещен набор инструментов Google. - person Shinto C V; 24.06.2021