| 
                         优先解析 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 
                        (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |