当我将 AAAA 挖掘到尚不支持 IPv6 的网站时,回复中有一个 SOA 记录。
当服务不支持 IPv6 时,是否需要有 SOA 记录来响应 AAAA 查询?
dig quora.com AAAA
; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> quora.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8704
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;quora.com. IN AAAA
;; AUTHORITY SECTION:
quora.com. 976 IN SOA ns1.p28.dynect.net. zone-admin.dyndns.com. 2016031101 3600 600 604800 3600
;; Query time: 35 msec
;; SERVER: 10.0.2.3#53(10.0.2.3)
;; WHEN: Mon Mar 21 08:27:49 UTC 2016
;; MSG SIZE rcvd: 110
答案1
发生这种情况的原因是负面响应缓存。例如,如果您对以下对象执行 AAAA 查询www.example.com并且该记录不存在,那么该记录不存在的事实将被添加到中间服务器的缓存中。
为了让这些中间服务器知道要缓存该响应多长时间,它们需要 SOA 记录;因为 TTL 就是在这里定义的。这个过程完全与协议无关,IPv4 和 IPv6(以及IPv9)会得到与字段中包含的相同的响应additional
。
根据评论进行编辑
(看来我之前的编辑不太正确!- 所以这是真正的)
结果,SOA 记录被插入到授权部分。
根据 RFC 2308DNS 查询的负面缓存第 3 部分
当报告 NXDOMAIN 或指示不存在所请求类型的数据时,对某个区域具有权威性的名称服务器必须在响应的权威部分中包含该区域的 SOA 记录。这是必需的,以便可以缓存响应。
为那些读过此处评论后感到好奇的人编辑!
看来原始的 DNS RFC 1034领域概念和设施在描述 SOA 的两个位置时遇到了问题,授权部分(第 3.7 节)和附加部分(我最初引用的,在第 4.3.4 节)RFC 2181 第 7.1 节DNS 规范说明澄清了这一点。RFC 2308后来完全取代了第 4.3.4 节。
抽象的
[RFC1034] 提供了有关如何缓存否定响应的描述。但是,它有一个根本缺陷,即它不允许名称服务器将这些缓存的响应分发给其他解析器,从而大大降低了缓存的效果。本文档根据经验解决了提出的问题,并取代了 [RFC1034 第 4.3.4 节]。