果然是蘋果打個哈欠,iOS行業(yè)內就得起一次風暴呀。自從去年5月初Apple明文規(guī)定所有開發(fā)者在6月1號以后提交新版本需要支持IPV6-Only的網(wǎng)絡,大家便開始熱火朝天的研究如何支持IPV6,以及應用中哪些模塊目前不支持IPV6。
App Store策略是要求所有iOS應用必需包含IPv6-only網(wǎng)絡的支持。從今年6月1日開始,所有提交至蘋果App Store的應用必需要兼容面向硬件識別和網(wǎng)絡路由的最新互聯(lián)網(wǎng)協(xié)議——IPv6-only標準。這項措施是在2015年蘋果WWDC開發(fā)者大會上提出的,iOS 9會率先向IPv6-only網(wǎng)絡服務過渡。
根據(jù)蘋果開發(fā)者網(wǎng)站聲明,大部分現(xiàn)有的應用程序已經(jīng)通過NSURLSession和CFNetwork APIs兼容該協(xié)議,不過依然使用IPv4 APIs的或者硬件編碼IP地址的開發(fā)者將需要手工調整應用代碼來適應蘋果的最新策略。隨著IPv4地址的枯竭,IPv6d的轉移工作變得越來越重要。對于蘋果來說,切換至IPv6能夠帶來更加廣泛的行業(yè)接受協(xié)議,此外伴隨著物聯(lián)網(wǎng)的普及,同樣能延續(xù)智能手機的健康發(fā)展。
什么是 IPv6-ONLY ?
以前,大家都在用 IPv4,就是地址看起來是 114.255.40.66 的樣子。然而,這樣的地址已經(jīng)不夠用了,就有了類似2001:da8:215:4009:250:56ff:fe97:40c7 這樣的 IP 地址。
目前,一個網(wǎng)卡會同時使用這兩張地址;在未來,一個網(wǎng)卡將僅有后面這樣的 IPv6 地址。 使用這兩種地址的設備是不能互相訪問的,后來有了一些過渡技術讓他們在某些情況下可以互相訪問了。(如 DNS64/NAT64)
首先IPV6,是對IPV4地址空間的擴充。目前當我們用iOS設備連接上Wifi、4G、3G等網(wǎng)絡時,設備被分配的地址均是IPV4地址,但是隨著運營商和企業(yè)逐漸部署IPV6 DNS64/NAT64網(wǎng)絡之后,設備被分配的地址會變成IPV6的地址,而這些網(wǎng)絡就是所謂的IPV6-Only網(wǎng)絡,并且仍然可以通過此網(wǎng)絡去獲取IPV4地址提供的內容??蛻舳讼蚍掌鞫苏埱笥蛎馕?,首先通過DNS64 Server查詢IPv6的地址,如果查詢不到,再向DNS Server查詢IPv4地址,通過DNS64 Server合成一個IPV6的地址,最終將一個IPV6的地址返回給客戶端。如圖所示:
在Mac OS 10.11+的雙網(wǎng)卡的Mac機器(以太網(wǎng)口+無線網(wǎng)卡),我們可以通過模擬構建這么一個local IPv6 DNS64/NAT64 的網(wǎng)絡環(huán)境去測試應用是否支持IPV6-Only網(wǎng)絡,大概原理如下:
如何滿足蘋果要求?
蘋果公司為什么要這么做?
現(xiàn)在有極小一部分用戶處在IPv6-ONLY的環(huán)境中,未來這個比例會擴大。
蘋果這樣要求,對于大多數(shù)開發(fā)者而言,并不困難。目前大多數(shù)應用無需任何操作即可滿足要求。
我不太懂這些,我該怎么做呢?
在你的應用中使用域名(如 www.bupt.edu.cn),不要在任何地方使用 IPv4地址(114.255.40.66)。
我的服務器必須有 IPv6 地址么?
不是的,服務器只需要有公網(wǎng) IPv4 地址即可,但要求必須使用域名(FQDN)來表示服務器。
如何創(chuàng)造 IPv6-ONLY 測試環(huán)境
MacOS 提供了這個功能。 使用 Mac 把有線網(wǎng)絡共享到 WiFi,中間勾選 創(chuàng)建NAT64網(wǎng)絡 即可。
apple如何審核支持IPV6-Only?
首先第一點:這里說的支持IPV6-Only網(wǎng)絡,其實就是說讓應用在 IPv6 DNS64/NAT64 網(wǎng)絡環(huán)境下仍然能夠正常運行。但是考慮到我們目前的實際網(wǎng)絡環(huán)境仍然是IPV4網(wǎng)絡,所以應用需要能夠同時保證IPV4和IPV6環(huán)境下的可用性。從這點來說,蘋果不會去掃描IPV4的專有API來拒絕審核通過,因為IPV4的API和IPV6的API調用都會同時存在于代碼中(不過為了減小審核被拒風險,建議將IPV4專有API通過IPV6的兼容API來替換)。
其次第二點:Apple官方聲明iOS9開始向IPV6支持過渡,在iOS9.2+支持通過getaddrInfo方法將IPV4地址合成IPV6地址(The ability to synthesize IPv6 addresses was added to getaddrinfo in iOS 9.2 and OS X 10.11.2)。其提供的Reachability庫在iOS8系統(tǒng)下,當從IPV4切換到IPV6網(wǎng)絡,或者從IPV6網(wǎng)絡切換到IPV4,是無法監(jiān)控到網(wǎng)絡狀態(tài)的變化。也有一些開發(fā)者針對這些Bug詢問Apple的審核部門,給予的答復是只需要在蘋果最新的系統(tǒng)上保證IPV6的兼容性即可。
最后第三點:只要應用的主流程支持IPV6,通過蘋果審核即可。對于不支持IPV6的模塊,考慮到我們現(xiàn)實IPV6網(wǎng)絡的部署還需要一段時間,短時間內不會影響我們用戶的使用。但隨著4G網(wǎng)絡IPV6的部署,這部分模塊還是需要逐漸安排人力進行支持。
追加第四點:如果應用一直直接使用IPV4地址通過NSURLConenction或者NSURLSession進行網(wǎng)絡請求(一般需要服務器允許,且客戶端需要在header中偽裝host);經(jīng)測試,IPV6網(wǎng)絡環(huán)境下,直接使用IPV4地址在iOS9及以上的系統(tǒng)仍然能夠正常訪問;在iOS8.4及以下不能正常訪問;這一點蘋果的解釋和建議是這樣的:
Note: In iOS 9 and OS X 10.11 and later, NSURLSession and CFNetwork automatically synthesize IPv6 addresses from IPv4 literals locally on devices operating on DNS64/NAT64 networks. However, you should still work to rid your code of IP address literals.
評論
查看更多