IPV6

1,291 阅读2分钟

对于安卓来说,APN协议设置是支持编辑的,并且安卓5.0以后默认缺省设置为双栈模式。其他场景下,可以在移动网络访问网络时,通过修改接入点(APN)中“APN协议/APN漫游协议”属性设置为“IPV4/IPV6”双栈网络使设备支持双栈。

IPV6改造主要包括:

  • 检测移动设备是否支持IPV4/IPV6双协议栈
  • DNS服务能正确返回IPV4/IPV6地址
  • 建立v6链接,与服务器通信

由于Linux内核的TCP/IP协议栈在2.2版本已经支持IPV6,Android是基于2.6以后的,所以默认能够使用IPV6地址与后台交互。

IPV6地址获取流程: 当客户端是双栈环境时,客户端在向DNS服务器请求地址解析时,会发起域名A记录和AAAA记录的解析请求,如果后台支持双栈,就拿到对应的两条解析地址结果。

A记录:一个域名指向IPV4地址的解析结果。

AAAA记录:一个域名指向IPV6地址的解析结果,如果想要一个域名解析到IPV6地址,则需要设置此种类型的解析结果。

DNS服务器:进行域名和与之相对应的IP地址转换的服务器。将域名解析为ip

HappyEyeball算法:

HappyEeyball分两版,Cisco与2012年提出的RFC6555版和Apple与2017年提出的RFC8035版。

RFC8035 v2版本介绍:

  1. 从DNS服务器同时获取AAAA和A记录解析地址
  2. 如果v6地址先返回就直接开始握手建链,如果v4地址先返回,则有25ms解析时延,在收到v6地址后会做地址选择
  3. 如果是有v4和v6地址列表,会通过算法对地址排序,排序依据历史RTT数据
  4. 排序完成后,会依次有序的取地址发送握手建链请求,并启动定时任务,该任务在250ms后检查若未完成连接建立,则触发第二个地址开始连接尝试
  5. 只有一个握手确认成功(建立了连接),就会取消所有其他的连接尝试

转自:zhuanlan.zhihu.com/p/109483871