由于移动互联网服务商拥有的 IPv4 地址即将耗尽,他们只能给出 IPv6地址或者电信级 NATted 的 IPv4 地址,Apple 在今年五月四日宣布,从六月1日起,所有提交至 AppStore 的应用必须支持 IPv6 协议。同时,在 Google IPv6 使用统计 中可以看出,当前 IPv6 的采用率已经接近 13%。所以,使你的 App 支持 IPv6变得越来越重要,尤其是移动 App。IPv6 已经开始出现在 EMail Headers、SIP、DNS 等地方,你的 App 需要能够解析这些在 URL、头部字段和数据中的 IPv6 地址。至少得保证 App 第一次遇到这些 128 位或者更长的字符串时不会崩溃。
App支持 IPv6 并不意味着它仅仅支持 IPv6。相当大一部分网络依然使用 IPv4 并且将持续很长一段时间,你得确保你的 App 依然支持 IPv4。同时,一些互联网服务商早已耗尽 IPv4 地址,从而选择将电信级 NATted 的 IPv4 地址分配给客户。而有的干脆选择仅部署 IPv6。这部分客户连接到 IPv4 网络的唯一方法是通过 6to4 隧道进行数据传输,它的原理是使用 IPv6 作为 IPv4 的传输层。基于以上原因,当前最好的方式是支持双协议栈。
在 Web 服务应用中,常常会使用正则表达式来识别 IPv4,这些表达式遇到 IPv6 将会失效。事实上,由于 IPv6 地址有许多不同的格式,不推荐使用正则式来识别 IPv6。可以尝试使用一些开源库来做这部分工作。另外,应检查一下存放 IP 地址的数据库字段是否已经扩展到 128 位,确保你的应用部署到了支持双协议栈的操作系统中,确保你使用的库也支持 IPv6,否则可能出现不必要的错误。总而言之,之前所有涉及 IP 的地方都需要检查以确保其能够支持 IPv6。
移动 App 经常使用 RESTful URL 与 服务端 App 进行通信,而服务端 App 可能使用 URL 与 LDAP 服务数据库或其他 RESTful 服务通信。由于 IPv6 地址以 “:” 为分隔符,而 host和端口也是同样的分隔符,所以在 URLs 中使用 IPv6 需要使用方括号加以区分:https://[2111:500:4:13::128]:443/。
在 IPv4 网络中,DNS 记录可以将域名翻译成 IPv4 地址,这个地址称之为 A 记录。同样在 IPv6 网络中,返回的 IPv6 地址的长度是 IPv4 地址的四倍,称之为 AAAA 记录。在进行 DNS 查询时,一个单独的域名可以同时拥有一个 A 记录和一个 AAAA 记录,所以域名可以被翻译为一个 IPv4 地址和一个 IPv6 地址。如果你同时获得了一个 A 记录和一个 AAAA 记录,你需要同时使用两个地址进行访问,并选取访问速度更快的那个地址。另外,当一些网络服务使用 IPv6 时,IP 地理位置系统需要及时更新其数据库。
当一些客户端程序使用 IP socket 进行跨进程通信和一些服务端程序访问同一个主机中的其他服务时,就要使用到被称为环回地址的 IP 地址,通常是 localhost。在 IPv4 中,localhost 可以为 127.0.0.0 至 127.255.255.255 之间的任意地址。而在 IPv6中,有且仅有一个环回地址 ::1。所以最好使用 localhost 当做环回地址而不是特定的 IP 地址。
测试,当一切条件完备以后,还需要一些测试。如果你是公共网站,可以使用类似于 internet.nl 的开放工具进行 IPv6 访问测试。