應(yīng)用

技術(shù)

物聯(lián)網(wǎng)世界 >> 物聯(lián)網(wǎng)新聞 >> 物聯(lián)網(wǎng)熱點新聞
企業(yè)注冊個人注冊登錄

為什么 IPv6 難以取代 IPv4

2020-05-13 08:44 真沒什么邏輯
關(guān)鍵詞:IPv6IPv4

導(dǎo)讀:工程師的想象力是無窮的,在過去的十幾年間,我們嘗試通過各種辦法為 IPv4 協(xié)議續(xù)命延緩 IP 資源耗盡的時間,不過在可預(yù)見的未來 IPv4 協(xié)議也終將被 IPv6 替代,我們也會擁有幾乎用不完的 IP 地址。

網(wǎng)絡(luò)層協(xié)議承擔(dān)了分組(Packet)轉(zhuǎn)發(fā)和路由選擇兩大功能,它能夠為上層提供在不同主機之間運輸分組的職責(zé),IP 協(xié)議作為網(wǎng)絡(luò)層協(xié)議,它雖然只能提供無連接的、不可靠的服務(wù),但是它在今天的互聯(lián)網(wǎng)中起到了極其關(guān)鍵的作用。

圖 1 - 互聯(lián)網(wǎng)協(xié)議簇

在一般情況下,當(dāng)我們想要訪問其他主機提供的服務(wù)時,都需要通過 IP 地址來訪問目標(biāo)主機,只有擁有了 IP 地址才能在互聯(lián)網(wǎng)上被其他主機訪問。IP 地址就像家庭住址,我們需要保證所有主機 IP 地址的唯一性,這樣才能找到正確的主機。

作為在 1974 年誕生的 IP 協(xié)議[^1],第一個主要版本 IPv4 使用 32 位表示地址,總共可以提供 2^32 (4,294,967,296) 個 IP 地址[^2]。42 億個 IP 地址雖然看起來很多,但是可用的 IPv4 地址數(shù)量在最近幾年一直在減少,早在 2011 年,頂級的 IPv4 地址就已經(jīng)被全部分配出去了。

圖 2 - IPv4 地址的小數(shù)表示

為了解決 IP 地址即將被耗盡的問題,IETF 在 1998 年就發(fā)布了 IPv6 協(xié)議的草稿[^4]并在 2017 年正式成為互聯(lián)網(wǎng)標(biāo)準(zhǔn)]。IPv6 使用 128 位的 IP 地址,總共可以表示 2^128 個地址,IPv6 甚至可以為地球上的沙子分配獨立的地址:

新版本的互聯(lián)網(wǎng)協(xié)議 IPv6 不僅能夠一勞永逸地解決 IP 地址即將被耗盡的問題,還能提高網(wǎng)絡(luò)的傳輸速度以及安全性。IPv6 協(xié)議的設(shè)計者最初認為隨著 IPv4 地址的快速減少,IPv6 會被快速采納,它們最初估計 IPv6 協(xié)議會在 2003 年在全球部署,但是從今天的角度來看,這些預(yù)測還是過于樂觀了[^7]。

本文想要分析的問題是,為什么 IPv6 協(xié)議有如此之多的好處并且能夠解決 IPv4 的地址短缺問題,但是哪怕在最初預(yù)估的 2003 年后又過了 17 年,IPv6 協(xié)議也沒有被大規(guī)模采納。我們在這里會討論以下幾個原因:

NAT 技術(shù)很大程度上緩解了 IPv4 地址短缺的問題;IPv6 協(xié)議在設(shè)計時沒有考慮與 IPv4 的兼容性問題;更細粒度的管控 IPv4 地址并回收閑置的資源;

NAT網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation、NAT)是一種在 IP 數(shù)據(jù)包通過路由器時修改網(wǎng)絡(luò)地址的技術(shù),它能夠?qū)?dāng)前地址空間中的 IP 地址映射到另一個地址空間。當(dāng)切換網(wǎng)絡(luò)或者上游的 ISP 出現(xiàn)改變時,NAT 技術(shù)可以避免修改網(wǎng)絡(luò)中全部節(jié)點的 IP,我們可以將 NAT 技術(shù)理解成一個轉(zhuǎn)換表,其中存儲著外部地址和端口到內(nèi)部地址和端口的轉(zhuǎn)換關(guān)系。

圖 3 - 網(wǎng)絡(luò)地址轉(zhuǎn)換技術(shù)

當(dāng)數(shù)據(jù)包從內(nèi)部訪問外部網(wǎng)絡(luò)時,NAT 會為當(dāng)前請求分配一個端口、覆寫數(shù)據(jù)包中的源地址和端口并將地址和端口信息存儲到本地的轉(zhuǎn)換表中;當(dāng)數(shù)據(jù)包從外部進入網(wǎng)絡(luò)內(nèi)部時,NAT 會根據(jù)數(shù)據(jù)包的 IP 地址和端口號查找到私有網(wǎng)絡(luò)中對應(yīng)的主機和端口號并覆寫數(shù)據(jù)包中的目的地址和端口。

