天天看點

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

WWDC2015蘋果宣布在ios9支援純IPv6的網絡服務,并且要求2016年送出到app store的應用必須相容純IPv6的網絡,要求适配的系統版本是ios9以上(包括ios9)。

IPv6是Internet Protocol Version 6的縮寫,簡單的概括IPv6就是現行的網際網路協定(IPV4)的下一代IP協定。IPv6由128位二進制數組成,可提供龐大的IP位址資源,足以讓地球上每個生物乃至每厘米都能被配置設定到一個或多個IP位址。将這128位的位址按每16位劃分為一個段,将每個段轉換成十六進制數字,并用冒号隔開。

IPv4位址示例:192.168.191.1

IPv6位址示例:2001:0db8:85a3:08d3:1319:8a2e:0370:7344

目前網際網路廣泛應用的IPv4技術,理論上IPv4是一個32位的二進制數的位址,可編址1600萬個網絡、40億台主機。但在采用了A、B、C三類編址方式後,可用的網絡位址和主機位址數目大打折扣,歐美資本主義列強掌握着核心技術,留給我國的就更少了。

要想使應用完全支援IPV6的環境要做的太多了,從協定到硬體,要做一次徹底的大調整。不但用戶端要做ipv6的改造,伺服器也要适配ipv6.主要有一下四種對應關系,必須做好以下每一種。

要做到IPv6和IPv4完全相容需要做很大的修改,最簡單的協定上要相容128位的IP位址,路由器,伺服器等相關硬體也要更新。應蘋果公司的要求,本次改造我們隻關注用戶端從IPv6的網絡環境通路IPv4的資源。那麼問題來了,現在我們大部分背景伺服器都是使用IPv4接入的,我們要如何做相容?幸好,從一開始設計IPv6就考慮到了向後相容的問題,營運商會提供一個中間節點,使用DNS64/NAT64等技術,負責協定的轉換,打通IPv6和IPv4之間的鍊路。(IPv6和IPv4 互通技術有很多,這裡隻讨論apple要求的技術方案DNS64/NAT64) 我們要走的伺服器必須支援nat/nat64的環境,搭建的wifi環境本來就支援了,我們不改上層的,隻改底層的是影響最小。

NAT64是一種有狀态的網絡位址與協定轉換技術,一般隻支援通過IPv6網絡側使用者發起連接配接通路IPv4側網絡資源。但NAT64也支援通過手工配置靜态映射關系,實作IPv4網絡主動發起連接配接通路IPv6網絡。NAT64可實作TCP、UDP、ICMP協定下的IPv6與IPv4網絡位址和協定轉換。

DNS64則主要是配合NAT64工作,主要是将DNS查詢資訊中的A記錄(IPv4位址)合成到AAAA記錄(IPv6位址)中,傳回合成的AAAA記錄使用者給IPv6側使用者。DNS64也解決了NAT-PT中的DNS-ALG存在的缺陷。NAT64一般與DNS64協同工作,而不需要在IPv6用戶端或IPv4伺服器端做任何修改。NAT64解決了NAT-PT中的大部分缺陷,同時配合DNS64的協同工作,無需像NAT-PT中的DNS-ALG等。

這裡大概描述一下NAT64的工作流程。

(1)IPv6主機發起www.ipv6bbs.cn的AAAA域名解析到DNS64(主機配置的DNS位址是DNS64)

(2)DNS64觸發AAAA到DNS AAAA中查詢;

(3)DNS AAAA傳回NULL的資訊到DNS64;

(4)DNS64然後觸發A的申請到DNS A中查詢;

(5)DNS A傳回www.ipv6bbs.cn的A記錄(11.111.11.11);

(6)DNS64合成IPv6位址(64:ff9b: 11.111.11.11),傳回AAAA response給IPv6主機;

(7)IPv6主機發起目的位址為64:ff9b: 11.111.11.11的IPv6資料包;由于NAT64在IPv6域内通告配置的IPv6 Prefix,是以這個資料包轉發到NAT64裝置上;

(8)NAT64執行位址轉換和協定轉換,目的位址轉換為192.0.2.1,源位址根據位址狀态轉換(64:ff9b: 11.111.11.11,1500)->( 11.111.11.11,2000);在IPv4域内路由到IPv4 server;

(9)資料包傳回,目的位址和端口為11.111.11.11,2000;

(10)NAT64根據已有記錄進行轉換,目的位址轉換為2001:db8::1,源位址為加了IPv6字首的IPv4 server位址64:ff9b: 11.111.11.11,發送到IPv6主機;

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

按照NAT64的規則,用戶端如果沒有做DNS域名解析的話(微信依賴的是自己實作的NEWDNS),用戶端就需要完成DNS64的工作。這裡的關鍵點是,發現網絡是IPv6-only的NAT64網絡的情況下,我們可以自己補充上字首64:ff9b::/96,然後進行正常的通路。然而這裡用戶端能擷取的資訊量一般都是很有限的。

注:AAAA記錄(AAAA record)是用來将域名解析到IPv6位址的DNS記錄。使用者可以将一個域名解析到IPv6位址上,也可以将子域名解析到IPv6位址上。

Xplaform改造的要點主要有一下4個:

a.換用相容IPv4及IPv6的API,例如:getaddrinfo,yaoli同學在測試過程中發現,ios9系統在IPv6-only的環境下,傳回會的位址資訊結構體中port為0,是以這裡需要重新指派端口号再進行聯網。

