IPv6-only 的兼容性解決方案

前幾天Apple宣佈 6月1往後全部應用必須支持IPv6-only網絡 今天抽空看了下這方面的知識html

首先解釋下IPv6的是什麼?node

維基百科的定義以下:
IPv6是Internet Protocol version 6的縮寫 全名爲互聯網通信協議第6版 是互聯網協議的最新版本,用於分組交換互聯網絡的網絡層協議,旨在解決IPv4地址枯竭問題
IPv6具備比IPv4大得多的編碼地址空間。這是由於IPv6採用了128位的地址,而IPv4使用的是32位。所以新增的地址空間支持2128(約3.4 ×1038)個地址swift

優勢以下:安全

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

APP中如何使用IPv6

1. 使用更高層次的網絡API(Use High-Level Networking Frameworks) 避免使用socket API 網絡

藍色部分API 默認都支持IPv6socket


API

也就是說
.WebKit
.(NSURLSession NSURLRequest NSURLConnection)
.CFNetwork
這些API默認都已經支持IPv6
而值得慶幸的時 咱們使用的大多數第三方網絡庫使用的也是這些API
好比AFNetWorking 我特地找了一段代碼測試


AFNetWoring DEMO

下圖是Alamofire建立請求的代碼編碼


Alamofire DEMO

Alamofire使用的是High-Level Networking Frameworks(NSURLRequest) 也不存在兼容性問題
這意味着大多數狀況下 咱們不須要作什麼 就能夠兼容IPv6spa

若是你不能避免使用socket API 請參考這個指南
RFC4038: Application Aspects of IPv6 Transition3d

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 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索