каково то, что имя хоста может быть преобразовано в несколько IP-адресов? [закрыто]

Из https://serverfault.com/a/953384/16981

Имена хостов не соответствуют кортежу {ipaddress, port}. Имя хоста - это только имя сервера, которое должно разрешаться в один или несколько IP-адресов. Порты вообще не имеют ничего общего с именами хостов.

Мои вопросы:

(1) Я знаю только (и никогда не предполагаю, что знаю), что имя хоста разрешено не более чем в один IP-адрес. Так как же это, если имя хоста разрешается более чем в один IP-адрес?

(2) Указывается ли имя хоста с разными портами для одного и того же IP-адреса? Может ли имя хоста, указанное для разных портов, вызывать разные серверы?

Спасибо.

-3
задан 12 February 2019 в 18:20
3 ответа

1) Имя хоста может быть преобразовано в несколько IP-адресов; это называется циклическим перебором DNS и может использоваться для распределения нагрузки, балансировки нагрузки или обеспечения отказоустойчивости.

2) Имена хостов никоим образом не связаны с портами, они сопоставляются только с одним или несколькими IP-адреса.

8
ответ дан 5 December 2019 в 21:48

DNS можно рассматривать как большое распределенное хранилище значений ключей.

  • Ключ состоит из имени домена (например, www.google.com ]) и тип записи (например, A для «Адрес»).
  • Значение в основном представляет собой строку, значение которой зависит от типа записи.
  • Каждый ключ может иметь несколько значений. Опять же, то, что это означает, зависит от типа записи.

Когда вы хотите сделать HTTP-запрос к serverfault.com , первое, что вам нужно сделать, это найти A ] запись для этого домена. Таким образом, вы запрашиваете систему DNS, чтобы узнать значение этого ключа, и возвращаете адрес, например 216.58.206.132 .

Затем вы можете установить соединение с этим адресом на любом порту, который вы любить. Это может быть порт, указанный пользователем (например, 8080 для URL http://www.google.com:8080/ ), или значение по умолчанию, которое, как вы ожидаете, будет работать ( 80 для HTTP, 443 для HTTPS).

В случае записей A и HTTP, DNS не может указать вам, какой порт использовать. Другие типы записей (например, SRV ) могут указывать дополнительную информацию, включая адрес и номер порта, или даже набор значений конфигурации, которые необходимо использовать для успешного взаимодействия с сервером.

Если вы на самом деле запросите запись A для serverfault.com , вы получите список ответов :

;; QUESTION SECTION:
;serverfault.com.               IN      A

;; ANSWER SECTION:
serverfault.com.        174     IN      A       151.101.129.69
serverfault.com.        174     IN      A       151.101.193.69
serverfault.com.        174     IN      A       151.101.1.69
serverfault.com.        174     IN      A       151.101.65.69

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

Важным отказом от ответственности является то, что DNS на самом деле не похож на базу данных: когда мы запрашиваем DNS-сервер, он может дать ответ, как ему нравится, точно так же, как когда мы запрашиваем URL-адрес веб-сервера. Например, если я ищу адрес google.com , я получаю следующее:

;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             25      IN      A       216.58.206.78

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

3
ответ дан 5 December 2019 в 21:48

Примером является служба имен DNS, предоставляемая Cloudfire.

$ host one.one.one.one
one.one.one.one has address 1.1.1.1
one.one.one.one has address 1.0.0.1
one.one.one.one has IPv6 address 2606:4700:4700::1111
one.one.one.one has IPv6 address 2606:4700:4700::1001

Если вы попытаетесь подключиться к имени хоста DNS, вы подключитесь к одному или другому из адресов IPv4 или IPv6, как правило чередование двух адресов.

Порты совершенно не связаны с IP-адресами. Вы можете настроить что-то, например, в iptables в Linux, для переадресации определенного порта на другой сервер, но это необычно.

4
ответ дан 5 December 2019 в 21:48

Теги

Похожие вопросы