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)个地址
优点如下:
- IPv6具有更大的地址空间
- IPv6使用更小的路由表 (更快的路由)
- IPv6具有更高的安全性
APP中如何使用IPv6
1. 使用更高层次的网络API(Use High-Level Networking Frameworks) 避免使用socket API
蓝色部分API 默认都支持IPv6

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

下图是Alamofire创建请求的代码

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()

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

选择互联网共享(Internet Sharing)

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

选择 一个共享来源连接

配置WIFI选项

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


之后通过手机连接该热点 完成测试
原文链接:http://www.jianshu.com/p/8837739251ad
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
IPv6-only 的兼容性解决方案的更多相关文章
- Javascript事件机制兼容性解决方案
本文的解决方案可以用于Javascript native对象和宿主对象(dom元素),通过以下的方式来绑定和触发事件: 或者 var input = document.getElementsByTag ...
- IPv6-only 的兼容性解决方案-b
前几天Apple宣布 6月1日后所有应用必须支持IPv6-only网络 今天抽空看了下这方面的知识 首先解释下IPv6的是什么? 维基百科的定义如下:IPv6是Internet Protocol ve ...
- 【H5】344- 微信 H5 页面兼容性解决方案
点击上方"前端自习课"关注,学习起来~ 最近给公司微信公众号,写了微信h5业务页面,总结分享一下前端开发过程中的几个兼容性坑,项目直接拿的公司页面,所以下文涉及图片都模糊处理了. ...
- CSS的兼容性解决方案
什么是兼容性? 同一个网页,在不同浏览器下(IE6.IE7.IE8)下的显示效果不一致,这就是说"CSS不兼容". IETESTer可以同时测试IE5.5.IE6.IE7.IE8这 ...
- Js获取元素样式值(getComputedStyle¤tStyle)兼容性解决方案
因为:style(document.getElementById(id).style.XXX)只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的. 一般js获取内部样式和外部样式使用 ...
- css3中“渐变”兼容性解决方案
这次是简单的谈一下我们常见的渐变在各个浏览器下的兼容性问题,算一个比较简单的问题. 我们熟知的浏览器有Chrome.Firefox.Opera.Safari以及ie系列.最基础的background: ...
- windows server 2008 r2 IIS 6 元数据库与IIS 6 配置的兼容性 解决方案
1 菜单-管理工具-服务器管理 2 添加角色服务 3 选中 IIS6 管理兼容性 4 安装完成 5 在IIS上新建一个相应端口的网站 6重新加载项目,OK
- 由inline-block小例子引申出的一些问题,及IE6、IE7兼容性解决方案
使用场景分析: 常见的对块与块之间的横向排列处理 对同级所有元素使用display:inline-block; , 之后块与块直接会产生间隙问题 解决办法: 给父级设 font-size:0; 别高兴 ...
- js通过class获取元素时的兼容性解决方案
1:::::方法代码如下:function getByClass(sClass){ var aResult=[]; var aEle=document.getElementsByTagNa ...
随机推荐
- maven build脚本笔记
如果 code 只存在src/java/main 路径下,直接install就好,不必写<build> 资源文件:edu-common-config <build> <f ...
- java 静态内部类特点
1.静态内部类可以在外部类的静态成员中访问或者实例化(非静态内部类不可以)---优势 2.静态内部类可以访问外部类的静态成员不可以访问非静态成员(非静态内部类可以访问类的静态和非静态成员)---限制 ...
- R语言学习笔记之外部文件读取
在win32位的系统下,RODBC包内的函数是可以直接运行的,但在win64位的系统则不支持! 1.读取外部文件read.table()---csv,txt,excel 最基本函数是read.tabl ...
- [LeetCode]题解(python):133-Clone Graph
题目来源: https://leetcode.com/problems/clone-graph/ 题意分析: 克隆一个无向图.每个节点包括一个数值和它的邻居. 题目思路: 直接深度拷贝. 代码(pyt ...
- [LeetCode]题解(python):077-Combinations
题目来源: https://leetcode.com/problems/combinations/ 题意分析: 给定一个n和k,输出1到n的所有k个数的组合.比如n = 4,k=2 [ [2,4], ...
- 常用SQL的优化
导入数据 对于MyISAM存储引擎的表,可以通过以下方式快速地导入大量数据 alter table tbl_name disable keys; //关闭表非唯一索引的更新 ...
- javascript closure 闭包 事件绑定
先来一个基本的例子 <!-- 实现一段脚本,使得点击对应链接alert出相应的编号 --> <meta http-equiv="Content-Type" con ...
- 城通网盘,千军万马,千脑网盘,119g网盘哪个适合做网赚?
转载请注明文章来自 [ofiicexie] 网盘网赚已经流行了有一段时间了,国内流行的几个网盘有城通,千军万马,千脑,119g,今天小编写以此文来比较分析一下这几个网盘的优缺点. 这里,我特意做了个这 ...
- 再探java基础——break和continue的用法
再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...
- linux下c/c++方式访问curl的帮助手册
自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用.记 ...