受欢迎的博客标签

客户端同时有ipv4和ipv6,浏览器是如何选择用哪种ip进行通信

Published

早期的时候,浏览器解析域名后,如果对方域名有aaaa记录(即ipv6地址),优先选择使用ipv6协议连接,如果连接不上一直到超时,会换用ipv4协议连接。这样带来一个问题,如果ipv6不通会导致延迟很长时间,一般要几十秒钟。

后来浏览器一般同时使用ipv6和ipv4试图建立tcp连接,哪个先建立连接就用哪一个,这样就快很多。

即便这样,如果碰到tcp可以建立连接,但因为mtu问题并不能传输大包,仍旧会出现访问某些网站很卡的情况。

 

 

Dual-Stack Hosts

当服务器同时具有ipv4和ipv6地址时, 为了避免较差的ipv6路由影响用户的体验, 客户端应当同时使用ipv4地址和ipv6地址建立TCP连接, 并使用最先握手成功的那个连接开始通信.

这个算法被定义为IETF RFC 6555, Happy Eyeballs: Success with Dual-Stack Hosts

 

fast fallback

以chromium为例,默认用IPv6

它有个fast fallback,如果IPv6连接一定时间(0.3秒)内未完成,则启动IPv4连接

Firefox与之类似,fast fallback默认开启

关闭后fallback到IPv4的时间取决于network.http.fallback-connection-timeout的设置,默认5秒

 

wget

以wget举例,如果本地和远端都有ipv6,就会优先使用ipv6进行连接。超时之后再换v4

 

如何实现IPv4和IPv6共存?


实现IPv4和IPv6共存的策略和过渡技术有三种。

第一种,使用双栈让您的主机或网络设备可以同时支持IPv4和IPv6双协议栈;

第二种,通过隧道技术将IPv6数据包封装在IPv4数据包中;

第三种,通过网络地址转换(NAT)技术将IPv6数据包转换为IPv4数据包,反之亦然。

通过双栈实现IPv4和IPv6共存


双栈是实现IPv4和IPv6共存最基础、最直接的策略。使用该解决方案,可为ISP网络中的每个联网设备(包含使用IPv4和IPv6交换机)配置可同时运行IPv4和IPv6的功能。通常,双协议栈主机在和IPv4主机通信时会使用IPv4协议栈,而与IPv6主机通信时则会使用IPv6协议栈,其中双协议栈主机是通过使用域名系统(DNS)来查询目的主机采用的是哪一种协议栈。但通常在双协议栈主机或设备上,上层应用会优先选择IPv6协议栈,而不是IPv4协议栈。由于双栈可允许主机或网络设备同时访问现有的IPv4和IPv6,因此它是一种非常灵活的共存策略。但请记住,只有当接口同时需要IPv4和IPv6时,才能对所有主机或网络设备进行双栈。