主机名可以解析为多个IP地址是什么样子的?

分享于 

5分钟阅读

互联网

 

问题:

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

主机名与 {ipaddress,port} 元组不对应。 主机 NAME 只是服务器的NAME,应该可以解析为一个或者多个IP地址。 端口与主机名称根本没有关系。

我的问题是:

( 1 ) 我只知道( 不要假设我知道) 一个主机名被解析为不超过一个IP地址。 那么主机 NAME 可以解析多个IP地址是什么样子的?

( 2 ) 是由不同端口指定的主机 NAME 解析为相同的IP地址? 可以使用不同端口指定的主机 NAME 调用不同的服务器?

谢谢。


回答 1:

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

2 ) 主机名与端口无关,它们只映射到一个或者多个IP地址。


回答 2:

Cloudfire提供的DNS NAME 服务就是一个例子。


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主机 NAME,则将连接到IPv4或者IPv6地址的另一个或者另一个,通常是两个地址之间的。

端口与IP地址完全无关。 你可以在Linux中设置一些内容,以便将特定端口转发到不同的服务器,但这是不同的。


回答 3:

一种查看DNS的方法是作为大型分布式 key-value 存储。

  • 键由域 NAME ( 比如 ) 组成。 www.google.com ) 和记录类型( 比如。 "地址"的A )。
  • 值基本上是一个字符串,它的含义取决于记录类型。
  • 每个键可以有多个值。 同样,这意味着什么取决于记录类型。

当你想向 serverfault.com 发出一个HTTP请求时,首先要做的是查找该域的A 记录。 所以你查询DNS系统,查找该密钥的值,并返回一个地址,如 216.58.206.132

然后,你可以在任何你喜欢的端口上建立到该地址的连接。 这可能是用户指定的端口( 比如。 用于URL的8080 ) 或者你期望工作的默认。

对于 A 记录,和 HTTP,没有任何设施可以告诉你使用哪个端口。 其他记录类型( 比如。SRV ) 可以指定更多信息,包括地址和端口号,甚至是一组配置值,你需要使用这些值成功地与服务器进行对话。

实际上,如果你实际查询 A 记录,你将得到的实际上是 answers列表:


;; 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服务器时,它可以构建一个答案,就像我们查询web服务器一样。 例如如果我查找 google.com的地址,我将得到以下信息:


;; QUESTION SECTION:


;google.com. IN A



;; ANSWER SECTION:


google.com. 25 IN A 216.58.206.78



但并不是说只有一个IP地址服务于所有希望连接到 google.com的人;相反,这意味着负责该域的服务器已经决定了这个域,这与它所给的地址不同,即你所说的地址。



添加  HOST  Ip地址  
相关文章