关于iOS审核IPv6总结

早上一觉醒来,打开qq就看到邮箱收到一条来自苹果的邮件,赶紧打开看下,心情顿时不好了,睡意全无。赶紧打开电脑看下什么原因,哎呀我的妈呀,IPv6。。。。。。

关于iOS审核IPv6总结_第1张图片
Paste_Image.png

既然出现这样的问题,当然需要一个个排除了。

IPv6-Only支持

IPV6,是对IPV4地址空间的扩充。目前当我们用iOS设备连接上Wifi、4G、3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络,并且仍然可以通过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先通过DNS64 Server查询IPv6的地址,如果查询不到,再向DNS Server查询IPv4地址,通过DNS64 Server合成一个IPV6的地址,最终将一个IPV6的地址返回给客户端。如图所示:


关于iOS审核IPv6总结_第2张图片
Paste_Image.png

部分公司为了从IPv4过渡到IPv6,一般使用过渡工作流程,如图:


关于iOS审核IPv6总结_第3张图片
Paste_Image.png

分析开来,从两个方面入手。本地代码和服务器,首先检验下本地是不是可以在IPv6地址下运行。

首先获得一个IPv6类型的IP:

使用手机连接Mac共享出来的IPv6的Wi-Fi:


关于iOS审核IPv6总结_第4张图片
屏幕快照 2017-04-07 下午4.46.11.png

手机连上这个Wi-Fi后,查看地址是不是下图所示的。详细请参考:http://www.jianshu.com/p/69ed4489762c

关于iOS审核IPv6总结_第5张图片
39F0D470-7155-439F-AAAA-622E84CC775B.png

如果可以正常运行,那就恭喜你,你写的代码支持IPv6。说明一点,如果你的应用中使用了socket,也要使用对应的适配方法(适配IPv6遇到的坑,终极解决方案)。

inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()

如果用到了下面左边的这些IPv4的类型,那么它们相应的IPv6类型也需要做处理


关于iOS审核IPv6总结_第6张图片
Paste_Image.png

这只是说明应用使用IPv6正常,并不能说明服务器对IPv6的请求做出正确的响应。那么我们就需要验证下在苹果IPv6的地址下的请求,苹果没有要求服务器支持IPv6,但服务器必须能够正确响应来自IPv6的的请求。

使用下面的命令来验证:
$ dig +nocmd +nostats example.com AAAA 

如果status返回的是NOERROR,那就基本上没有问题了,但一定要在多个网络环境下测试通过。如果返回其他的,那就说明服务器那边有问题了,就得找后台、运维了。


关于iOS审核IPv6总结_第7张图片
141F17AD-4DFB-4ED2-8684-516EB38A8A15.png
还有一点非常重要,应用不能用不一定就是这个问题,有可能是苹果那边网速慢,导致一直不能响应。一定要在弱网的情况下测试(iOS模拟弱网测试)。
update by 20170510

如果应用请求过慢/过多导致很长时间没有相应,那么很有可能会被误认为是没有适配IPv6

你可能感兴趣的:(关于iOS审核IPv6总结)