主机名可以解析为多个 IP 地址,这是什么样的情况?

主机名可以解析为多个 IP 地址,这是什么样的情况?

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

主机名不对应于 {ipaddress,port} 元组。主机名只是服务器的名称,应该可以解析为一个或多个 IP 地址。端口与主机名完全无关。

我的问题是:

(1) 我只知道(但从未假设我真正知道)主机名最多只能解析为一个 IP 地址。那么主机名可解析为多个 IP 地址是什么感觉呢?

(2)指定不同端口的主机名能解析到同一个IP地址吗?指定不同端口的主机名能调用不同的服务器吗?

谢谢。

答案1

1)主机名可以解析为多个 IP 地址;这称为DNS 循环并可用于负载分配、负载平衡或容错。

2)主机名与端口没有任何关系,它们仅映射到一个或多个 IP 地址。

答案2

一个例子是 Cloudfire 提供的 DNS 名称服务。

$ 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 地址完全无关。您可以设置一些东西,比如在 Linux 中的 iptables 中,将特定端口转发到不同的服务器,但这种情况并不常见。

答案3

将 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

现在,我们只需要一个地址即可连接到 Web 服务器,因此我们将其解释为“选择这些地址中的任意一个”。通常,每个人都会选择第一个地址,因此 DNS 服务器会在您每次询问时更改顺序;这样,负载就会分散到不同的地址之间。这就是“循环 DNS”的含义。

这里有一个重要的免责声明:DNS 实际上并不像数据库:当我们查询 DNS 服务器时,它可以随意给出答案,就像我们向 Web 服务器查询 URL 一样。例如,如果我查找 的地址google.com,我会得到以下结果:

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

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

这并不意味着只有一个 IP 地址可供所有想要连接的人使用google.com;相反,这意味着负责该域的服务器已经决定将其分配给该 IP 地址,这与它给出的地址不同

相关内容