IOS提审ipv6网络兼容测试环境搭建

1.背景说明

  在WWDC2015大会上苹果宣布iOS9将支持纯IPv6的网络服务。2016年6月1号,所有提交到AppStore上的应用都必须支持IPv6,否则将通不过审核。为了确保我们的app正常提交到苹果进行审核,不耽误项目进度,我们必须在提交到AppStore前对待提交app做IPv6兼容测试

1、自2016年6月1号起,所有提交到AppStore上的应用都必须支持IPv6,否则将通不过审核。

2、一般我们游戏上线(上架IOS)前会提交到IOS商店,苹果会进行审核,其中就有一项要兼容ipv6网络;

3、关于什么是ipv6网络,这是不解释了,可以自行百度;当下是ipv4和ipv6网络共存;未来就是ipv6的天下;

 

2.为什么要兼容ipv6

  根本的原因莫过于苹果审核的压力,不得不将app适配IPv6,不兼容ipv6则不给上架苹果商店;

  从IPv4到IPv6,IP地址的数量从2的32次方扩展到2的128次方,这个是IPv6碾压IPv4的地方,足够地球上的每粒沙子分配一个或者多个IP地址。当然,除了IPv4本身的原因(地址枯竭)外,下面提到的几点,也说明了IPv6比IPv4更加高效,例如:

  • 避免了网络地址转换(NAT)的需要
  • 通过使用简化的头提供了更快的路由通过网络
  • 防止网络碎片
  • 避免广播邻居地址解析

 

3.我们需要注意什么

3.1 避免使用socket API

  保证项目代码中使用的是更高层次的网络API,避免使用socket API

  在苹果官网上,有这么一张图,说明了哪些框架支持IPv6,哪些不支持,如下图所示:

  

  图中蓝色部分默认支持IPv6,如果项目代码中使用的是WebKit或者AFNetWorking这些网络框架,那么需要改动的代码不会很多。

  目前看,现在开发的项目基本上都支持;否则ipv6兼容过不了!

 

3.2 代码中是否使用了IP4地址

  具体到项目上来说,就是服务器登录后会获取服务器列表,玩家登录服务器列表,目前是ip地址(ipv4,正常过审后都是ip);而为了要通过苹果ipv6兼容测试,需要将服务器列表ip解析提供一个对应的域名即可!

  补充: 为什么项目上线后服务器列表继续用ip也可以访问(ipv6环境)?这主要是目前是ipv4和ipv6网络共存,有三个过度(双棧、隧道、转换)方案,说直白点就是运营商会通过以上转换技术实现ipv6和ipv4网络进行互访;但是你在提审到苹果时,如果没有域名就没法进行转换(通过DNS64/NAT64技术)访问我们ipv4的服务器;原理如下:

   

 

3.3 检查代码是否包含只适用于IPv4API

  确保项目代码中没有以下API:

inet_addr()

inet_aton()

inet_lnaof()

inet_makeaddr()

inet_netof()

inet_network()

inet_ntoa()

inet_ntoa_r()

bindresvport()

getipv4sourcefilter()

setipv4sourcefilter()

  正常情况下,游戏项目这么多年了,应该不太可能会出现纯ipv4 API;即使有出现可以按以下的对应转换

 

4.本地搭建NAT64ipv6)兼容性网络

4.1 NAT64网络架构

  

 

4.2 MAC上搭建NAT64环境

  我们现在连的网络,无论是wifi还是移动、联通、电信的各种不同类型的网络,都是IPv4的,也就是实际生活中和我们打交道大多是IPv4环境。但我们需要测试IPv6在iOS APP中的兼容性,需要我们测试人员自己构建测试环境。

  值得欣慰的是,苹果公司在MAC OS X 10.11以后的系统中就埋下了开启IPv6环境的彩蛋。我们所要做的就是参照官方文档,在本地搭建这样的测试环境。即用MAC机建立一个热点,然后用iPhone连接该热点,回归待测模块。简单的示意图如下所示:  

  

 

4.3 需要准备的设备

  这里以我的办公电脑为例,MAC 12.6 为例,系统是OS X 12.6 的MAC机(该MAC机要使用非WIFI方式上网,且支持双网卡)一台,iPhone手机一台。原本只有一个wifi,这里单独找IT同学借了个usb转换的网卡,如下图所示:

  

  

 

4.4 开启NAT64网络

  打开“系统偏好设置”,按住option键的同时点击“共享”,如下图所示:

  

  之后,在共享页就能看到“创建NAT64网络”的可选框了,

  

  选择右下角 WI-FI选项 ,为要分享的wi-fi配置个ssid和接入密码

  

  这里ssid,网络名称:Dena-infra-ipv6

 

4.5 MAC上创建 WiFi热点

  接着我们创建热点了,如下图所示:

  

  点 “启动” wi-fi热点

  

  点 “启动” ,最终完成选项如下:

  

  此时会在右上图发现有一个wi-fi分享的图标,如图:

  

 

4.6 补充说明

  这里想说明一点,也是比较关键的一点:点击上图中的“启动”后,有些网络会出现如下图所示的共享失败情况:

  

  是的,我一开始也出现了这种情况;

  出现这种情况,说明我们当前使用的网络受到了802.1x协议的限制,无法共享,就会弹出上面的窗口。只能通过去802.1x保护或者换其他可以共享的网络进行共享。

  这里我们找IT同学换一个没有802.1x认证的网段就行了,如:

  

  这个就是接了网线的且没有802.1x认证的网段;到这里ipv6兼容测试环境就完成了!

 

5.测试

5.1 连接ipv6热点

  手机连接创建好的热点,连接成功后,可以查下iPhone手机的IP地址,我这是安卓手机连接,如下:

  

  成功获取到了fe80开头的链路本地址(只在本地ipv6环境通讯),和另外两个ipv6地址(私有)

  测试下mac到手机的ipv6和外网的ipv4网络:

  

  此时MAC的ipv4/ipv6网络环境搭建完成,但要测试苹果包,需要iphone手机了;

 

5.2 待测与抓包

  确保所有的网络请求在本地搭建好的IPv6网络环境下正常的,这里说的“正常”就是指和在IPv4网络环境下的表现一致。经测试,在IPv6网络环境下,QQ、微信、企业微信均正常;

  来看看苹果要求的ipv6兼容包 连接服务器的包长啥样(游戏连接端口 TCP:7612):

  

  刚好这个app包上也有一个ip地址服务器(没有域名解析) 也是可以登录,不过是通过ipv4连接登录的(source 是我mac的有线ip地址 172.21.175.197 目标是服务器ip,连接的是7612):

  

  以上说明,为了应付苹果ipv6兼容,服务器只要替换成域名访问即可,会通过DNS64/NAT64 转换技术,完成ipv6网络访问ipv4环境;

 

 

 

参考文档

感谢董老板总结

posted @ 2024-04-24 18:07  小家电维修  阅读(54)  评论(0编辑  收藏  举报