圖 4 - NAT 轉(zhuǎn)換表

通過 NAT 這一中間層,我們不僅可保護私有的網(wǎng)絡(luò),還能緩解 IP 地址的短缺問題。不過 NAT 技術(shù)也并不是只有好處,它也帶來了很多的問題,在 NAT 網(wǎng)絡(luò)下的主機并不能與對端建立起真正的端到端連接,也不能參與部分因特網(wǎng)協(xié)議,除此之外,NAT 協(xié)議帶來的以下問題也備受爭議:

NAT 使用的端口號是用于進程尋址的,而不是用于主機尋址的;NAT 路由器作為第三層(網(wǎng)絡(luò)層)的設(shè)備,它應(yīng)當(dāng)只處理達到網(wǎng)絡(luò)層的分組;NAT 違反了主機應(yīng)當(dāng)直接彼此對話的原則;

雖然 NAT 帶來了很多的爭議和問題,但是 NAT 已經(jīng)成為了整個互聯(lián)網(wǎng)中廣泛使用的技術(shù),工程師也嘗試通過各種 NAT 穿越技術(shù)來解決它帶來的問題,例如:SOCKS、UPnP 和 ALG 等[^10]。

兼容性軟件和協(xié)議都會遵循當(dāng)下以及可預(yù)測的未來進行設(shè)計,但是我們很難預(yù)測未來的具體走勢,當(dāng)下的設(shè)計也會隨著場景的變換變得逐漸不適用。所有的軟件和協(xié)議都是需要更新迭代的,在更新的過程中我們就需要考慮兼容性,兼容性一般可以分成向前兼容(Forward compatibility)和向后兼容(Backward compatibility)兩種:

向前兼容:老版本系統(tǒng)可以接收并處理新版本系統(tǒng)產(chǎn)生的數(shù)據(jù);向后兼容:新版本系統(tǒng)可以接收并處理老版本系統(tǒng)產(chǎn)生的數(shù)據(jù);

圖 5 - 系統(tǒng)的兼容性

這兩種不同的兼容性可以起到不同的作用,如果 IPv6 協(xié)議與 IPv4 是向前兼容的,那么用于處理 IPv4 協(xié)議的硬件設(shè)備可以不用更新就能處理 IPv6 的數(shù)據(jù),不過不更新系統(tǒng)也無法享受 IPv6 帶來的好處;如果 IPv6 協(xié)議與 IPv4 協(xié)議是向后兼容的,那么 IPv6 的硬件可以同時處理 IPv4 和 IPv6 的數(shù)據(jù)包,只要使用 IPv6 設(shè)備替換 IPv4 設(shè)備就可以給整個網(wǎng)絡(luò)無縫升級。

如果 IPv4 和 IPv6 能夠具有向前兼容性或者向后兼容性,那么 IPv6 協(xié)議的推進也可能也沒有這么復(fù)雜,但是 IPv6 協(xié)議在設(shè)計時就沒有考慮與更早版本協(xié)議的兼容性。雖然 IPv4 和 IPv6 雖然都是 IP 協(xié)議,不過因為它們兩者互不兼容,所以我們只能通過雙協(xié)議棧、隧道技術(shù)或者 NAT64 實現(xiàn)協(xié)議的過渡:

圖 6 - 雙協(xié)議棧

IPv6 協(xié)議想要擺脫歷史的包袱,實現(xiàn)完全不兼容的設(shè)計是可以理解的,在過去幾十年應(yīng)用 IP 協(xié)議的過程中,我們遇到了很多的問題,如果要背著歷史的包袱繼續(xù)前行也不是不可以,但是作為互聯(lián)網(wǎng)的核心協(xié)議,雖然 IP 協(xié)議的設(shè)計者承認 IPv6 沒有實現(xiàn)向前兼容是最大的錯誤,但是作者認為通過不兼容的方式快速擺脫歷史的包袱從長期來看也是好事。

地址管控IPv4 的地址雖然從總體上來看確實是稀缺資源,不過與其他的稀缺資源一樣,如何合理分配資源并提供使用率一直都是比較大的問題。IANA(Internet Assigned Numbers Authority) 和 RIR(Regional Internet Registries) 是負責(zé)分配 IP 地址的組織,除了一些為專有網(wǎng)絡(luò)預(yù)留的 IP 地址之外,剩余的地址一般都是通過子網(wǎng)以地址塊的形式分配。

