iOS 適配iPV6

1. IPV6簡(jiǎn)單介紹

  1. 網(wǎng)絡(luò)是IPV6還是IPV4是由運(yùn)營(yíng)商和企業(yè)逐漸部署的。

  2. 客戶端向服務(wù)器端請(qǐng)求域名解析,首先通過(guò)DNS64 Server查詢IPv6的地址,如果查詢不到,再向DNS Server查詢IPv4地址,通過(guò)DNS64 Server合成一個(gè)IPV6的地址,最終將一個(gè)IPV6的地址返回給客戶端。

  3. 但是考慮到我們目前的實(shí)際網(wǎng)絡(luò)環(huán)境仍然是IPV4網(wǎng)絡(luò),所以應(yīng)用需要能夠同時(shí)保證IPV4和IPV6環(huán)境下的可用性。從這點(diǎn)來(lái)說(shuō),蘋果不會(huì)去掃描IPV4的專有API來(lái)拒絕審核通過(guò),因?yàn)镮PV4的API和IPV6的API調(diào)用都會(huì)同時(shí)存在于代碼中(不過(guò)為了減小審核被拒風(fēng)險(xiǎn),建議將IPV4專有API通過(guò)IPV6的兼容API來(lái)替換)。

  4. Apple官方聲明iOS9開(kāi)始向IPV6支持過(guò)渡,在iOS9.2+支持通過(guò)getaddrInfo方法將IPV4地址合成IPV6地址。其提供的Reachability庫(kù)在iOS8系統(tǒng)下,當(dāng)從IPV4切換到IPV6網(wǎng)絡(luò),或者從IPV6網(wǎng)絡(luò)切換到IPV4,是無(wú)法監(jiān)控到網(wǎng)絡(luò)狀態(tài)的變化。

2. 本地搭建IPv6測(cè)試環(huán)境

所需要的就是一臺(tái)用非Wi-Fi的方式上網(wǎng)的Mac電腦。我們的要做的其實(shí)就是用Mac做一個(gè)熱點(diǎn),然后用iPhone連接這個(gè)Wi-Fi。

區(qū)別是這次我們產(chǎn)生的是一個(gè)本地的IPv6 DNS64/NAT64網(wǎng)絡(luò),這項(xiàng)功能是OS X 10.11新加的。和我們以前開(kāi)啟熱點(diǎn)方式不一樣的地方在于,我們?cè)凇癝ystem Preferences”界面選中“Sharing”的同時(shí),要按住“Option”鍵。如下圖:

841355-bd2a25d779153e4c.png

之后在“Sharing”界面中,我們會(huì)看到和之前不一樣的地方,就是紅框所標(biāo)的地方,多了一個(gè)叫“Create NAT64 Network”的選框,選中它。如下圖:

841355-8e5aa1eac3c24a8d.png

之后就是按照正常的創(chuàng)建熱點(diǎn)的流程走完就行了。

3. AFN 適配了IPV6

以前沒(méi)有時(shí)間,今天有一點(diǎn)空隙,稍微看了一下AFN對(duì)IPV6的適配。

  • 主要修改
    • 主要修改的文件AFNetworkReachabilityManager.m。在這個(gè)文件里面:我找到修改的地方是:
   + (instancetype)manager
{
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
   struct sockaddr_in6 address;
   bzero(&address, sizeof(address));
   address.sin6_len = sizeof(address);
   address.sin6_family = AF_INET6;
#else
   struct sockaddr_in address;
   bzero(&address, sizeof(address));
   address.sin_len = sizeof(address);
   address.sin_family = AF_INET;
#endif
   return [self managerForAddress:&address];
}

   ```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容