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

2024/12/02 游戏IPV6环境 共 2653 字,约 8 分钟

基于苹果笔记本电脑,搭建用于IOS提审兼容ipv6测试环境

一、背景说明

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

1、自2016年6月1号起,所有提交到AppStore上的应用都必须支持IPv6,否则将通不过审核。 2、一般我们游戏上线(上架IOS)前会提交到IOS商店,苹果会进行审核,其中就有一项要兼容ipv6网络; 001

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

其他的模块主参考官方文档。这里不再多说。

二、为什么要兼容ipv6

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

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

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

三、我们需要注意什么

1、避免使用socket API

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

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

002

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

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

2、代码中是否使用了IP4地址

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

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

003

3、检查代码是否包含只适用于IPv4的API

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

inet_addr() inet_aton() inet_lnaof() inet_makeaddr() inet_netof() inet_network() inet_ntoa() inet_ntoa_r() bindresvport() getipv4sourcefilter() setipv4sourcefilter() 正常情况下,游戏项目这么多年了,应该不太可能会出现纯ipv4 API;即使有出现可以按以下的对应转换

004

四、本地搭建NAT64(ipv6)兼容性网络

1、NAT64网络架构

005

2、MAC上搭建NAT64环境

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

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

006

3、需要准备的设备

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

007

008

4、开启NAT64网络

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

009

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

010

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

011

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

5、在MAC上创建WiFi热点

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

012

点 “启动” wi-fi热点

013

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

014

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

015

6、补充说明

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

016

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

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

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

017

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

五、测试

1、连接ipv6热点

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

018

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

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

019

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

2、待测与抓包

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

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

020

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

021

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

参考文档

文档信息

Search

    Table of Contents