来自https://serverfault.com/a/953384/16981
主机名不对应于{ipaddress,port} tuple。主机名仅是服务器的名称,应可解析为一个或多个IP地址。端口与主机名毫无关系。
我的问题是:
(1)我只知道(而且从不假设我确实知道)主机名被解析为不超过一个IP地址。那么,主机名可解析为多个IP地址是什么样的呢?
(2)是否指定具有不同端口的主机名解析到同一个IP地址?使用不同端口指定的主机名可以调用不同的服务器吗?
谢谢。
发布于 2019-02-11 17:28:56
1)主机名可以解析为多个IP地址;这称为DNS循环,可用于负载分配、负载平衡或容错。
2)主机名与端口没有任何关系,它们只映射到一个或多个IP地址。
发布于 2019-02-11 17:31:51
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,将特定的端口转发到不同的服务器上,但这是不寻常的。
发布于 2019-02-12 14:32:11
一种看待DNS的方法是作为一个大型的分布式键值存储。
www.google.com)和记录类型(例如“地址”的A )组成。当您想向serverfault.com发出HTTP请求时,您需要做的第一件事是查找该域的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地址,这与它给出的地址不同。
https://serverfault.com/questions/953392
复制相似问题