在互聯(lián)網(wǎng)協(xié)議的早期開發(fā)階段,子網(wǎng)是通過 IP 地址最左側(cè)的 8 位劃分子網(wǎng),但是因為這種方式只允許劃分 256 個網(wǎng)絡(luò),所以在 1981 年被分類網(wǎng)絡(luò)架構(gòu)(Classful Network Architecture)迅速替代。分類網(wǎng)絡(luò)架構(gòu)中包含 A、B 和 C 三類網(wǎng)絡(luò):

A 類地址只能分配給 128 個不同的網(wǎng)絡(luò),每個網(wǎng)絡(luò)中可以包含 1,600 萬主機,而 C 類地址可以分配給 200 萬組織,網(wǎng)絡(luò)中可以包含 200 多個主機。通過對 IP 地址的分類,我們能夠更合理地分配 IP 地址塊,不過雖然它對 IP 地址進行了分類,但是它對地址的劃分還是比較粗糙。

IETF 在 1993 年提出的無類別域間路由(Classless Inter-Domain Routing、CIDR)替代了分類網(wǎng)絡(luò)架構(gòu),CIDR 基于可變長子網(wǎng)掩碼(Variable-length Subnet Masking、VLSM),它的主要目的有兩個:

緩解互聯(lián)網(wǎng)中路由器中轉(zhuǎn)發(fā)表的增長速度;緩解 IPv4 地址耗盡的速度;

分類網(wǎng)絡(luò)架構(gòu)中對地址的劃分還是有些過于理想,過小的地址塊往往不夠用、稍大的地址塊卻會造成較大的浪費。與分類網(wǎng)絡(luò)架構(gòu)只使用 8、16 和 24 固定長度的子網(wǎng)掩碼將 IP 地址塊劃分成三類不同,CIDR 會使用可變長度的子網(wǎng)掩碼來劃分地址塊,如下所示的 CIDR 表示中,N 表示前綴長度,它可以是從 0 到 32 的任意值:

A.B.C.D/N

A.B.C.D/8、A.B.C.D/16 和 A.B.C.D/24 就可以分別表示分類網(wǎng)絡(luò)架構(gòu)中的 A、B 和 C 三類不同的地址塊,同時也可以使用其他的數(shù)字更靈活的表示特定網(wǎng)絡(luò)數(shù)和主機數(shù)的子網(wǎng)。

除了更細粒度的地址分配之外,回收不再使用的 IP 資源并投入再利用也是延長 IPv4 壽命的重要手段,不過在這里我們就不做展開了。從 IP 地址的分配中,我們能看到資源從充足到稀缺,人對于資源使用態(tài)度的轉(zhuǎn)變,從最開始粗糙的分配方式到后來細粒度的管控,充足的資源總是會被濫用,只有當(dāng)資源真正變得稀缺時,我們才開始精打細算。

總結(jié)IPv4 協(xié)議從 1981 年發(fā)布到今天已經(jīng)過去了將近 40 年,在過去的這段時間里,它作為互聯(lián)網(wǎng)協(xié)議簇中的重要協(xié)議承擔(dān)著分組轉(zhuǎn)發(fā)和路由選擇的重要責(zé)任,隨著網(wǎng)絡(luò)環(huán)境和終端設(shè)備變得越來越復(fù)雜,我們也需要更多的 IP 地址滿足今天的需求。

圖 7 - 訪問 Google 的 IPv6 協(xié)議采納率[^14]

IPv6 協(xié)議擺脫了很多歷史的包袱輕裝前行,雖然越來越多的網(wǎng)站和網(wǎng)絡(luò)設(shè)備都開始支持 IPv6,但是因為很多原因 IPv6 最終也很難完全取代 IPv4 協(xié)議,我們重新回顧一下本文的內(nèi)容:

NAT 技術(shù)可以很大程度上緩解 IPv4 的地址短缺問題并且能夠保護私有內(nèi)部的網(wǎng)絡(luò),提供防火墻的功能;IPv4 與 IPv6 協(xié)議完全不兼容,我們需要引入雙協(xié)議棧、隧道技術(shù)或者 NAT64 解決兼容性問題,而應(yīng)用這些技術(shù)也需要額外的成本;通過對資源的細粒度管控并回收不再使用的 IP 地址,可以延緩 IP 地址耗盡的時間;

工程師的想象力是無窮的,在過去的十幾年間,我們嘗試通過各種辦法為 IPv4 協(xié)議續(xù)命延緩 IP 資源耗盡的時間,不過在可預(yù)見的未來 IPv4 協(xié)議也終將被 IPv6 替代,我們也會擁有幾乎用不完的 IP 地址。到最后,我們還是來看一些比較開放的相關(guān)問題,有興趣的讀者可以仔細思考一下下面的問題:

IPv5 協(xié)議是做什么的?為什么沒有聽說過 IPv5 協(xié)議?你覺得 IPv6 協(xié)議的份額會在多久之后超過 IPv4?