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