我正在学习DNS,我试图了解非递归解析器/服务器如何响应空响应。
我对DNS的理解基本上是:
如果服务器返回非权威响应,它通常会提供一个名称服务器列表(NSCOUNT),您可以查询这些名称服务器以查找权威响应。
但是,如果DNS服务器什么都不返回会发生什么?如同 - 只有ANCOUNT = 0
,NSCOUNT = 0
和ARCOUNT = 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 |
+---------------------------------------------------------------------------+
基本上,除了原始查询之外,它没有向我返回任何内容,它告诉我递归是可用的。
在这种情况下,查询应该如何进行(假设我们不要使用请求服务器使用递归)。这是唯一可以联系其中一个顶级服务器的办法吗?或者,换个问题,谷歌的DNS服务器怎么没有给我一个名单服务器列表(为什么NSCOUNT
0?),我可以咨询一下?
答案 0 :(得分:2)
当你说" No Recurse"时,谷歌的NS没有递归。由于他们不是google.com的权威名称服务商,因此他们没有提供任何回复。这是正常的,可接受的行为。
您只能请求"递归"位设置,找出google.com的A记录。其他方式是:
基本上,你做的是递归名称服务器应该为你做的事情。 注意:递归NS可以使用其缓存来获取没有实际查询的响应,基于记录的TTL(当然,如果您设置递归位( - :
)答案 1 :(得分:1)
只有权威服务器才能在响应的权限部分中包含NS记录。
对于google.com
,Google 8.8.8.8服务器不具有权威性,并且您要求他们不要递归,因此他们没有。
这是一个真正的DNS客户端不会发送给他们的异常查询,因此他们对“NO DATA / NO ERROR”(RCODE == 0, ANCOUNT == 0
)的响应是可以接受的。