由于移動互聯(lián)網(wǎng)服務(wù)商擁有的 IPv4 地址即將耗盡,他們只能給出 IPv6地址或者電信級 NATted 的 IPv4 地址,Apple 在今年五月四日宣布,從六月1日起,所有提交至 AppStore 的應(yīng)用必須支持 IPv6 協(xié)議。同時,在 Google IPv6 使用統(tǒng)計中可以看出,當(dāng)前 IPv6 的采用率已經(jīng)接近 13%。所以,使你的 App 支持 IPv6變得越來越重要,尤其是移動 App。IPv6 已經(jīng)開始出現(xiàn)在 EMail Headers、SIP、DNS 等地方,你的 App 需要能夠解析這些在 URL、頭部字段和數(shù)據(jù)中的 IPv6 地址。至少得保證 App 第一次遇到這些 128 位或者更長的字符串時不會崩潰。
App支持 IPv6 并不意味著它僅僅支持 IPv6。相當(dāng)大一部分網(wǎng)絡(luò)依然使用 IPv4 并且將持續(xù)很長一段時間,你得確保你的 App 依然支持 IPv4。同時,一些互聯(lián)網(wǎng)服務(wù)商早已耗盡 IPv4 地址,從而選擇將電信級 NATted 的 IPv4 地址分配給客戶。而有的干脆選擇僅部署 IPv6。這部分客戶連接到 IPv4 網(wǎng)絡(luò)的唯一方法是通過 6to4 隧道進(jìn)行數(shù)據(jù)傳輸,它的原理是使用 IPv6 作為 IPv4 的傳輸層?;谝陨显?,當(dāng)前最好的方式是支持雙協(xié)議棧。
在 Web 服務(wù)應(yīng)用中,常常會使用正則表達(dá)式來識別 IPv4,這些表達(dá)式遇到 IPv6 將會失效。事實(shí)上,由于 IPv6 地址有許多不同的格式,不推薦使用正則式來識別 IPv6??梢試L試使用一些開源庫來做這部分工作。另外,應(yīng)檢查一下存放 IP 地址的數(shù)據(jù)庫字段是否已經(jīng)擴(kuò)展到 128 位,確保你的應(yīng)用部署到了支持雙協(xié)議棧的操作系統(tǒng)中,確保你使用的庫也支持 IPv6,否則可能出現(xiàn)不必要的錯誤??偠灾八猩婕?IP 的地方都需要檢查以確保其能夠支持 IPv6。
移動 App 經(jīng)常使用 RESTful URL 與 服務(wù)端 App 進(jìn)行通信,而服務(wù)端 App 可能使用 URL 與 LDAP 服務(wù)數(shù)據(jù)庫或其他 RESTful 服務(wù)通信。由于 IPv6 地址以 ":" 為分隔符,而 host和端口也是同樣的分隔符,所以在 URLs 中使用 IPv6 需要使用方括號加以區(qū)分:https://[2111:500:4:13::128]:443/。
在 IPv4 網(wǎng)絡(luò)中,DNS 記錄可以將域名翻譯成 IPv4 地址,這個地址稱之為 A 記錄。同樣在 IPv6 網(wǎng)絡(luò)中,返回的 IPv6 地址的長度是 IPv4 地址的四倍,稱之為 AAAA 記錄。在進(jìn)行 DNS 查詢時,一個單獨(dú)的域名可以同時擁有一個 A 記錄和一個 AAAA 記錄,所以域名可以被翻譯為一個 IPv4 地址和一個 IPv6 地址。如果你同時獲得了一個 A 記錄和一個 AAAA 記錄,你需要同時使用兩個地址進(jìn)行訪問,并選取訪問速度更快的那個地址。另外,當(dāng)一些網(wǎng)絡(luò)服務(wù)使用 IPv6 時,IP 地理位置系統(tǒng)需要及時更新其數(shù)據(jù)庫。
當(dāng)一些客戶端程序使用 IP socket 進(jìn)行跨進(jìn)程通信和一些服務(wù)端程序訪問同一個主機(jī)中的其他服務(wù)時,就要使用到被稱為環(huán)回地址的 IP 地址,通常是 localhost。在 IPv4 中,localhost 可以為 127.0.0.0 至 127.255.255.255 之間的任意地址。而在 IPv6中,有且僅有一個環(huán)回地址 ::1。所以最好使用 localhost 當(dāng)做環(huán)回地址而不是特定的 IP 地址。
測試,當(dāng)一切條件完備以后,還需要一些測試。如果你是公共網(wǎng)站,可以使用類似于 internet.nl 的開放工具進(jìn)行 IPv6 訪問測試。