硬核科普:爲什麼 IPv6 難以取代 IPv4

公衆號關注 “GitHubDaily”

設爲 “星標”,每天教你學編程!

網絡層協議承擔了分組(Packet)轉發和路由選擇兩大功能,它能夠爲上層提供在不同主機之間運輸分組的職責,IP 協議作爲網絡層協議,它雖然只能提供無連接的、不可靠的服務,但是它在今天的互聯網中起到了極其關鍵的作用。

圖 1 - 互聯網協議簇

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

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

圖 2 - IPv4 地址的小數表示

爲了解決 IP 地址即將被耗盡的問題,IETF 在 1998 年就發佈了 IPv6 協議的草稿 [^4] 並在 2017 年正式成爲互聯網標準 [^5]。IPv6 使用 128 位的 IP 地址,總共可以表示 2^128 個地址,IPv6 甚至可以爲地球上的沙子分配獨立的地址 [^6]:

新版本的互聯網協議 IPv6 不僅能夠一勞永逸地解決 IP 地址即將被耗盡的問題,還能提高網絡的傳輸速度以及安全性。IPv6 協議的設計者最初認爲隨着 IPv4 地址的快速減少,IPv6 會被快速採納,它們最初估計 IPv6 協議會在 2003 年在全球部署,但是從今天的角度來看,這些預測還是過於樂觀了 [^7]。

本文想要分析的問題是,爲什麼 IPv6 協議有如此之多的好處並且能夠解決 IPv4 的地址短缺問題,但是哪怕在最初預估的 2003 年後又過了 17 年,IPv6 協議也沒有被大規模採納。我們在這裏會討論以下幾個原因:

  • NAT 技術很大程度上緩解了 IPv4 地址短缺的問題;

  • IPv6 協議在設計時沒有考慮與 IPv4 的兼容性問題;

  • 更細粒度的管控 IPv4 地址並回收閒置的資源;

NAT

網絡地址轉換(Network Address Translation、NAT)是一種在 IP 數據包通過路由器時修改網絡地址的技術,它能夠將當前地址空間中的 IP 地址映射到另一個地址空間。當切換網絡或者上游的 ISP 出現改變時,NAT 技術可以避免修改網絡中全部節點的 IP,我們可以將 NAT 技術理解成一個轉換表,其中存儲着外部地址和端口到內部地址和端口的轉換關係。

圖 3 - 網絡地址轉換技術

當數據包從內部訪問外部網絡時,NAT 會爲當前請求分配一個端口、覆寫數據包中的源地址和端口並將地址和端口信息存儲到本地的轉換表中;當數據包從外部進入網絡內部時,NAT 會根據數據包的 IP 地址和端口號查找到私有網絡中對應的主機和端口號並覆寫數據包中的目的地址和端口。

圖 4 - NAT 轉換表

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

  1. NAT 使用的端口號是用於進程尋址的,而不是用於主機尋址的;

  2. NAT 路由器作爲第三層(網絡層)的設備,它應當只處理達到網絡層的分組;

  3. NAT 違反了主機應當直接彼此對話的原則;

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

兼容性

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

  • 向前兼容:老版本系統可以接收並處理新版本系統產生的數據;

  • 向後兼容:新版本系統可以接收並處理老版本系統產生的數據;

圖 5 - 系統的兼容性

這兩種不同的兼容性可以起到不同的作用,如果 IPv6 協議與 IPv4 是向前兼容的,那麼用於處理 IPv4 協議的硬件設備可以不用更新就能處理 IPv6 的數據,不過不更新系統也無法享受 IPv6 帶來的好處;如果 IPv6 協議與 IPv4 協議是向後兼容的,那麼 IPv6 的硬件可以同時處理 IPv4 和 IPv6 的數據包,只要使用 IPv6 設備替換 IPv4 設備就可以給整個網絡無縫升級。

如果 IPv4 和 IPv6 能夠具有向前兼容性或者向後兼容性,那麼 IPv6 協議的推進也可能也沒有這麼複雜,但是 IPv6 協議在設計時就沒有考慮與更早版本協議的兼容性。雖然 IPv4 和 IPv6 雖然都是 IP 協議,不過因爲它們兩者互不兼容,所以我們只能通過雙協議棧、隧道技術或者 NAT64 實現協議的過渡:

圖 6 - 雙協議棧

IPv6 協議想要擺脫歷史的包袱,實現完全不兼容的設計是可以理解的,在過去幾十年應用 IP 協議的過程中,我們遇到了很多的問題,如果要揹着歷史的包袱繼續前行也不是不可以,但是作爲互聯網的核心協議,雖然 IP 協議的設計者承認 IPv6 沒有實現向前兼容是最大的錯誤 [^11],但是作者認爲通過不兼容的方式快速擺脫歷史的包袱從長期來看也是好事。

地址管控

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

在互聯網協議的早期開發階段,子網是通過 IP 地址最左側的 8 位劃分子網,但是因爲這種方式只允許劃分 256 個網絡,所以在 1981 年被分類網絡架構(Classful Network Architecture)迅速替代。分類網絡架構中包含 A、B 和 C 三類網絡 [^12]:

Class

網絡數

主機數




A

128

16,777,214

B

16,384

65,534

C

2,097,152

254

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

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

  1. 緩解互聯網中路由器中轉發表的增長速度;

  2. 緩解 IPv4 地址耗盡的速度;

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

A.B.C.D/N

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

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

總結

IPv4 協議從 1981 年發佈到今天已經過去了將近 40 年,在過去的這段時間裏,它作爲互聯網協議簇中的重要協議承擔着分組轉發和路由選擇的重要責任,隨着網絡環境和終端設備變得越來越複雜,我們也需要更多的 IP 地址滿足今天的需求。

圖 7 - 訪問 Google 的 IPv6 協議採納率 [^14]

IPv6 協議擺脫了很多歷史的包袱輕裝前行,雖然越來越多的網站和網絡設備都開始支持 IPv6,但是因爲很多原因 IPv6 最終也很難完全取代 IPv4 協議,我們重新回顧一下本文的內容:

  • NAT 技術可以很大程度上緩解 IPv4 的地址短缺問題並且能夠保護私有內部的網絡,提供防火牆的功能;

  • IPv4 與 IPv6 協議完全不兼容,我們需要引入雙協議棧、隧道技術或者 NAT64 解決兼容性問題,而應用這些技術也需要額外的成本;

  • 通過對資源的細粒度管控並回收不再使用的 IP 地址,可以延緩 IP 地址耗盡的時間;

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

  • IPv5 協議是做什麼的?爲什麼沒有聽說過 IPv5 協議?

  • 你覺得 IPv6 協議的份額會在多久之後超過 IPv4?

---

由 GitHubDaily 原班人馬打造的公衆號:GitCube,現已正式上線!
接下來我們將會在該公衆號上,爲大家分享優質的計算機學習資源與開發者工具,堅持每天一篇原創文章的輸出,感興趣的小夥伴可以關注一下哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章