如何適配IPv6網(wǎng)絡(luò)環(huán)境?
自2016年6月1日起,蘋果公司強(qiáng)制所有的App必須支持純IPv6網(wǎng)絡(luò)環(huán)境。這項(xiàng)措施將對(duì)IPv6網(wǎng)絡(luò)的普及起到一定的推動(dòng)作用,并體現(xiàn)了Apple作為國際大廠的擔(dān)當(dāng)。本文將給出一些適配IPv6網(wǎng)絡(luò)環(huán)境的
自2016年6月1日起,蘋果公司強(qiáng)制所有的App必須支持純IPv6網(wǎng)絡(luò)環(huán)境。這項(xiàng)措施將對(duì)IPv6網(wǎng)絡(luò)的普及起到一定的推動(dòng)作用,并體現(xiàn)了Apple作為國際大廠的擔(dān)當(dāng)。本文將給出一些適配IPv6網(wǎng)絡(luò)環(huán)境的方法。
高級(jí)API vs. 底層API
首先,我們需要知道在iOS開發(fā)中,有高級(jí)API和底層API兩種類型的網(wǎng)絡(luò)庫。高級(jí)API已經(jīng)封裝了底層適配IPv6的工作,使用起來更加方便,同時(shí)也避免了產(chǎn)生過多的bug。相反,使用底層API會(huì)讓自己承擔(dān)更多的工作量并且容易出現(xiàn)bug。
圖示展示了藍(lán)色部分的API不存在兼容性問題,而我們平時(shí)自己用的包括第三方的網(wǎng)絡(luò)庫大部分都是用的這些API。因此,在大多數(shù)情況下,我們可以使用高級(jí)API完全滿足我們的需求。
如果你確實(shí)需要使用底層的POSIX socket API,請(qǐng)參考RFC4038: Application Aspects of IPv6 Transition的指導(dǎo)。例如,nodename參數(shù)不應(yīng)該傳IP地址,而應(yīng)該使用域名。
搭建IPv6測(cè)試環(huán)境
最好的學(xué)習(xí)方法就是親身實(shí)踐。那么,如何搭建一個(gè)IPv6測(cè)試環(huán)境呢?只需要一臺(tái)用非Wi-Fi方式上網(wǎng)的Mac電腦即可。接下來,我們將教您如何搭建測(cè)試環(huán)境:
1. 使用Mac做一個(gè)熱點(diǎn),并用iPhone連接這個(gè)Wi-Fi。
2. 產(chǎn)生的是一個(gè)本地的IPv6 DNS64/NAT64網(wǎng)絡(luò),這是OS X 10.11新增的功能。在“System Preferences”界面選中“Sharing”的同時(shí),要按住“Option”鍵。
3. 在“Sharing”界面中,我們會(huì)看到“Create NAT64 Network”的選框,選中它。
4. 搜一下工程里有沒有下面的API,這些都是只針對(duì)IPv4做處理的,有的話就刪了。
5. 具體的對(duì)應(yīng)字段可參考圖示。
DNS64和NAT64的重要性
在適配IPv6網(wǎng)絡(luò)環(huán)境時(shí),最重要的兩個(gè)概念是DNS64和NAT64。我們通常使用getaddrinfo函數(shù)來解析host。但是,如果端口號(hào)部分的輸入?yún)?shù)是數(shù)字類型,會(huì)導(dǎo)致返回的結(jié)果里端口號(hào)被修改。修改辦法是在DNS query結(jié)果里手動(dòng)將端口號(hào)再改回?;蛘撸梢蕴^DNS查詢,直接自己將IPv4的地址轉(zhuǎn)化成IPv6的地址。
總結(jié)
通過本文的介紹,我們知道了蘋果從2016年6月1號(hào)開始,強(qiáng)制所有app必須支持純IPv6的網(wǎng)絡(luò)環(huán)境。我們也了解到了高級(jí)API和底層API兩種類型的網(wǎng)絡(luò)庫,并了解到了如何搭建IPv6測(cè)試環(huán)境。最后,我們明白了DNS64和NAT64的重要性以及如何適配IPv6網(wǎng)絡(luò)環(huán)境。