在我正在进行的理解DNS的实验中,我试图了解名称服务器如何执行递归查询。我得到了一个基本的想法 - 从顶级DNS服务器开始,然后向您发送要联系的权威域名服务器列表,然后联系这些服务器等,直到获得权威响应。手动执行递归DNS查询
听起来很简单。
但是,当我在实践中尝试它时,我在第一步后卡住了。我只是使用命令行工具手动执行此操作 - (我确保将关闭递归。)
好吧,所以第1步:从根名称服务器开始。我随机从root name servers on Wikipedia列表中挑选198.41.0.4
(Verisign)。
我向它发送解析“google.com”的请求。
它发送我回了以下内容:
+---------------------------------------------------------------------------+
| 47547 | QR: 1 | OP: 00 | AA: 0 | TC: 0 | RD: 1 | RA: 0 | Z: 0 | RCODE: 00 |
+---------------------------------------------------------------------------+
| QDCOUNT: 1, ANCOUNT: 0, NSCOUNT: 13, ARCOUNT: 15 |
+---------------------------------------------------------------------------+
ANSWERS : 0
AUTHORITIES:
NS: m.gtld-servers.net
NS: l.gtld-servers.net
NS: k.gtld-servers.net
NS: j.gtld-servers.net
NS: i.gtld-servers.net
NS: h.gtld-servers.net
NS: g.gtld-servers.net
NS: f.gtld-servers.net
NS: e.gtld-servers.net
NS: d.gtld-servers.net
NS: c.gtld-servers.net
NS: b.gtld-servers.net
NS: a.gtld-servers.net
ADDITIONAL:
A: 192.55.83.30
A: 192.41.162.30
A: 192.52.178.30
A: 192.48.79.30
A: 192.43.172.30
A: 192.54.112.30
A: 192.42.93.30
A: 192.35.51.30
A: 192.12.94.30
A: 192.31.80.30
A: 192.26.92.30
A: 192.33.14.30
AAAA: 2001:0503:231d:0000:0000:0000:0002:0030
A: 192.5.6.30
AAAA: 2001:0503:a83e:0000:0000:0000:0002:0030
好了,所以我不知道所有这些额外的记录点是 - 他们都似乎是本地局域网地址,所以我不知道他们对我有什么用处。但无论如何,看看权威部分返回的结果,我看到另一个名称服务器列表。好的,所以我想下一步是我需要选择一个返回的名称服务器,并获取它的IP。因此,我发出要求解决a.gtld-servers.net
,并...
...它只是返回完全相同的名称服务器列表。
所以......我不知道如何在这里继续。我如何最终到达“google.com”的权威名称服务器?
编辑:
好了,所以才出现这些192
地址不是LAN地址,我错误地认为,但他们是其他域名服务器。我假设我可以联系这些名称服务器以接近权威。但是,我怎么知道使用这些名称服务器呢?我认为ARCOUNT部分只是为了获得更多信息......为什么所有这些名称服务器都放置在附加部分,而不是作为答案或权限?是否只是一些约定,其他名称服务器的引荐进入附加部分?
这个问题似乎是脱离主题,因为它是一个一般的DNS问题,而不是一个编程问题。 – nos 2014-10-20 20:42:30