当在某域名原有的 A 记录类型的基础上新增 AAAA 记录后,原有的程序工作正常
2.客户端 IPv6/v4 双栈环境下,测试程序的行为
假定用户的环境是双栈环境,假定一个服务通过域名对外提供服务,测试这种情况下程序的行为。
域名解析

HTTP 请求

客户端

结论
-
当域名同时存在 A 与 AAAA 记录,并且网络类型为双栈网络时,绝大多数程序工作正常。仅有一种情况例外,即程序中使用了 gethostbyname 函数,同时 resolv.conf 中配置了 options inet6 时,此时程序会返回错误的解析结果
-
RFC 以及绝大多数实现方式,均回优先使用 IPv6 地址建立连接
-
双栈环境下,客户端使用 IPv4 与 IPv6 缓存 DNS 服务器获取的解析结果是一致的
3. 客户端纯 IPv6 环境下,测试能否正常工作
假定用户只有 IPv6 地址,DNS 也是使用 IPv6 地址 (DNS 必须有双栈环境,因为现在很多权威服务器没有 IPv6 地址,纯 IPv6 环境下无法正常工作),假定一个服务通过域名(同时拥有 A、AAAA 记录)对外提供服务,测试服务是否可以正常访问。
域名解析

HTTP 请求

客户端

结论
当某域名即存在 A 记录 又存在 AAAA 记录时:
-
如果程序中使用了 gethostbyname 时,程序可能会拿到错误的解析结果,取决于 resolv.conf 的配置(当配置了 option inet6 时,会获取到错误的解析结果)
-
Windows 在这种情况下,部分应用工作不正常。在指定使用 IPv6 socket 的情况下,程序工作正常。
-
根据安卓官方的描述,Android 6.0 之后的版本已经支持 IPv6,但是根据对国内大多数厂商的安卓手机的调研,目前国内安卓手机很少可以原生支持 IPv6
4. DNS 解析测试
这里测试了缓存服务器和权威服务器在各种网络环境下,优先使用的解析链路。

结论
当权威服务器和缓存服务器均支持 ipv6 时,缓存服务器优先使用 ipv6 链路进行解析,其他情况均使用 ipv4 链路进行解析。
结论
|