Pv6-only 的兼容性解决方案
来源:互联网 发布:mysql distinct 原理 编辑:程序博客网 时间:2024/06/05 13:27
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
或者参考谷歌的开源库CocoaAsyncSocket
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
之后通过手机连接该热点 完成测试
- Pv6-only 的兼容性解决方案
- iOS IPv6-only 的兼容性解决方案
- iOS APP 支持IPv6-only的注意事项及兼容性考虑
- iOS APP 支持IPv6-only的注意事项及兼容性考虑
- javascript console对象的兼容性解决方案
- 关于浏览器兼容性的各种解决方案
- 关于ie8浏览器的兼容性解决方案
- XHTML+CSS兼容性解决方案
- XHTML+CSS兼容性解决方案
- CSS兼容性解决方案
- XHTML+CSS兼容性解决方案
- CSS 兼容性解决方案
- 浏览器兼容性解决方案
- HTML5浏览器兼容性解决方案
- 部分Javascript的IE和Firefox兼容性解决方案
- 编译为JavaScript:不兼容性的另类解决方案
- kangle web 的常见问题收集和兼容性解决方案
- SQLite与.Net Framework 4.0的兼容性解决方案
- build your own lisp ch6 笔记
- JavaScript 基础知识--数据类型
- 使用Dagger 2依赖注入 - 自定义Scope
- Node.js EventEmitter类
- Android ListView工作原理完全解析,带你从源码的角度彻底理解[转]
- Pv6-only 的兼容性解决方案
- ios开发中ViewDidLoad和loadView的区别
- Rstudio 的安装
- ICMP控制报文协议
- C++ STL标准模板库类String成员详细列表参考及示例代码
- mysql索引
- Android安全攻防战,反编译与混淆技术完全解析(上)
- Android获取长按按键响应
- synchronized修饰符的几点说明