<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么 IPv6 難以取代 IPv4

          共 4559字,需瀏覽 10分鐘

           ·

          2020-07-31 18:22


          為什么這么設(shè)計(jì)(Why’s THE Design)是一系列關(guān)于計(jì)算機(jī)領(lǐng)域中程序設(shè)計(jì)決策的文章,我們?cè)谶@個(gè)系列的每一篇文章中都會(huì)提出一個(gè)具體的問(wèn)題并從不同的角度討論這種設(shè)計(jì)的優(yōu)缺點(diǎn)、對(duì)具體實(shí)現(xiàn)造成的影響。如果你有想要了解的問(wèn)題,可以在文章下面留言。

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

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

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

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

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

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

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

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

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

          NAT

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

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

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

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

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

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

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

          兼容性

          軟件和協(xié)議都會(huì)遵循當(dāng)下以及可預(yù)測(cè)的未來(lái)進(jìn)行設(shè)計(jì),但是我們很難預(yù)測(cè)未來(lái)的具體走勢(shì),當(dāng)下的設(shè)計(jì)也會(huì)隨著場(chǎng)景的變換變得逐漸不適用。所有的軟件和協(xié)議都是需要更新迭代的,在更新的過(guò)程中我們就需要考慮兼容性,兼容性一般可以分成向前兼容(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ù),不過(guò)不更新系統(tǒng)也無(wú)法享受 IPv6 帶來(lái)的好處;如果 IPv6 協(xié)議與 IPv4 協(xié)議是向后兼容的,那么 IPv6 的硬件可以同時(shí)處理 IPv4 和 IPv6 的數(shù)據(jù)包,只要使用 IPv6 設(shè)備替換 IPv4 設(shè)備就可以給整個(gè)網(wǎng)絡(luò)無(wú)縫升級(jí)。

          如果 IPv4 和 IPv6 能夠具有向前兼容性或者向后兼容性,那么 IPv6 協(xié)議的推進(jìn)也可能也沒(méi)有這么復(fù)雜,但是 IPv6 協(xié)議在設(shè)計(jì)時(shí)就沒(méi)有考慮與更早版本協(xié)議的兼容性。雖然 IPv4 和 IPv6 雖然都是 IP 協(xié)議,不過(guò)因?yàn)樗鼈儍烧呋ゲ患嫒荩晕覀冎荒芡ㄟ^(guò)雙協(xié)議棧、隧道技術(shù)或者 NAT64 實(shí)現(xiàn)協(xié)議的過(guò)渡:

          圖 6 - 雙協(xié)議棧

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

          地址管控

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

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

          Class網(wǎng)絡(luò)數(shù)主機(jī)數(shù)
          A12816,777,214
          B16,38465,534
          C2,097,152254

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

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

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

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

          A.B.C.D/N

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

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

          總結(jié)

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

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

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

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

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

          • IPv5 協(xié)議是做什么的?為什么沒(méi)有聽(tīng)說(shuō)過(guò) IPv5 協(xié)議?
          • 你覺(jué)得 IPv6 協(xié)議的份額會(huì)在多久之后超過(guò) IPv4?

          如果對(duì)文章中的內(nèi)容有疑問(wèn)或者想要了解更多軟件工程上一些設(shè)計(jì)決策背后的原因,可以在博客下面留言,作者會(huì)及時(shí)回復(fù)本文相關(guān)的疑問(wèn)并選擇其中合適的主題作為后續(xù)的內(nèi)容。




          推薦閱讀



          學(xué)習(xí)交流 Go 語(yǔ)言,掃碼回復(fù)「進(jìn)群」即可


          站長(zhǎng) polarisxu

          自己的原創(chuàng)文章

          不限于 Go 技術(shù)

          職場(chǎng)和創(chuàng)業(yè)經(jīng)驗(yàn)


          Go語(yǔ)言中文網(wǎng)

          每天為你

          分享 Go 知識(shí)

          Go愛(ài)好者值得關(guān)注


          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久成人电影院 | 偷拍黄色小视频 | 男人AV的天堂 | 91豆花成人 | 亚洲一区无码 |