【问题标题】:Understanding DNS response header information了解 DNS 响应标头信息
【发布时间】:2014-12-15 07:18:51
【问题描述】:

我正在学习 DNS,我正在尝试了解非递归解析器/服务器如何响应空响应。

我对DNS的理解基本是这样的:

如果服务器返回一个非权威响应,它通常会提供一个名称服务器列表(NSCOUNT),您可以查阅该列表以找到权威响应。

但是,如果 DNS 服务器什么也没返回,会发生什么?如 - 只是带有ANCOUNT = 0NSCOUNT = 0ARCOUNT = 0 的响应标头?

例如,如果我查询 Google 的免费 DNS 服务器 (8.8.8.8),并要求它解析“google.com”,并且未设置递归位,我得到的响应是:

+---------------------------------------------------------------------------+
| 25550 | QR: 1 | OP: 00 | AA: 0 | TC: 0 | RD: 0 | RA: 1 | Z: 0 | RCODE: 00 |
+---------------------------------------------------------------------------+
| QDCOUNT:     1,   ANCOUNT:     0,   NSCOUNT:     0,   ARCOUNT:     0      |
+---------------------------------------------------------------------------+

所以基本上,除了我的原始查询之外,它什么也没给我返回,它告诉我递归是可用的。

在这种情况下,查询应该如何进行(假设我们不只是使用要求服务器使用递归)。这里是联系顶级服务器之一的唯一途径吗?或者,换一种说法,为什么 Google 的 DNS 服务器没有返回我可以咨询的域名服务器列表(为什么是 NSCOUNT 0?)?

【问题讨论】:

    标签: dns


    【解决方案1】:

    只有权威服务器应该在响应的权威部分包含 NS 记录。

    Google 8.8.8.8 服务器对于google.com具有权威性,您要求它们不要递归,所以它们没有。

    这是一个真正的 DNS 客户端不会发送给他们的异常查询,因此他们的“NO DATA / NO ERROR”(RCODE == 0, ANCOUNT == 0) 响应是可以接受的。

    【讨论】:

      【解决方案2】:

      当您说“No Recurse”时,Google 的 NS 没有递归。由于它们不是 google.com 的权威名称服务器,因此它们没有提供任何响应。这是正常且可接受的行为。

      您只能请求设置“递归”位,以找出 google.com 的 A 记录。另一种方法是:

      1. 从根服务器查找 com. 的 NS。
      2. 从 com NS 之一查找 google.com 的 NS。
      3. 从 gooogle.com NS 中查找 google.com 的 A 记录。

      基本上,您执行递归名称服务器应该为您执行的操作。 注意:递归 NS 可以使用它的缓存在没有实际查询的情况下为您获取响应,基于记录的 TTL(当然,如果您设置了递归位 (-:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多