有什么可以阻止这种情况发生吗?这是一种可能的情况吗?
ns1.edgecastdns.net. 172,800 IN (互联网) A (IPV4 主机地址) 192.16.16.5
ns1.edgecastdns.net。172,800 IN(互联网)AAAA(IPV6 主机地址)2606:2800:3::5
这两条记录有相同的名称,所以我认为它可能提供了错误的记录。
答案1
DNS 服务器总是有可能出现错误,但这种情况似乎不太可能发生。如果您查询特定类型的记录,则应该获得该类型。
但是,DNS 服务器通常会回答未提出的问题,以进行优化。在这种情况下,它确实提供了 AAAA 记录作为“附加答案”。这完全没问题。
QUESTIONS:
ns1.edgecastdns.net, type = A, class = IN
ANSWERS:
-> ns1.edgecastdns.net
internet address = 192.16.16.5
ttl = 3582
...
ADDITIONAL RECORDS:
...
-> ns1.edgecastdns.net
has AAAA address 2606:2800:3::5
ttl = 63143
答案2
一句话:不
当您请求“A”记录 (IPv4) 时,您将得到“A”答案或什么都没有。同样,当您请求“AAAA”记录 (IPv6) 时,您将得到“AAAA”答案或什么都没有。
(IPv4 和 IPv6不同的协议。仅仅因为它们共享字母 EYE 和 PEE,并不意味着它们完全兼容。)
要求“A”
~/[05:35 PM]:host -d -v -t a www.yahoo.com
Trying "www.yahoo.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50970
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;www.yahoo.com. IN A
;; ANSWER SECTION:
www.yahoo.com. 240 IN CNAME fd-fp3.wg1.b.yahoo.com.
fd-fp3.wg1.b.yahoo.com. 30 IN A 98.138.252.30
fd-fp3.wg1.b.yahoo.com. 30 IN A 98.138.253.109
;; AUTHORITY SECTION:
wg1.b.yahoo.com. 55959 IN NS yf4.a1.b.yahoo.net.
wg1.b.yahoo.com. 55959 IN NS yf3.a1.b.yahoo.net.
wg1.b.yahoo.com. 55959 IN NS yf2.yahoo.com.
wg1.b.yahoo.com. 55959 IN NS yf1.yahoo.com.
;; ADDITIONAL SECTION:
yf1.yahoo.com. 56036 IN A 68.142.254.15
yf2.yahoo.com. 56036 IN A 68.180.130.15
yf3.a1.b.yahoo.net. 55420 IN A 68.180.130.15
yf4.a1.b.yahoo.net. 55420 IN A 68.180.130.15
您得到一个“A”。(好吧,CNAME 和它的“A”)
请求“AAAA”
~/[05:35 PM]:host -d -v -t aaaa www.yahoo.com
Trying "www.yahoo.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7501
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.yahoo.com. IN AAAA
;; ANSWER SECTION:
www.yahoo.com. 205 IN CNAME fd-fp3.wg1.b.yahoo.com.
fd-fp3.wg1.b.yahoo.com. 49 IN AAAA 2001:4998:44:204::a7
您获得了“AAAA”。
询问“任何”
~/[05:35 PM]:host -d -v -t any fd-fp3.wg1.b.yahoo.com
Trying "fd-fp3.wg1.b.yahoo.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17586
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;fd-fp3.wg1.b.yahoo.com. IN ANY
;; ANSWER SECTION:
fd-fp3.wg1.b.yahoo.com. 52 IN A 98.138.253.109
fd-fp3.wg1.b.yahoo.com. 52 IN A 98.138.252.30
fd-fp3.wg1.b.yahoo.com. 52 IN AAAA 2001:4998:44:204::a7
(如果我请求 www,我只会得到唯一的 CNAME。)
如果你想看到一个“引导性答案”……
[root:pts/3{2}]debian1:~/[06:00 PM]:host -d -v -t any gmail.com 8.8.8.8
Trying "gmail.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55161
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;gmail.com. IN ANY
;; ANSWER SECTION:
gmail.com. 299 IN A 64.233.185.19
gmail.com. 299 IN A 64.233.185.18
gmail.com. 299 IN A 64.233.185.83
gmail.com. 299 IN A 64.233.185.17
gmail.com. 299 IN AAAA 2607:f8b0:4002:c09::12
gmail.com. 3599 IN MX 30 alt3.gmail-smtp-in.l.google.com.
gmail.com. 21599 IN NS ns4.google.com.
gmail.com. 21599 IN SOA ns1.google.com. dns-admin.google.com. 2015031901 21600 3600 1209600 300
gmail.com. 3599 IN MX 10 alt1.gmail-smtp-in.l.google.com.
gmail.com. 3599 IN MX 20 alt2.gmail-smtp-in.l.google.com.
gmail.com. 21599 IN NS ns3.google.com.
gmail.com. 3599 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 21599 IN NS ns2.google.com.
gmail.com. 3599 IN MX 40 alt4.gmail-smtp-in.l.google.com.
gmail.com. 299 IN TXT "v=spf1 redirect=_spf.google.com"
gmail.com. 21599 IN NS ns1.google.com.
答案3
只是对其他答案做了一点补充。
其他答案对于您在数据包的答案部分中得到的内容是正确的。如果您的客户端A
在查询中要求记录,则答案部分将仅返回一条A
记录或一条记录,该记录或CNAME
记录可能指向也可能不指向包含A
值的不同记录。这意味着另一个永远不可能偶然使用。
有目的地完全是另一回事。让我们来看看RFC4213:
IPv6/IPv4 节点上的 DNS 解析器库必须能够处理 AAAA 和 A 记录。但是,当查询找到包含 IPv6 地址的 AAAA 记录和包含 IPv4 地址的 A 记录时,解析器库可以对返回给应用程序的结果进行排序,以影响用于与该特定节点通信的 IP 数据包版本 - 优先使用 IPv6 还是优先使用 IPv4。
应用程序应该能够指定是否需要 IPv4、IPv6 或两者的记录RFC3493。这定义了解析器查找哪些地址系列。如果没有应用程序选择,或者应用程序请求了两者,则解析器库不得过滤掉任何记录。
由于大多数应用程序按照解析器返回的顺序尝试地址,这可能会影响应用程序的 IP 版本“偏好”。实际的排序机制超出了本备忘录的范围。
地址选择在 RFC3484。
具体来说:
- 应用程序可以明确请求解析器库进行基于 IPv4 或 IPv6 的 DNS 查找。但许多应用程序不这样做。
- 如果系统是双栈系统(IPv4 和 IPv6),则默认不做任何假设并提供所有可能的答案。这意味着对请求名称的正则表达式
A
和变体进行显式查找。AAAA
- IPv4+IPv6 组合结果的排序是一个复杂的话题(参见链接的 RFC3484)。
除非您的设备启用了 IPv6,否则不会使用 IPv6 地址。如果您同时使用两者,则操作系统将对如何对返回的答案进行有根据的猜测(假设应用程序将尝试使用返回的第一个值),然后应用程序将按照返回的顺序对答案进行任何处理。
复杂吗?是的。简而言之,你的操作系统+应用程序可能更喜欢AAAA
现有的记录,但如果发生这种情况,这将不是一个“意外”,并且远程服务器(假设符合标准)将绝不AAAA
当A
请求记录时返回响应。