优先解析 A 地址记录
参考资料
-
Windows 8 IPv4 与 IPv6 选择的方法:Connecting with IPv6 in Windows8
(https://blogs.msdn.microsoft.com/b8/2012/06/05/connecting-with-ipv6-in-windows-8/)
-
Windows 当 IPv6 不可用后的回退机制:Is there any setting for connection timeout when IPv6 fallback to IPv4?
(https://social.technet.microsoft.com/Forums/en-US/d09e938a-a594-4766-8898-3926a81fc5dc/is-there-any-setting-for-connection-timeout-when-ipv6-fallback-to-ipv4?forum=w7itpronetworking)
-
目前广泛使用的 IPv4 与 IPv6 优先选择算法为 Happy Eyeballs
(https://en.wikipedia.org/wiki/Happy_Eyeballs):
-
目前使用此算法的项目有:Chrome, Opera 12.10, Firefox version 13, OS X, cURL
-
此算法会优先选择 IPv6 链路使用
-
此算法的原理可参考 RFC 6555(Happy Eyeballs: Success with Dual-Stack Hosts)
(https://tools.ietf.org/html/rfc6555)
-
此算法的简略工作流程如下:
-
当客户端是双栈环境时,客户端会向缓存 DNS 服务器发起域名 A 记录与 AAAA 记录的解析请求,并受到解析结果,对应下图中的 1-4
-
客户端获取到解析地址后,会同时使用 IPv4 与 IPv6 两种链路尝试建立连接,对应下图中的 6-7。当 IPv6 链路比 IPv4 链路先建立连接,或者 IPv4 已经建立连接,但是在很短的时间间隔内,IPv6 也成功建立连接后,则这两种情况下客户端应该使用 IPv6 链路完成后续的网络请求,对应图中的 8-12

测试方法
解析域名
C/ C ++
Linux
- #include <stdio.h>
- #include <netdb.h>
- #include <arpa/inet.h>
-
- int main(void)
- {
- int i = 0;
- char str[32] = {0};
- struct hostent* phost = NULL;
-
- phost = gethostbyname("IPv6test.ntes53.netease.com");
- printf("%s", inet_ntoa(*((struct in_addr*)phost->h_addr)));
-
- return 0;
- }
Windows
(编辑:好传媒网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|