b.判斷目前用戶端是處于IPv4-only、IPv6-only還是IPv4和IPv6并存的環境,然後分别使用不同的網絡API,可以參考IPv6 socket 程式設計。

c.SCNetworkReachabilityCreateWithAddress這個方法最好使用探測域名的方式。如果參數填的是0.0.0.0,蘋果文檔說明這傳回的結果不保證能真正出外網。這樣就需要其它輔助的手段嘗試是否能出外網了。

d.使用socket及connect進行的聯網操作。

背景不用改,那用戶端要改如何相容。我們可以先用蘋果給的測試工具,簡單測試。整體原理如下:

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

其中,在用戶端的改造叫做Xplaform,需要連接配接mac機建立的NAT64/DNS64的wifi,就是傳說中的IPV6的網絡環境,再通過有線網絡,路由器,通路到IPv4的資源。就做到IPv6→IPv4的連接配接。

下面講解一下IPv6wifi網絡環境的搭建。

(1)工具/準備

體驗網有線接口、iMAC(10.11以上的系統)和iOS9(包括iOS9)以上裝置

(2)步驟

接好體驗網的網線,然後打開系統設定找到Sharing圖示,如下:

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

點選進入,然後按住option按鍵同時用滑鼠點選下圖的“internet-Sharing”。

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

這時可以看到下方出現了“Create NAT64 Network”可選菜單,把這個選上,如下圖:

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

之後用手機連上這個共享的wifi熱點,測試對應的網絡功能即可。

測試重點:

1、 IPV4和IPV6網絡環境判斷是否正确

2、 UDP和TCP的切換是否正确

3、 資料線和音視訊的基本功能

【bug描述】移動4G下無法傳檔案。

在移動網絡下無法檢視電腦和進入wifiphoto,傳檔案,問題出現的初期我們馬上切換到wifi下,發現wifi下是可以的,把sim卡換成聯通的,也可以。唯獨移動的網絡下無法傳檔案。初步斷定是對網絡的相容性問題。

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

【問題排查】

1、 檢視socket日志,發現在connection一直失敗。在建立連接配接階段一直失敗。我們做該需求的目的在于要增加IPV6的用戶端能通過IPV6的網絡通路到IPV4的資源。是以,在做IPV6的改造中我們做了一個判斷邏輯,判斷目前網絡環境是IPV4 or IPV6。

2、加日志驗證,我們把socket綁定的ip位址類型打出來,果然:

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

在移動資料網絡下走了ipv6的通道。可是各大營運商的網絡應該走的是ipv4才對。

3、review代碼。問題就很明顯了,我們梳理了一下選擇ipv6或者ipv4協定棧的判斷邏輯,原來開發判斷到網關是IPv6的網關之後就不再往下判斷,直接建立連接配接。然而,我們連接配接上4G網絡環境的時候,移動基站分發的網關是一個ipv6形式網關,它可以相容ipv6和ipv4兩種ip(開發同學認為是移動公司相容ipv6的政策,看來移動公司已經走在我們前面了)。

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

【解決辦法】

我們更改了IPv6和IPv4協定棧的判斷邏輯:

1、探測環境

我們的探測環境的方法是:先建立一個ipv6的socket去連ipv6的位址,如果目前網絡不是ipv6的環境,傳回路由不可達。關鍵點,因為tcp是異步的需要三次握手,是以我們使用udp來完成這個過程。

2、繼續判斷網關文法是否是IPv6格式,

3、最後擷取DNS位址,以上都符合IPv6的文法,即為IPv6的網絡,建立socket走IPv6.

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

4、如果目前網絡是IPv6的環境,我們就對IP進行相容性改造IPv6 = 64:ff9b::/96+IPv4。再通過改造後的IP位址建立socket連接配接。

5、如果IPv6和IPv4都可以走通,我們優先建立IPv4的連接配接。

【結果檢查】

列印出建立連接配接的日志:

如何應對蘋果 app 的 ipv6 時代?騰訊專家教您進行環境改造

從日志可以看出,手機連接配接4G之後得到的是IPv4的位址和IPv6格式的網關。

建立socket時,IPv6失敗,走IPv4的網。

【經驗總結】

邏輯和場景是測試的兩個緯度,二者都要兼顧到。

【騰訊WeTest iOS預審工具】

為了提高IEG蘋果稽核通過率,騰訊專門成立了蘋果稽核測試團隊,打造出iOS預審工具這款産品。經過1年半的内部營運,騰訊内部應用的iOS稽核通過率從平均35%提升到90%+

現将騰訊内部産品的過審經驗,以線上工具的形式共享給各位。在WeTest騰訊品質開放平台上可以線上使用。

點選騰訊 WeTest IOS預審即可立即體驗!

如果使用當中有任何疑問,歡迎聯系騰訊WeTest企業QQ:800024531

iOS預審工具分四步進行預審服務

【一鍵掃描】隻需提供ipa包、稽核圖檔、稽核視訊、應用描述,即可在4小時内拿到一份完整的檢測報告,定位問題的同時提供解決方案,助您成功通過稽核。

【案例分享】集結iOS稽核失敗常見原因,豐富案例為您提供參考依據。

【專家服務】騰訊專家團隊為您分析各種疑難雜症,提出最優解決方案。

【ASO優化】專業優化AppStore内關鍵字搜尋結果,讓産品離使用者更近一步。希望App/手遊在預審驗收保證下,都可以快快樂樂過審,開開心心賺錢。