摘要:
李伟波 刘承 肖世杰
睿哲科技股份有限公司
摘要:随着下一代互联网IPv6技术的普及与发展,各互联网移动端App应用提供商应为IPv6用户提供移动端App应用服务。该文章阐述了如何对移动端App客户端及AppServer端进行IPv6的升级,实现IPv4移动端App应用服务向IPv6的升级迁移。
关键词:IPv6;App客户端;AppServer;6aaS云平台;SPACE6;双栈、云主机;
一、引言
基于互联网协议第四版(IPv4)的全球互联网面临网络地址消耗殆尽、服务质量难以保证等制约性问题,IPv6能够提供充足的网络地址和广阔的创新空间,是全球公认的下一代互联网商业应用解决方案。下一代互联网IPv6具有技术成熟、地址资源丰富、安全可靠等特点,被业界及各国视为互联网演进的必由之路。
苹果公司在2015年苹果全球开发者大会宣布IOS9开始向IPv6-only网络服务过渡。自2016年6月1日起,开发者所有提交至AppStore的应用必须支持IPv6-only网络;并于2017年6月要求App业者要用IPv6才能上架。
我国政府对IPv6下一代互联网的发展非常重视,先后发布了一系列相关政策给予支持和引导。在2017年11月,我国发布的《推进互联网协议第六版(IPv6)规模部署行动计划》,明确提出用5-10年时间,形成下一代互联网自主技术体系和产业生态,建成全球最大规模的IPv6商业应用网络,实现下一代互联网在经济社会各领域深度融合应用,成为全球下一代互联网发展的重要主导力量。
值得关注的是,《行动计划》对移动互联网应用(APP)及其相关产业提出了具体目标和行动步骤。其提出的目标包括:到2018年末,基础电信企业完成移动互联网应用APP以及应用商店等系统服务器全面支持IPv6。主流移动应用商店完成升级改造,新上线和新版本的移动互联网App应用必须支持IPv6;在IPv4/IPv6双栈连接的情况下,App应用需优先采用IPv6连接访问。
综上所述,移动端App应用IPv6升级势不可挡。然而,现如今大部分App应用程序及AppServer仅支持IPv4协议;随着IPv6技术的普及与发展,移动端App应用服务IPv6升级改造迫在眉睫;如何实现移动端App应用全面支持IPv6的升级变得尤为重要。
二、IPv6应用迁移技术
1.双栈技术
双栈技术是指涉及到App业务交互的从用户侧到网络侧的所有软硬件设备同时支持IPv4和IPv6两个协议栈,即双栈节点使用IPv4协议栈与IPv4节点进行通讯,使用IPv6协议栈与IPv6节点进行通讯。双栈技术的优点是改造彻底,适用性广、用户互通性好,缺点是投资大、周期长。
2.隧道技术
隧道技术通过对报文的封装、解封装,使得两个同构网络能够在一个异构网络的两边桥接起来从而实现相互通信。隧道技术的优点是App应用只需要新增一个IPv6隧道服务器,应用系统本身基本不影响,方便快速部署,缺点是需用户安装相应IPv6隧道软件,普适性和方便性都有局限。
3.翻译技术
翻译类技术有NAT64、SPACE6等。翻译技术是在IPv6用户和IPv4移动端App应用之间部署协议转换设备,建立IPv6/IPv4之间地址和端口的映射关系,以实现透明的IPv6和IPv4互访。翻译技术具有改动小、部署快、投资小的优点。
4.三种技术比较
不同迁移技术有不同的应用场景。在实现快速迁移,不影响现有业务、不投入大量人力物力的前提下,尽量实现无缝互通。
双栈技术是改造最为彻底,具有实用性广、用户互通性好的优势,但投资大、周期长,比较适合简单的移动端App应用场景;
隧道技术的优点是对应用系统本身基本不影响、方便部署,缺点是需要安装相应IPv6隧道软件,在普适性与方便性都有局限,比较适合C/S模型环境;
翻译技术对原有网络及系统的改动最小、部署快、投资小,是目前IPv6升级演进的主流技术,适合于大型应用系统的快速部署。
三、移动端App的IPv6升级方法
移动端App应用IPv6升级的目的是原来仅支持用户通过IPv4协议访问并获取服务的应用平台经过技术升级或改造后,能够支持用户通过IPv6协议访问并获取服务。移动端App应用客户端程序尽量通过修改代码的方式实现对IPv4/IPv6双协议栈的支持。AppServer服务端IPv6的演进升级有两种方式:第一种是通过修改代码使App应用系统在代码层实现对IPv6的支持;第二种是在不改变现有应用服务架构的情况下,采用双栈云主机、DNS64+NAT64、SPACE6翻译等多种技术完成IPv6的升级改造,实现移动端App应用服务全面支持IPv6。
1、App客户端支持
1.1IOS客户端
尽量使用高级API
尽量使用以下框架实现网络请求:
WebKit.
CocoaURLloadingsystem.比如NSURLSession,NSURLRequest,和NSURLConnection。
CFNetwork.
避免使用IPv4地址
确保在代码中不会传递点分十进制表示的IPv4地址字符串(xxx.xxx.xxx.xxx)到底层网络API:比如确保不要传递点分十进制表示的IPv4地址字符串到getaddrinfo或SCNetworkReachabilityCreateWithName。需注意前面提到的高级API则会自动转换点分十进制表示的IPv4地址字符串到IPv6,所以在使用高级API时传递点分十进制表示的IPv4地址字符串时仍然可以正常工作。
使用地址无关的API:尽量传递主机名或全称域名(FQDN)给getaddrinfo或getnameinfo。
正确使用ReachabilityAPI
不要传递0.0.0.0到SCNetworkReachabilityCreateWithAddress。这只会检查网络中是否有router,并不代表真正能连接到互联网。
不要传递169.254.0.0(自分配的本地地址)到SCNetworkReachabilityCreateWithAddress来检查Wi-Fi是否激活;如需检查是否连接到Wi-Fi,请使用kSCNetworkReachabilityFlagsIsWWAN。
正确使用AddressContainers
使用足够大的结构用于存储IPv6地址来避免溢出,比如sockaddr_storage。
避免使用不兼容IPv6的API
检查是否使用过IPv4特定的API
保证app兼容IPv6-only网络
如果app需要连接到没有域名的IPv4-only服务器,请使用getaddrinfo处理IPv4地址,好处是当app处于IPv6-only网络时,getaddrinfo会生成一个对应的IPv6地址。
1.2Android客户端
Android选择APN双栈模式
Android从5.0以后默认支持双栈模式,因而采用移动网络访问网络时,修改接入点(APN)中“APN协议/APN漫游协议”属性设置为“IPv4/IPv6”双栈网络。
尽量是使用高级API
尽量使用以下框架实现网络请求:
URLConnection
避免使用IPv4地址
连接服务端的URL使用域名格式,且域名配置A和AAAA记录,支持IPv6客户端的访问;
确保在代码中不会传递点分十进制表示的IPv4地址字符串(xxx.xxx.xxx.xxx)到底层网络API。
IPv6相关JVM属性
在IPv4/IPv6双环境中,对于使用Java开发的网络应用,值得注意的是以下两个IPv6相关的Java虚拟机系统属性。
java.net.preferIPv4Stack=
java.net.preferIPv6Addresses=
preferIPv4Stack(默认false)表示如果存在IPv4和IPv6双栈,Java程序是否优先使用IPv4套接字;默认值是优先使用IPv6套接字,因为IPv6套接字可以与对应的IPv4或IPv6主机进行对话;相反如果优先使用IPv4,则只不能与IPv6主机进行通信。
preferIPv6Addresses(默认false)表示在查询本地或远端IP地址时,如果存在IPv4和IPv6双地址,Java程序是否优先返回IPv6地址。Java默认返回IPv4地址主要是为了向后兼容,以支持旧有的IPv4验证逻辑,以及旧有的仅支持IPv4地址的服务。
启动参数设置示例:
javaw-Djava.net.preferIPv4Stack=true-jarxxx.jar
代码设置代码如下:
System.setProperty("java.net.preferIPv6Addresses","true");
2、App服务端升级
选用双栈云主机实现IPv6升级
移动互联网应用AppServer服务端软件平台,通过修改代码支持IPv6后,在互联网服务提供商ISP处申请支持IPv4/IPv6双协议栈的云主机,实现硬件层面、软件层面对IPv6的完全支持。业务访问逻辑图如下:
图1:双栈云主机业务访问流程图
1)向互联网服务供应商ISP申请支持IPv4/IPv6双栈云主机;
2)将支持IPv6的AppServer应用服务软件部署在双栈云主机上;
3)实现AppServer在硬件、软件层面完全支持IPv6。
运用DNS64+NAT64实现IPv6升级
NAT64是一种有状态的网络地址与协议转换技术,一般只支持通过IPv6网络侧用户发起连接访问IPv4侧网络资源。但NAT64也支持通过手工配置静态映射关系,实现IPv4网络主动发起连接访问IPv6网络。NAT64可实现TCP、UDP、ICMP协议下的IPv6与IPv4网络地址和协议转换。
DNS64则是配合NAT64工作,主要是将DNS查询信息中的A记录(IPv4地址)合成到AAAA记录(IPv6地址)中,返回合成的AAAA记录用户给IPv6用户。DNS64也解决了NAT-PT中的DNS-ALG存在的缺陷。NAT64一般与DNS64协同工作,而不需要在IPv6客户端或IPv4服务器端做任何修改。NAT64解决了NAT-PT中的大部分缺陷,同时配合DNS64的协同工作,无需像NAT-PT中的DNS-ALG等。但是不能解决网站中由于外链导致的“天窗”问题具体的工作流程如下图所示:
图2:NAT64+DNS64业务访问流程
第一步:通过DNS64请求,获取一个AppServer的IPv6地址。(关键点:一定要返回一个AppServer的IPv6地址。)
第二步:成功获得AppServer的IPv6地址后,直接访问IPv6Server的内容,或者通过NAT64网关访问IPv4Server的内容。
通过SPACE6技术实现IPv6升级
对于移动互联网应用App服务提供商来说,改造IPv4互联网应用AppServer端,除代码重写和协议翻译以外,没有更多有效的解决方案。可是代码重写的代价非常大,时间周期也很长,同时由于升级初期IPv6用户少,面临高投入低回报的尴尬局面。
SPACE6应用迁移技术则能够较好解决这个问题,它适用于下一代互联网网络和业务等发展领域,可解决IPv4网络和IPv6网络的内容互通问题,可协助互联网应用App服务提供商在不修改现有应用系统的情况下,快速完成现有IPv4移动端App应用的迁移。通过该技术,IPv6用户可以访问IPv4移动端App应用内容,IPv4用户也可以访问IPv6网站内容,并同时支持IP访问和域名访问。从而在一定程度上解决了因为IPv4移动端App应用短时间内无法转换成IPv6移动端App应用,而导致的IPv6应用匮乏、IPv6网络发展受阻的问题,并避免IPv4和IPv6网络对接过程中,对网络设备的依赖,保证IPv4和IPv6主机之间的无缝互通。
当IPv6单栈用户准备访问通过该平台升级的移动端App应用时,用户首先向运营商DNS(或自行指定的DNS)查询对应的IP地址,IPv6用户发出的DNS请求类型为AAAA,运营商DNS则从授权DNS上获得相应的AAAA记录,并把对应的IPv6地址反馈给用户。该IPv6地址实际上就是平台给移动端App应用分配的IPv6地址。IPv6用户向解析回来的IPv6地址发出请求,该请求被路由到互通平台,平台将从应用系统同步过来的信息直接反馈给用户,从而帮助App应用系统满足IPv6用户的访问需求,实现移动端App应用双栈化的目的。IPv4单栈用户访问IPv6移动端App应用时,业务流程与IPv6单栈用户IPv4移动端App应用的流程类似。
图3:IPv4-IPv6互通业务访问流程
对用户而言IPv4-IPv6平台是完全透明的,而且平台可提供智能缓存和内容加速功能,比原网站具有更快的响应速度,达到更好的用户体验。
四、睿哲云IPv6应用APP测试环境
睿哲6aaS(IPv6asaService)是IPv6即服务,平台采用分布式部署架构,结合云计算、大数据分析等技术,具备云服务、内容分发、IPv6升级等能力;可以不受地域和运营商的局限,为用户提供移动端App应用开发者IPv6-only测试环境及解决苹果AppStore审核的问题。
苹果AppStore审核员在美国的IPv6-Only环境下对APP进行访问(审核),如果APP服务器支持IPv6,则可直接访问,否则只能通过苹果公司的NAT64+DNS64服务器进行测试,但苹果的服务器不能有效的给App服务器返回一个IPv6地址,这就导致了审核失败,App无法上架。
图4:6aaS云平台业务访问流程
6aaS云平台提供IPv4/IPv6双栈应用开发及测试环境,满足未来互联网应用发展与更新迭代需求,为企业应用系统开发及运行提供有效保障。6aaS云平台可快速为苹果开发企业提供搭建IPv6-Only的云测试环境,是苹果开发者测试App是否支持IPv6的重要利器。
6aaS云平台支持双栈内容发布服务,实现单栈内容,提供双栈服务;即将原有IPv4的App应用系统内容同时发布到IPv4和IPv6两个协议平台,从而快速实现App应用业务系统双栈化,以满足原有IPv4用户、新增IPv6用户或双栈用户的不同协议栈访问需求,并完美解决App应用AppStore审核失败的问题。
五、结束语
移动端App应用IPv4到IPv6过渡是一个循序渐进的过程,移动端App应用向支持IPv6的演进前期,可通过SPACE6技术及6aaS云平台快速实现移动端App应用服务端IPv6的升级,既不改变现有应用服务架构,也不影响用户体验感知;在IPv6演进过程中后期可通过逐步修改App应用服务端程序代码的方式实现移动端App应用服务端对IPv6的全面支持。
相关文章推荐
樱桃cherry.com域名价格或达7位数美元2022-09-06
紫燕食品上市,卤味市场域名哪家强?2022-09-27
新一期域名交易排行榜,国别域名MA.ca成无冕之王2022-09-27
威瑞信发布2022年Q2行业简报:.com注册量下降2022-09-27
域名Keys.xyz被元宇宙游戏终端收购2022-09-20