早上一覺醒來填具,打開qq就看到郵箱收到一條來自蘋果的郵件统舀,趕緊打開看下,心情頓時不好了劳景,睡意全無誉简。趕緊打開電腦看下什么原因,哎呀我的媽呀盟广,IPv6闷串。。筋量。烹吵。。桨武。
既然出現(xiàn)這樣的問題肋拔,當然需要一個個排除了。
IPv6-Only支持
IPV6玻募,是對IPV4地址空間的擴充只损。目前當我們用iOS設(shè)備連接上Wifi、4G七咧、3G等網(wǎng)絡(luò)時跃惫,設(shè)備被分配的地址均是IPV4地址,但是隨著運營商和企業(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合成一個IPV6的地址扣猫,最終將一個IPV6的地址返回給客戶端菜循。如圖所示:
部分公司為了從IPv4過渡到IPv6,一般使用過渡工作流程申尤,如圖:
分析開來癌幕,從兩個方面入手衙耕。本地代碼和服務(wù)器,首先檢驗下本地是不是可以在IPv6地址下運行勺远。
首先獲得一個IPv6類型的IP:
使用手機連接Mac共享出來的IPv6的Wi-Fi:
手機連上這個Wi-Fi后橙喘,查看地址是不是下圖所示的。詳細請參考:http://www.reibang.com/p/69ed4489762c
如果可以正常運行胶逢,那就恭喜你厅瞎,你寫的代碼支持IPv6。說明一點宪塔,如果你的應(yīng)用中使用了socket磁奖,也要使用對應(yīng)的適配方法(適配IPv6遇到的坑,終極解決方案)。
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
如果用到了下面左邊的這些IPv4的類型某筐,那么它們相應(yīng)的IPv6類型也需要做處理
這只是說明應(yīng)用使用IPv6正常比搭,并不能說明服務(wù)器對IPv6的請求做出正確的響應(yīng)。那么我們就需要驗證下在蘋果IPv6的地址下的請求南誊,蘋果沒有要求服務(wù)器支持IPv6身诺,但服務(wù)器必須能夠正確響應(yīng)來自IPv6的的請求。
使用下面的命令來驗證:
$ dig +nocmd +nostats example.com AAAA
如果status返回的是NOERROR抄囚,那就基本上沒有問題了霉赡,但一定要在多個網(wǎng)絡(luò)環(huán)境下測試通過。如果返回其他的幔托,那就說明服務(wù)器那邊有問題了穴亏,就得找后臺、運維了重挑。
還有一點非常重要嗓化,應(yīng)用不能用不一定就是這個問題,有可能是蘋果那邊網(wǎng)速慢谬哀,導(dǎo)致一直不能響應(yīng)刺覆。一定要在弱網(wǎng)的情況下測試(iOS模擬弱網(wǎng)測試)。
update by 20170510
如果應(yīng)用請求過慢/過多導(dǎo)致很長時間沒有相應(yīng)史煎,那么很有可能會被誤認為是沒有適配IPv6