IPv6-only 的兼容性解决方案

前几天Apple宣布 6月1日后所有应用必须支持IPv6-only网络 今天抽空看了下这方面的知识

首先解释下IPv6的是什么?

维基百科的定义如下:
IPv6是Internet Protocol version 6的缩写 全名为互联网通讯协议第6版 是互联网协议的最新版本,用于分组交换互联网络的网络层协议,旨在解决IPv4地址枯竭问题
IPv6具有比IPv4大得多的编码地址空间。这是因为IPv6采用了128位的地址,而IPv4使用的是32位。因此新增的地址空间支持2128(约3.4 ×1038)个地址

优点如下:

  1. IPv6具有更大的地址空间
  2. IPv6使用更小的路由表 (更快的路由)
  3. IPv6具有更高的安全性

APP中如何使用IPv6

1. 使用更高层次的网络API(Use High-Level Networking Frameworks) 避免使用socket API

蓝色部分API 默认都支持IPv6

API

也就是说
.WebKit
.(NSURLSession NSURLRequest NSURLConnection)
.CFNetwork
这些API默认都已经支持IPv6
而值得庆幸的时 我们使用的大多数第三方网络库使用的也是这些API
比如AFNetWorking 我特意找了一段代码

AFNetWoring DEMO

下图是Alamofire创建请求的代码

Alamofire DEMO

Alamofire使用的是High-Level Networking Frameworks(NSURLRequest) 也不存在兼容性问题
这意味着大多数情况下 我们不需要做什么 就可以兼容IPv6

如果你不能避免使用socket API 请参考这个指南
RFC4038: Application Aspects of IPv6 Transition

2. 不要使用IP地址
比如使用SCNetworkReachabilityCreateWithName API 时

  func SCNetworkReachabilityCreateWithName(_ allocator:     CFAllocator?, _ nodename: UnsafePointer<Int8>) -> SCNetworkReachability?

使用主机名或者主机域名访问

3.检查IPv4代码
项目中不能使用如下代码:

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

IPv4->IPv6类型对照表

如何测试?

利用Mac创建一个 IPv6 WIFI 热点 手机连接该WIFI即可测试
(必须保证你的Mac已连接到Internet 并且不是通过WIFI的方式)
1. 创建 IPv6 WIFI热点
点击系统设置(System Preferences)-> 按住Option键 -> 点击共享(Sharing

共享

选择互联网共享(Internet Sharing

互联网共享

选中 创建NaT64网络 (Create NAT64 Network)

systempreferences_sharing_internetsharing_ipv6_2x.png

选择 一个共享来源连接

共享来源连接

配置WIFI选项

WIFI选项配置

输入你的热点名称和密码 最后启用互联网共享(Internet Sharing)选中checkbo

启用 互联网共享

热点开启效果

之后通过手机连接该热点 完成测试

文/sprint(简书作者)
原文链接:http://www.jianshu.com/p/8837739251ad
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-08-11 18:58:13

IPv6-only 的兼容性解决方案的相关文章

CSS的兼容性解决方案

什么是兼容性? 同一个网页,在不同浏览器下(IE6.IE7.IE8)下的显示效果不一致,这就是说"CSS不兼容". IETESTer可以同时测试IE5.5.IE6.IE7.IE8这些版本的网页效果. 解决CSS兼容性的方法 CSS全局设置的重要性 常用的CSS兼容性的总结 CSS HACK(不推荐使用) CSS全局样式的设置 1.清除网页中所有标签的内填充和外边距 ????body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,form, input,

Javascript事件机制兼容性解决方案

原文:Javascript事件机制兼容性解决方案 本文的解决方案可以用于Javascript native对象和宿主对象(dom元素),通过以下的方式来绑定和触发事件: 或者 var input = document.getElementsByTagName('input')[0]; var form = document.getElementsByTagName('form')[0]; Evt.on(input, 'click', function(evt){ console.log('inp

阿里云针对苹果官方ipv6审核的综合解决方案

前言 因业务需求 公司APP需要在ios系统上运行需要改系统ipv6 2016年6月1号之后苹果应用上传AppStore审核要求全面支持ipv6,虽然只是一个简单的审核要求,但却给中国区的开发者带来了不小的麻烦,因为众所周知的原因,国内的IPV6支持的比较差,所以包括ipv6环境测试在内的ipv6适配要求,着实是需要有一套解决方案.这里都是废话,下面就自己的解决方案开始做方案介绍. 代码层支持 按照苹果官方要求做iOS代码适配ipv6,这里涉及到了跟网络相关的第三方库的时候,按照我自己的经验,做

Js获取元素样式值(getComputedStyle&amp;currentStyle)兼容性解决方案

因为:style(document.getElementById(id).style.XXX)只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的. 一般js获取内部样式和外部样式使用getComputedStyle,以及currentStyle. IE下获取元素的实际属性值使用currentStyle属性,getComputedStyle同currentStyle作用相同,但是适用于FF.opera.safari.chrome.但用这种方法在IE7,IE8,IE9获取元素属性值

对于IE 10 以下版本placeholder的兼容性解决方案

<!-- 对于IE 10 以下版本placeholder的兼容性调整 --> <!--[if lt IE 10]> <script> $(function(){ $("input[type!='password'],textarea").bind({ "focus":function(){ var placeholderVal = $(this).attr("placeholder"); var realVal

网页图片下载兼容性解决方案

通常我们需要下载某个图片,可以直接通过a标签的 sr c指向需要下载的图片地址,并为a标签添加  download 属性即可 <a :href='recodeurl' class='test' download="img">下载二维码</a> 但 download 的兼容性问题也是很明显的,由下图可知,ie浏览器完全不支持该属性 so  我们只能通过js来寻求解决办法,来达到对图片下载的完美支持 $(function () { (function () { va

Web开发中常见的兼容性解决方案(持续汇总...)

大纲 问题背景 HTML篇 CSS篇 Javascript篇 参考资料 问题背景 由于市场上浏览器种类众多,而不同厂商的浏览器其内核亦不尽相同,甚至同一厂商,不同版本之间的浏览器解析都有所不同.所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因. 我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容.同一个功能我们可能有很多不同的代码实现方式,我们尽可能的选择兼容性高的写法. HTML篇 CSS篇 Javascript篇 参考资料 结束语 每个程序员一生要学习1

MathType requires a newer version of MT Extra等MathType问题的不兼容性解决方案

常见问题解决方法: 1.MathType 6.0与office 2007兼容问题 由于Office软件安装时默认是不安装公式编辑器的,在安装完MathType 6.0之后,需要将\MathType 6.0\OfficeSupport\目录中的MathType Commands 6 For Word.dot复制到C:\Documents andSettings\当前用户名\Application Data\Microsoft\Word\STARTUP目录中,重新打开Office2007Word之后

兼容性解决方案

1.标准浏览器下给div设置padding后会导致width和height增加,但IE不会. 方法:文档声明DOC |  用!important解决 2.垂直居中:line-height=div的height,再通过vertical-align:middle:( 注意内容不要换行) 3.浮动IE产生的双倍距离,在IE下,当一个div设置了float后,然后给他设置margin,就会出现加倍的margin 方法:给div设置*display:inline