我不确定当它的缓存包含部分答案时递归解析的行为如何。具体来说,假设我首先运行了这个查找请求:
dig example.com @8.8.8.8
根据我的理解,在解析过程之后,以下记录将缓存在这个公共解析器(8.8.8.8)
example.com. 17834 IN NS a.iana-servers.net.
example.com. 17834 IN NS b.iana-servers.net.
example.com. 18662 IN A 93.184.216.34
其次,假设我运行了另一个查找请求如下(在上述记录的 TTL 到期之前):
dig sub.example.com @8.8.8.8
现在,由于解析顶点域所需的 NS 记录已经在缓存中,递归解析器是否使用此缓存信息直接查询这些 NS 记录之一以获取 (sub.example.com) 的 A 记录?如果是,它如何知道如何分解请求?
我知道解析器如何从层次结构的顶部开始,即如果它在缓存中没有答案,则为根 (.)。但是,我发现令人困惑的是,如果缓存有部分答案(在本例中是顶点域的 NS 记录),解析器如何使用这些缓存的答案?
- 它会分解查询(sub.example.com)并识别顶点域(example.com),然后在缓存中找到(example.com)的NS记录的命中吗?
- 或者,它会从根目录开始递归解析 (sub.example.com) 并完全忽略 (example.com) 的任何先前缓存吗?