DNS 查找中答案顺序的重要性

YoK*_*GFX 0 domain-name-system

DNS 答案的顺序有多重要?

例子:

如果您host -a google.com在终端中输入,您将看到:

;; ANSWER SECTION:
google.com.     300 IN  A   172.217.21.14
google.com.     300 IN  AAAA    2a00:1450:4016:80b::200e
google.com.     3600    IN  TXT "v=spf1 include:_spf.google.com ~all"
google.com.     345600  IN  NS  ns4.google.com.
google.com.     600 IN  MX  30 alt2.aspmx.l.google.com.
google.com.     600 IN  MX  40 alt3.aspmx.l.google.com.
google.com.     345600  IN  NS  ns2.google.com.
google.com.     60  IN  SOA ns1.google.com. dns-admin.google.com. 192227941 900 900 1800 60
google.com.     300 IN  TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com.     600 IN  MX  20 alt1.aspmx.l.google.com.
google.com.     600 IN  MX  50 alt4.aspmx.l.google.com.
google.com.     345600  IN  NS  ns3.google.com.
google.com.     86400   IN  CAA 0 issue "pki.goog"
google.com.     600 IN  MX  10 aspmx.l.google.com.
google.com.     345600  IN  NS  ns1.google.com.
Run Code Online (Sandbox Code Playgroud)

我的问题
这个回复的顺序有多重要?因为我看到很多网站都发送MX然后TXT然后SOA然后NS毕竟A。是否有速度差异,或其他什么?

HBr*_*ijn 5

host -a您查询ANY记录。这是 DNS 中特殊的“魔法”类型之一。ANY 不是对单个类型(如 A 、 AAAA 或 MX )的查询,而是检索给定名称的所有可用类型。

ANY 请求主要是人类操作员的诊断工具。通常,应用程序只会对单个特定类型进行查询。

ANY返回响应的顺序没有相关性。


当您查询特定的记录类型时,即使用host -t MX google.comordig -t A serverfault.com并且您得到多个响应时,确实可能会按照它们返回的顺序产生相关影响

当特定查询将导致多个响应时,名称服务器和解析器通常会执行循环 DNS。在一个请求和下一个请求之间,它们发送这些响应的顺序会有所不同。由于大多数客户端将连接到他们收到的第一个响应,因此这种变化将导致一些负载平衡。

A, AAAA, NS(可能还有其他) - 允许多个响应,并且可能会发生循环 DNS。
例如,看看当您对 serverfault.com ip-address 执行多次查找时会发生什么:

$ host -t A serverfault.com
serverfault.com has address 151.101.193.69      <=== 1
serverfault.com has address 151.101.1.69        <=== 2
serverfault.com has address 151.101.65.69       <=== 3
serverfault.com has address 151.101.129.69      <=== 4

$ host -t A serverfault.com
serverfault.com has address 151.101.1.69        <=== 2
serverfault.com has address 151.101.65.69       <=== 3
serverfault.com has address 151.101.129.69      <=== 4
serverfault.com has address 151.101.193.69      <=== 1

$ host -t A serverfault.com
serverfault.com has address 151.101.65.69       <=== 3
serverfault.com has address 151.101.129.69      <=== 4
serverfault.com has address 151.101.193.69      <=== 1
serverfault.com has address 151.101.1.69        <=== 2
Run Code Online (Sandbox Code Playgroud)

MX- 允许多个响应。解析器返回它们的顺序通常对客户端无关紧要,因为MX记录具有定义可用 MX 记录的相对排名的优先级字段,但具有相同优先级的多个 MX 记录应导致类似的循环效应到例如多个 A 记录:

                              _ MX preference aka priority 
                             /
google.com.     600 IN  MX  30 alt2.aspmx.l.google.com.
google.com.     600 IN  MX  40 alt3.aspmx.l.google.com. 
google.com.     600 IN  MX  20 alt1.aspmx.l.google.com.
google.com.     600 IN  MX  50 alt4.aspmx.l.google.com.
google.com.     600 IN  MX  10 aspmx.l.google.com.
Run Code Online (Sandbox Code Playgroud)

SOA - 只允许一个响应,订购不是问题

CNAME- 只允许一个响应(请参阅此问答),订购不是问题

  • 由于大多数客户端首先使用第一个条目,因此相同类型的 RR 具有相关性,因此 DNS-RR(权重和偏好)可以由 DNS 服务器控制。这通常被全局负载均衡器用来影响客户端。 (2认同)
  • Nitpick:`ANY` 不会为给定的 **label** 检索所有可用的 **records**,它返回解析器缓存的内容,这些内容可能是也可能不是所有存在的记录。因此,`ANY` 很少会做每个人认为它会做的事情,它不应该在实践中使用,并且由于这些确切原因,将来可能会被弃用。 (2认同)