[點(diǎn)晴永久免費(fèi)OA]IPv4 地址耗盡,為啥 IPv6 還是沒人用?
IPv6 作為全球公認(rèn)的下一代互聯(lián)網(wǎng)商業(yè)應(yīng)用解決方案,為解決 IPv4 地址枯竭而制定的下一代互聯(lián)網(wǎng)協(xié)議版本。 今年年初,因 IPv4 將耗盡,巨頭企業(yè)宣布收費(fèi)后,IT行業(yè)內(nèi)對 IPv6 的發(fā)展尤為關(guān)注,網(wǎng)絡(luò)工程師們也不例外。 雖然知道 IPv6 有二十多年,但一直以來對它的理解僅停留在“為了解決 IPv4 地址空間不足而設(shè)計(jì)的一個(gè)過度工程化的解決方案”。 最近,Sedat Kapanoglu深入研究了 IPv6 的工作原理,發(fā)現(xiàn)其中有不少有趣的知識可以和你分享。 今天就來嘮嘮,不知道你對IPv6怎么看? 我一直對IPv6這個(gè)名字感到困惑,因?yàn)槲矣X得IPv4名字來源于它用來表示32位的四個(gè)字節(jié),所以IPv6應(yīng)該被稱為IP16。 但實(shí)際上,這只是協(xié)議的版本號。 在IPv4推出之前,曾存在過IPv1、IPv2和IPv3,它們主要用于內(nèi)部研究IP協(xié)議,后來被我們現(xiàn)在的IPv4所取代。 在上世紀(jì)80年代,還提出過IPv5的提案,旨在優(yōu)化實(shí)時(shí)通信,但大家發(fā)現(xiàn)IPv6能解決地址空間問題后,該提案就被放棄了,因此才有了IPv6這個(gè)名字,代表互聯(lián)網(wǎng)協(xié)議第6版。 后來有人嘗試創(chuàng)建IPv7、IPv8等更高版本,但它們要么已被廢棄,要么被擱置起來。 和IPv4一樣,IPv6有自身的尋址方案,但它使用的是128位地址而非IPv4的32位地址。 這兩種協(xié)議之間的差異不僅體現(xiàn)在地址空間大小上,而且與IPv4對比,IPv6有其獨(dú)特特性,比如: 01 IPv6沒有子網(wǎng)掩碼 IPv6和IPv4同樣支持CIDR(無類別域間路由),但從用戶角度看,IPv6地址要簡單得多:前半部分是全球互聯(lián)網(wǎng)地址,后半部分是本地地址。這是推薦的IPv6地址使用方式。當(dāng)你訪問某個(gè)顯示IP地址的網(wǎng)站如WhatismyipWhatever時(shí),它會顯示出你的IPv6地址形式如下: 1111:2222:3333:4444:5555:6666:7777:8888 但是,你的互聯(lián)網(wǎng)服務(wù)提供商(ISP)只知道你的前綴部分為1111:2222:3333:4444,并將這個(gè)/64的地址塊分配給你。地址的剩余部分對你的網(wǎng)絡(luò)中的每一臺設(shè)備都是獨(dú)一無二的。ISP只會將所有以1111:2222:3333:4444開頭的數(shù)據(jù)包轉(zhuǎn)發(fā)至你的路由器,然后路由器會將數(shù)據(jù)包進(jìn)一步傳遞到目標(biāo)設(shè)備。因此,地址的后半部分(5555:6666:7777:8888),我們可以稱之為INTERFACE_ID,這部分對于你的設(shè)備來說是唯一的。這就意味著你擁有的每一臺設(shè)備都擁有一個(gè)獨(dú)特的IPv6地址,可以從世界任何地方單獨(dú)訪問,原因在于: 02 IPv6 不使用 NAT 技術(shù) 實(shí)際上,針對 IPv6 的 NAT(Network Address Translation,是指網(wǎng)絡(luò)地址轉(zhuǎn)換) 并不存在公開的標(biāo)準(zhǔn)規(guī)范。雖然有一個(gè)名為 NAT66 的草案提議,但至今并未轉(zhuǎn)化為現(xiàn)實(shí)標(biāo)準(zhǔn)。 之所以在 IPv6 中不需要 NAT,是因?yàn)槔碚撋系厍虻拿總€(gè)設(shè)備都可以有一個(gè)獨(dú)立的全球可訪問的地址。 開始我對此感到很奇怪,因?yàn)樵谕婢W(wǎng)絡(luò)游戲時(shí)雖然我們常常痛恨 NAT 導(dǎo)致的種種不便,但它卻給人一種安全感,除非你明確通過 UPnP 或端口轉(zhuǎn)發(fā)允許,否則你的本地設(shè)備永遠(yuǎn)不會被外部網(wǎng)絡(luò)直接訪問。 有一個(gè)殘酷的事實(shí)是,NAT 并不是一道安全屏障,它只是一個(gè)替代的數(shù)據(jù)包轉(zhuǎn)發(fā)機(jī)制。 在默認(rèn)情況下,你的IPv6路由器本不應(yīng)隨意將來自外部的連接嘗試轉(zhuǎn)發(fā)給本地設(shè)備。 因此,在 IPv6 環(huán)境下,即便不使用 NAT,你也同樣可以獲得相同級別的安全保障。 實(shí)際上,借助IPv6地址,你無需經(jīng)過路由器,或者不必另行配置VPN,就能直接訪問本地網(wǎng)絡(luò)上的每一臺設(shè)備:只需要進(jìn)行身份驗(yàn)證即可。 盡管IPv6為每臺設(shè)備分配獨(dú)立的IPv6地址帶來了便利,但也存在一個(gè)與安全相關(guān)的問題:由于每個(gè)設(shè)備都有獨(dú)一無二的地址,因此它們可以被個(gè)別識別和跟蹤,這對我們的隱私保護(hù)構(gòu)成威脅。 為此,現(xiàn)代操作系統(tǒng)引入了臨時(shí)IPv6地址的概念,該地址的INTERFACE_ID會定期變化。 這樣一來,你可以使用永久IPv6地址接收外部的連接請求,而在建立連接時(shí),對外展示的是一個(gè)頻繁變動的二級臨時(shí)地址作為你的IPv6地址。 03 IPv6地址具備自動配置功能 IPv6協(xié)議無需依賴DHCP(Dynamic Host Configuration Protocol,動態(tài)主機(jī)設(shè)置協(xié)議)服務(wù)器或手動網(wǎng)絡(luò)配置來確定IP地址、子網(wǎng)掩碼及網(wǎng)關(guān)地址。一臺設(shè)備可以不通過詢問中央服務(wù)器而自主獲取IP地址。 這一過程是通過一個(gè)名為SLAAC(Stateless Address Autoconfiguration,無狀態(tài)地址自動配置)的協(xié)議實(shí)現(xiàn)的,具體步驟如下:
如此一來,無狀態(tài)配置的優(yōu)勢在于減少了路由器上的管理開銷:路由器無需單獨(dú)維護(hù)網(wǎng)絡(luò)中每個(gè)設(shè)備的IP配置信息。 意味著這將可以帶來更好的性能表現(xiàn),特別是在大型網(wǎng)絡(luò)中尤為明顯。 IPv6也有一些夸大的說法,我們一起梳理澄清下: 01 你設(shè)備只有一個(gè)IPv6地址,可用于在所有地方 確實(shí),你會使用同一個(gè)IPv6地址進(jìn)行本地和遠(yuǎn)程連接。但是,“一統(tǒng)天下之IP地址,尋遍萬物之IP地址”的說法并不準(zhǔn)確。 正如我之前所提到的,你的設(shè)備會為了不同范圍的目的聲明多個(gè)IPv6地址,比如鏈路本地(fe80::)和互聯(lián)網(wǎng)。 此外,你的設(shè)備也可能獲得兩個(gè)不同的公網(wǎng)IPv6地址:永久地址和臨時(shí)地址。 臨時(shí)IPv6地址旨在保護(hù)你的隱私,它們會定期輪換。而永久IPv6地址主要用于必須具有靜態(tài)IPv6地址的服務(wù)器。 02 為宇宙中每個(gè)原子分配一個(gè)IP地址 還遠(yuǎn)遠(yuǎn)不夠的。宇宙中大約有2²⁷²個(gè)原子,地球約有2¹⁶⁶個(gè)原子,所以我們至少需要168位(八位對齊)的地址空間來容納它們。 實(shí)際上,IPv6的地址空間略小于128位:前16位是IANA預(yù)留的。 因此,你只能用剩下的112位來標(biāo)識設(shè)備。盡管這非常多,遠(yuǎn)超過我們在未來幾千年里地球上可能制造的所有設(shè)備的數(shù)量,但并不能為每一個(gè)原子分配一個(gè)獨(dú)立的IP地址。 然而,我們可以為地球上的每一粒沙子分配IPv6地址,甚至我們還可以將這些地址全部裝進(jìn)一個(gè)單一的/64前綴內(nèi)??傊?,IPv6地址空間是極其龐大的。 03 每個(gè)設(shè)備的通用連接 沒錯(cuò),IPv6沒有NAT機(jī)制,這意味著不再需要端口轉(zhuǎn)發(fā)或維護(hù)地址空間。但是,如果你想建立直接連接,仍然需要有一種機(jī)制允許遠(yuǎn)程主機(jī)連接到你的設(shè)備。 默認(rèn)情況下,你的路由器/防火墻會阻止任何連接嘗試。 你會怎么做呢? 就像UPnP/IGD時(shí)代一樣,今天的應(yīng)用程序仍然需要與PCP(端口控制協(xié)議)這類協(xié)議配合工作,才能以編程方式打開端口訪問權(quán)限。 所以,并不是說你突然間就能憑借全局+本地IPv6地址實(shí)現(xiàn)通用連接。雖然你不必手動設(shè)置端口轉(zhuǎn)發(fā),但應(yīng)用程序仍需與路由器協(xié)作才能使自身變得可訪問。 從我看來,在某些情況下,IPv6的表現(xiàn)甚至不如IPv4。 在IPv4環(huán)境下,我們習(xí)以為常的一些功能,當(dāng)過渡到IPv6后可能會讓你懷念,例如: 01 依賴ISP提供子網(wǎng)劃分服務(wù) 由于IPv6不采用NAT技術(shù),許多美國ISP默認(rèn)只向你的路由器轉(zhuǎn)發(fā)一個(gè)64位前綴(通常稱為“/64”)。 這意味著路由器無法在IPv6地址中嵌入子網(wǎng)信息。 要知道,IPv6地址是由設(shè)備自動配置的,因此路由器無法強(qiáng)制這些設(shè)備使用小于64位的本地地址,這讓路由器無法知道應(yīng)該將數(shù)據(jù)包轉(zhuǎn)發(fā)到哪個(gè)子網(wǎng)。 你得依賴于ISP提供短于64位的前綴,這樣你的路由器才能利用剩余的比特位來識別數(shù)據(jù)包應(yīng)當(dāng)發(fā)往哪個(gè)子網(wǎng)。 理論上講,通過分配60位前綴,ISP實(shí)際上完全有能力給家庭用戶提供至少16個(gè)子網(wǎng),但不知道為何他們并沒有這樣做。 或許是因?yàn)樗麄冊贗Pv4地址空間匱乏時(shí)期的心理創(chuàng)傷讓他們變得貪婪? 或者是他們想通過額外收費(fèi)來賺錢:“嘿,如果你想要更短的前綴,那就多付點(diǎn)錢給我們。” 據(jù)我所知,Comcast Xfinity和AT&T兩家公司都只為家庭用戶提供了一個(gè)簡單的/64前綴:即單個(gè)子網(wǎng)。 你或許會說,家庭用戶可能根本不需要子網(wǎng)劃分,但是隨著物聯(lián)網(wǎng)設(shè)備的普及以及我們對網(wǎng)絡(luò)安全越來越高的依賴性,隔離不可信設(shè)備的重要性正在日益凸顯。 歐洲IP地址分配權(quán)威機(jī)構(gòu)RIPE建議住宅ISP客戶使用56位前綴,這樣每位客戶可以獲得256個(gè)子網(wǎng),這是歐洲提出最貪婪、也最保守的選項(xiàng),而在美國,這幾乎是可望而不可及的夢想。 當(dāng)然,你可以手動配置每一臺設(shè)備的IPv6地址,并以此方式賦予它們子網(wǎng)標(biāo)識符,但這將是一項(xiàng)巨大的工程,尤其是考慮到添加新設(shè)備時(shí)帶來的管理負(fù)擔(dān)。難道你想退休后變成一個(gè)人工DHCP服務(wù)器嗎? 02 IPv6地址在URI中需要額外編碼 我們可能都試過在瀏覽器輸入“http://192.168.0.1”并訪問路由器設(shè)置。在URI規(guī)范中“:”字符是為端口號保留的,所以如果沒有額外的編碼,無法直接采用相同的方式來訪問IPv6地址。若想通過IPv6地址訪問一臺設(shè)備托管的網(wǎng)頁,必須采用如下格式: “http://[aaaa:bbbb:cccc:dddd:eeee:ffff:1111:2222]/path/?query” 注意地址兩邊的方括號。 但這還不是最糟糕的部分,因?yàn)椋?/p> 03 IPv6地址難以記憶 理論上我們不應(yīng)去記住IP地址,但實(shí)際情況并非如此。對于IPv6地址,我至今也無法確定可靠且一致地訪問自家路由器所使用的地址。確切地說,我無法記下它的完整IP地址。 mDNS有助于解決這個(gè)問題,但它也不總是穩(wěn)定有效。 十六進(jìn)制數(shù)字相比十進(jìn)制數(shù)字也更為復(fù)雜。這就像是試圖記憶Windows XP產(chǎn)品激活碼一樣困難。 記住IPv4地址是一種通用技能,由于普遍存在的NAT技術(shù),多數(shù)情況下“192.168.1.1”都能派上用場,我們無需查詢。而在任意設(shè)備上找出路由器的IPv6地址則需要不同的技巧。 從積極的一面看,現(xiàn)在你知道IPv6地址的最右側(cè)64位部分始終是隨機(jī)生成的,所以至少可以避免誤以為它是固定不變的或者是有意義的。 你可以將這一部分稱作BLABLA而非INTERFACE_ID。你可以記住你的/64前綴,至少能找到路由器的地址,通常是類似1111:2222:3333:4444::1這樣的形式。 04 IPv6地址復(fù)雜 當(dāng)然,IPv4地址同樣復(fù)雜。你知道2130706433是一個(gè)有效的IPv4地址嗎?或者換種寫法,0x7F000001、0177.0000.0000.0001,以及127.1其實(shí)都是一回事? 如果不信,你大可在終端嘗試ping它們。雖然很難相信,但它們?nèi)韧?27.0.0.1這個(gè)地址。 IPv6地址在表示形式上也有類似的多樣性。以下是其一些特征: IPv6地址的表示方法相對復(fù)雜,由8個(gè)十六進(jìn)制分組組成,這些組被稱為“hextet”(實(shí)際上“Hextet”是hexadectet的誤稱,但現(xiàn)在已約定俗成)。這樣一來,就可能出現(xiàn)類似的十六進(jìn)制表達(dá)技巧: IPv6地址中的零值前綴不會顯示,因此2600:00ab實(shí)際上顯示為2600:ab。 如前所述,如果某個(gè)十六進(jìn)制四字組的值為零值,可以完全從地址中刪除,并用雙冒號代替。因此,2600:ab:0:0:1234:5678:90ab:cdef將顯示為2600:ab::1234:5678:90ab:cdef。看到雙冒號了嗎?不過要注意的是,這種簡化方式只能應(yīng)用于地址中首組連續(xù)的零值四字組。 因此,2600:ab:0:0:1234:0:0:cdef仍顯示為2600:ab::1234::0:cdef。另外,不能僅僅簡化單個(gè)零值的十六進(jìn)制四字組。 因此,2600:0:1234:5678:abcd:ef01:2345:6789中的零值保持原樣,不會被省略。 你可以指定區(qū)域ID:通過在地址末尾添加“%”后綴和區(qū)域ID來指定要通過哪個(gè)網(wǎng)絡(luò)接口訪問該地址。例如,當(dāng)你同時(shí)通過WiFi和以太網(wǎng)連接到同一網(wǎng)絡(luò)時(shí),你可能想要通過局域網(wǎng)來ping你的路由器。 在這種情況下,你需要在地址后面追加“%”符號,并添加你的區(qū)域ID(即網(wǎng)絡(luò)適配器標(biāo)識符),例如fe80::1%eth0或fe80::1%3。問題是,在IPv6 URI中除了需要用到方括號之外,你在瀏覽器地址欄或其他需要在URI中使用區(qū)域ID的地方,還必須將“%”轉(zhuǎn)義為“%25”。 IPv6地址還可以用來表示IPv4地址。因此,你可以通過在其前方添加IPv4轉(zhuǎn)換前綴的方式,使用IPv6地址語法來ping 127.0.0.1,這時(shí)它將被視為一個(gè)IPv4地址,即:::ffff:127.0.0.1。 但這并不意味著你的IPv4請求會通過IPv6網(wǎng)絡(luò)進(jìn)行傳輸,而是告訴底層網(wǎng)絡(luò)協(xié)議棧使用IPv4連接。如果選擇不同于::ffff的前綴,IPv4部分將會被合并到最后兩個(gè)十六進(jìn)制字節(jié)中,并通過IPv6網(wǎng)絡(luò)與該IP地址建立連接。 例如,IPv6地址2600:1000:2000:3000::192.168.1.1會被視為2600:1000:2000:3000::c0a8:101,其中最后兩個(gè)十六進(jìn)制字節(jié)相當(dāng)于IPv4地址192.168.1.1的十六進(jìn)制表示形式。 這些都是有效的IPv6地址: :: 表示所有零,即0:0:0:0:0:0:0:0. 2600:: 相當(dāng)于2600:0:0:0:0:0:0:0. ::ffff:1.1.1.1 等同于IPv4地址1.1.1.1 。 2607:f8b0:4005:80f::200e 是我ping google.com時(shí)獲取的地址,與2607:f8b0:4005:80f:0:0:0:200e等效??梢钥闯觯馞acebook一樣,Google也選擇了艱難的道路,決定為其IPv6地址手動分配特定的INTERFACE_ID。 最終,在地址欄中輸入的IPv6地址可能看起來像下面這個(gè)人為構(gòu)造的例子: https://[542b:b2ae:ed5c:cb5a:e38b:2c49:123:192.168.1.1%25eth3] 我可記不住這么長的地址。 通過這次學(xué)習(xí),讓我對IPv6的相關(guān)知識有了更清晰的認(rèn)識。例如,我以前不知道IPv6地址是通過無狀態(tài)協(xié)議自動配置的,也不知道IPv6中沒有NAT技術(shù),更不了解地址空間是如何恰好被便捷地劃分為兩半的。 我希望我們能有一個(gè)指向默認(rèn)網(wǎng)關(guān)的快捷IPv6地址,我提議使用fe80::1。國際互聯(lián)網(wǎng)工程任務(wù)組(IETF),不妨考慮一下這個(gè)提議。 我還記得當(dāng)初Windows 2000宣布支持IPv6時(shí),那是個(gè)重大的進(jìn)步,我們都認(rèn)為IPv6將在十年左右的時(shí)間里被廣泛采用。 沒想到我們錯(cuò)得離譜! 然而,通過對IPv6的學(xué)習(xí),我才理解到為什么這項(xiàng)技術(shù)沒有快速普及起來。 05 IPv6并未對終端用戶提供實(shí)質(zhì)好處 盡管IPv6在技術(shù)上較為先進(jìn),但I(xiàn)Pv4卻簡單實(shí)用,即使是在NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)之后,甚至是多層NAT環(huán)境下,面對地址空間極度緊張、DHCP配置繁瑣、端口轉(zhuǎn)發(fā)復(fù)雜的條件下,IPv4依然能夠正常運(yùn)作。只要出現(xiàn)問題,總有人找到解決方案使其繼續(xù)工作。 理論上IPv6因無需NAT可能具有更低延遲的優(yōu)勢,但這點(diǎn)改進(jìn)還不足以顯著提升用戶體驗(yàn),不足以讓用戶強(qiáng)烈要求切換至IPv6。 正因?yàn)镮Pv6并未帶來直觀可見的好處,用戶并不會主動要求使用,往往是在他們不知情的情況下被推向IPv6,就像我們現(xiàn)在在移動網(wǎng)絡(luò)中幾乎默認(rèn)使用IPv6一樣。 這意味著,一旦互聯(lián)網(wǎng)服務(wù)提供商感受到IPv4的限制帶來的足夠壓力時(shí),它們將會立刻切換到IPv6。 我希望IPv6能夠開啟一些IPv4無法實(shí)現(xiàn)的獨(dú)特功能場景,讓用戶能夠因?yàn)橄胍褂眠@些功能而主動需求IPv6。盡管如此,我還是喜歡IPv6特質(zhì),期待有一天我們完全放棄IPv4,轉(zhuǎn)而圍繞IPv6來構(gòu)建所有網(wǎng)絡(luò)服務(wù)。 對于IPv6,一些開發(fā)者提出自己的觀點(diǎn): 開發(fā)者@9dev 表示 對終端用戶而言,真正的益處在于整個(gè)互聯(lián)網(wǎng)協(xié)議?;貧w到它應(yīng)有的完全透明狀態(tài)。用戶不應(yīng)該再需要操心IP地址問題;IPv6使得設(shè)備真正實(shí)現(xiàn)“即插即用”,即設(shè)備能夠自行獲取地址,自行協(xié)商連接。理想情況下,用戶再也不必關(guān)心這部分連接問題。的確,IPv6給網(wǎng)絡(luò)運(yùn)營商帶來了復(fù)雜性,但這也是復(fù)雜性應(yīng)當(dāng)?shù)摹?/p> @lxgr 有不同的意見: 針對“IPv6沒有子網(wǎng)掩碼”的說法,他認(rèn)為絕對是有子網(wǎng)掩碼的,只不過在IPv6中它們被稱為前綴長度。/64前綴剛好適合與SLAAC(無狀態(tài)地址自動配置)配合使用。 針對“IPv6沒有NAT”的說法,同樣,IPv4也沒有自帶NAT。NAT是一種路由器可以選擇實(shí)現(xiàn)的技術(shù),當(dāng)然在IPv6中也同樣可行。例如,Linux操作系統(tǒng)就實(shí)現(xiàn)了IPv6的NAT,只擁有一個(gè)IPv6地址的情況下,例如從本地網(wǎng)絡(luò)獲得一個(gè)地址并在機(jī)器上運(yùn)行虛擬機(jī)時(shí),IPv6的NAT可能是必不可少的。 針對“IPv6地址是自配置的”的說法,有時(shí)確實(shí)是這樣,但也有時(shí)候并非如此,還有DHCPv6和靜態(tài)配置的方式。 針對“IPv6地址無法記住”的說法,那又怎樣呢?反正他也沒興趣記住IPv4地址、電話號碼等信息。 針對“IPv6對終端用戶沒有好處”的說法,作為終端用戶,他發(fā)現(xiàn)IPv6給我?guī)砹撕芏嗪锰帲?/p> 防火墻穿越比NAT穿越更可預(yù)測且成功率更高。像VoIP、Tailscale等服務(wù)在IPv6環(huán)境下相比跨越一層或多層NAT的成功率大大提高。 家里的所有設(shè)備都可以獲取公網(wǎng)地址,他可以通過路由器上的防火墻規(guī)則選擇性地開放入站連接。 移動網(wǎng)絡(luò)上的路由更為直接,從而降低了延遲(IPv4常常需要通過一系列昂貴且具有狀態(tài)的CG-NAT設(shè)備,在使用的移動網(wǎng)絡(luò)服務(wù)商部署IPv6的地區(qū),這種情況得以避免)。 對于 IPv6,你怎么看? 該文章在 2024/6/17 10:01:46 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |