IPV6總結(jié)

適配IPV6

在WWDC2015上蘋果公司宣布iOS9將支持純IPV6的網(wǎng)絡服務疾捍。自從5月初Apple明文規(guī)定所有開發(fā)者在6月1號以后提交新版本需要支持IPV6-Only的網(wǎng)絡泉哈,什么是IPV6 ? Apple如何審核IPV6?如何支持IPV6?應用中哪些模塊目前不支持IPV6闷叉?為確倍巯溃現(xiàn)有的應用兼容佣蓉,我們又應該注意那些東西呢?如果我要進行本地測試馆铁,應該如何搭建IPV6環(huán)境跑揉?

關(guān)鍵詞:WWDC2015 IPV6-Only

一、什么是IPV6

首先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地址提供的內(nèi)容相味。客戶端向服務器端請求域名解析职抡,首先通過DNS64 Server查詢IPv6的地址箩艺,如果查詢不到,再向DNS Server查詢IPv4地址荤胁,通過DNS64 Server合成一個IPV6的地址瞧预,最終將一個IPV6的地址返回給客戶端。

二仅政、Apple如何審核支持IPV6-Only

1垢油、簡單來講讓應用能夠在IPv6 DNS64/NAT64網(wǎng)絡環(huán)境下仍然能夠正常運行,即為應用支持了IPV6-Only網(wǎng)絡圆丹。但目前我們所能使用到的網(wǎng)絡環(huán)境仍然是IPV4網(wǎng)絡秸苗,所以應用需要同時支持IPV4以及IPV6網(wǎng)絡環(huán)境。

2运褪、Apple官方規(guī)定iOS9開始向IPV6過度惊楼,并在iOS9.2+上支持IPV4地址合成IPV6地址。目前蘋果官方提供的Reachability庫在iOS8系統(tǒng)下無法實現(xiàn)IPV4與IPV6之間的相互切換秸讹,所以蘋果官方聲明只需要在蘋果最新的系統(tǒng)上保證支持IPV6的兼容即可檀咙。

3、由于目前4G網(wǎng)絡的IPV6部署還不夠完善璃诀,所以應用只需要支持主流程兼容IPV6弧可,通過蘋果審核即可。對于不支持IPV6的模塊段時間內(nèi)不會影響用戶使用劣欢,但是后期仍需要進行支持棕诵。

三、如何支持IPV6

Apple官方給出以下支持IPV6的標準:

1.UseHigh-LevelNetworking Frameworks;

2. Don’tUseIP Address Literals;

3.CheckSourceCodeforIPv6 DNS64/NAT64Incompatibilities;

4.UseSystemAPIstoSynthesize IPv6 Addresse;

3.1 NSURLConnection是否支持IPV6?

官方給出的聲明只說NSURLSession和CFNetwork的API不需要改變凿将,但是并沒有提及到NSURLConnection相關(guān)信息校套。從NSURLSession、NSURLConnection同屬于Cocoa的url loading system牧抵,可以猜測NSURLConnection在iOS9上支持IPV6笛匙。但是目前AFNetwroking庫已經(jīng)推出支持IPV6的3.0版本,使得開發(fā)者必須升級AFNetworking并重寫網(wǎng)絡請求犀变。

3.2 Reachability是否需要支持IPV6?

根據(jù)實際應用中開發(fā)者提出的各種網(wǎng)絡切換問題(通過ZeroAddress開啟網(wǎng)絡監(jiān)控)蘋果官方給出的相關(guān)解釋說明Reachability不需要做任何修改妹孙,并且蘋果審核時不關(guān)心在iOS9一下Reachability存在的BUG,只關(guān)心iOS9以上是否支持获枝。

四蠢正、底層的socket API如何同時支持IPV4和IPV6?

應用中大量使用了包含底層的socket API的網(wǎng)絡診斷組件省店,所以支持IPV6十分重嚣崭。應用的長連接需要支持IPV6蜘拉,對于Socket如何同時支持IPV4和IPV6,可以參考谷歌的開源庫CocoaAsyncSocket.

4.1有鹿、IP地址從二進制到符號的轉(zhuǎn)化

話不多說直接上代碼:

//for IPV6

+(NSString*)formatIPV6Address:(structin6_addr)ipv6Addr

{

NSString*address =nil;

chardstStr[INET6_ADDRSTRLEN];

charsrcStr[INET6_ADDRSTRLEN];

memcpy(srcStr, &ipv6Addr,sizeof(structin6_addr));

if(inet_ntop(AF_INET6, srcStr,dstStr,INET6_ADDRSTRLEN)!=NULL){

address = [NSStringstringWithUTF8String:dstStr];

}

returnaddress;

}

//for IPV4

+(NSString*)formatIPV4Address:(structin_addr)ipv4Addr{

NSString*address =nil;

chardstStr[INET_ADDRSTRLEN];

charsrcStr[INET_ADDRSTRLEN];memcpy(srcStr, &ipv4Addr,sizeof(structin_addr));

if(inet_ntop(AF_INET, srcStr, dstStr,INET_ADDRSTRLEN) !=NULL){

address = [NSStringstringWithUTF8String:dstStr];

}

returnaddress;

}

4.2旭旭、本機IP獲取支持IPV6

類似于終端輸入ifconfig命令獲取字符串,然后解析獲取其中的en0(Wifi)葱跋、padp_ip0(移動網(wǎng)絡)的IP地址持寄。

注意:

1、在模擬器和真機上都會出現(xiàn)以FE80開頭的IPV6單播地址響應我們的判斷娱俺,所以要注意第一次遇到不是單播地址的IP即為本機IP地址稍味。

2、在IPV6環(huán)境下荠卷,真機測試時第一個出現(xiàn)的是IPV4地址模庐,所以在IPV4條件下第一次遇到單播地址不退出。

代碼油宜;

+ (NSString *)deviceIPAdress

{

while(temp_addr !=NULL) {

NSLog(@"ifa_name===%@",[NSStringstringWithUTF8String:temp_addr->ifa_name]);

// Check if interface is en0

which is the wifi connection on the iPhone

if([[NSString

stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"] || [[NSString

stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"pdp_ip0"])

{

//如果是IPV4地址掂碱,直接轉(zhuǎn)化

if(temp_addr->ifa_addr->sa_family == AF_INET){

// Get NSString from C String

address = [selfformatIPV4Address:((structsockaddr_in *)temp_addr->ifa_addr)->sin_addr];

}

//如果是IPV6地址

elseif(temp_addr->ifa_addr->sa_family == AF_INET6){

address = [selfformatIPV6Address:((struct sockaddr_in6*)temp_addr->ifa_addr)->sin6_addr];

if(address && ![address

isEqualToString:@""] && ![address.uppercaseString hasPrefix:@"FE80"])break;

}

}

temp_addr = temp_addr->ifa_next;

}

}

}

4.3更多方法

更多支持IPV6的方法請移步支持IPV6方法總結(jié)

五、對于兼容IPV6需要注意的事項

5.1慎冤、最好不要使用底層的API疼燥。

下圖展示的藍色部分的這些API都是不存在兼容性問題的,而我們平時自己用的包括那些第三方的網(wǎng)絡庫大部分都是用的這些API蚁堤。

Networking frameworks and API layers

大部分情況下我們用高級的API完全能實現(xiàn)需求醉者,而且高級的API封裝的很好,并且方便使用披诗,對于IPV6的適配也幫我們做好了撬即,例如ShareSDK等。就像之前提到的哪有呈队,使用底層AIP會有大量的工作需要我們自己完成剥槐,所以可能更容易出現(xiàn)BUG。

5.2不要用IP地址

比如下面這個API掂咒,nodename這個參數(shù)不要傳IP地址才沧,而應該用域名。

這個方法會在Reachability中用到绍刮。常用的網(wǎng)絡請求庫AFNetworking最近剛更新版本就是使用了這個方法。如果使用AFNetworking且應用需要提交到App store上需要盡快更新版本并做好相關(guān)適配挨摸。

5.3檢查不兼容IPV6的代碼

全局搜一下工程里有沒有如下這些API孩革,這些都是針對IPv4做處理的,有的話就刪除得运。

inet_addr()

inet_aton()

inet_lnaof()

inet_makeaddr()

inet_netof()

inet_network()

inet_ntoa()

inet_ntoa_r()

bindresvport()

getipv4sourcefilter()

setipv4sourcefilter()

對應IPV4做IPV6處理

IPV4

IPV6

AF_INET

AF_INET6

PE_INET

PE_INET6

struct in_addr

Struct in_addr6

struct sockadd_in

struct sockaddr_in6

kDNSServiceProtocol_IPv4

kDNSServiceProtocol_IPv6

IPv4--IPv6

六膝蜈、本地搭建IPv6測試環(huán)境

最后我們?nèi)绾未罱ㄒ粋€測試的IPv6環(huán)境呢锅移?其實很簡單,我們可以通過Mac做一個熱點饱搏,然后讓iPhone連接這個Wifi非剃。區(qū)別是這次我們產(chǎn)生的是一個本地的IPv6 DNS64/NAT64網(wǎng)絡,這項功能是OS X 10.11新加的推沸。和我們以前開啟熱點方式不一樣的地方在于备绽,我們在“System

Preferences”界面選中“Sharing”的同時,要按住“Option”鍵鬓催。

之后在“Sharing”界面中肺素,我們會看到和之前不一樣的地方,就是紅框所標的地方宇驾,多了一個叫“Create NAT64 Network”的選框倍靡,選中它。

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

現(xiàn)在我們用iPhone連接上這個剛創(chuàng)建好的熱點就可以測試了塌西,注意此時要把iPhone設成飛行模式,以保證只用Wi-Fi上網(wǎng)筝尾。

七雨让、iOS IPv6最新升級攻略

蘋果商店6月1日起,強制app需要支持IPv6-only的網(wǎng)絡忿等。

iOS IPv6最新升級攻略:

1栖忠,官方Reachability

https://developer.apple.com/library/ios/samplecode/Reachability/History/History.html#//apple_ref/doc/uid/DTS40007324-RevisionHistory-DontLinkElementID_1

2,微信SDK

iOS平臺微信SDK下載地址:https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/WeChatSDK1.7.zip

微信SDK已支持IPv6贸街,請iOS開發(fā)者及時升級

由于蘋果App Store政策調(diào)整庵寞,所有iOS應用必須支持IPv6。iOS平臺微信SDK最新的1.7版已支持IPv6薛匪,請開發(fā)者及時升級App中的微信SDK捐川。

微信團隊

2016年05月12日

3,微博SDK

https://github.com/sinaweibosdk/weibo_ios_sdk

關(guān)于ipv6支持的問題

由于蘋果商店6月1日起逸尖,強制app需要支持ipv6-only的網(wǎng)絡古沥。微博sdk這邊也做了支持,更新了使用的底層網(wǎng)絡代碼娇跟,包括reachability庫岩齿。

附錄:

百度百科對IPV6解釋:http://baike.baidu.com/view/5228.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苞俘,隨后出現(xiàn)的幾起案子盹沈,更是在濱河造成了極大的恐慌,老刑警劉巖吃谣,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乞封,死亡現(xiàn)場離奇詭異做裙,居然都是意外死亡,警方通過查閱死者的電腦和手機肃晚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門锚贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人关串,你說我怎么就攤上這事拧廊。” “怎么了悍缠?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵卦绣,是天一觀的道長。 經(jīng)常有香客問我飞蚓,道長滤港,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任趴拧,我火速辦了婚禮溅漾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘著榴。我一直安慰自己添履,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布脑又。 她就那樣靜靜地躺著暮胧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪问麸。 梳的紋絲不亂的頭發(fā)上往衷,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音严卖,去河邊找鬼席舍。 笑死,一個胖子當著我的面吹牛哮笆,可吹牛的內(nèi)容都是我干的来颤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼稠肘,長吁一口氣:“原來是場噩夢啊……” “哼福铅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起启具,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤本讥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鲁冯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拷沸,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年薯演,在試婚紗的時候發(fā)現(xiàn)自己被綠了撞芍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跨扮,死狀恐怖序无,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衡创,我是刑警寧澤帝嗡,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站璃氢,受9級特大地震影響哟玷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜一也,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一巢寡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椰苟,春花似錦抑月、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洁仗,卻和暖如春层皱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背京痢。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工奶甘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祭椰。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓臭家,卻偏偏與公主長得像,于是被迫代替她去往敵國和親方淤。 傳聞我的和親對象是個殘疾皇子钉赁,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • 推薦 最近很多人都在關(guān)注支持 IPv6 的事情吧你踩?我們公司也是。也有不少同行使用了我們的 YTKNetwork 網(wǎng)...
    笨笨的考拉_2閱讀 2,441評論 2 9
  • 研究IPv6 socket編程原因: Supporting IPv6 in iOS 9 WWDC2015蘋果宣布在...
    li大鵬閱讀 7,318評論 7 15
  • 由于在應用中使用了網(wǎng)絡診斷的組件,大量使用了底層的 socket API带膜,所以對于IPV6支持吩谦,這塊是個重頭戲。如...
    大碼猴閱讀 7,712評論 1 4
  • 沒想到膝藕,一堂作文課式廷,上成了批斗會。批斗對象是孩子們的爸爸媽媽芭挽。 從一件事中明白一個道理滑废,這件事情一定是難忘的記憶深...
    碎碎妖閱讀 639評論 8 17
  • 今天61,舉國同慶的日子袜爪,朋友圈生活圈各種寶寶各種曬蠕趁,如果不是中午的會議,應該是平淡而又充滿初心的一天辛馆。 “寶寶不...
    青梅酒閱讀 188評論 0 0