IPv4 地址耗盡,為什么 IPv6 沒有廣泛將其取代?
IPv6 vs. IPv4
IPv6沒有子網(wǎng)掩碼
1111:2222:3333:4444:5555:6666:7777:8888
IPv6 不使用 NAT 技術(shù)
接下來我們繼續(xù)探討IPv6的特性:
IPv6地址具備自動配置功能
操作系統(tǒng)(特別是操作系統(tǒng)的IPv6堆棧)會生成一個64位的設(shè)備標識符,通常是隨機生成的,比如5555:6666:7777:8888,這個標識符構(gòu)成了你的IPv6地址INTERFACE_ID部分。
操作系統(tǒng)會在該INTERFACE_ID前加上fe80,這是僅限本地使用的IPv6網(wǎng)絡(luò)前綴。因此,你現(xiàn)在得到的 IPv6 地址是:fe80::5555:6666:7777:8888。(請注意這里的”a::b”語法表示的是:“在’a’和’b’之間存在所有值為零的段”。關(guān)于這點我們稍后再詳細介紹。) 你的設(shè)備會將一個數(shù)據(jù)包發(fā)送到本地網(wǎng)絡(luò)上指定的鄰居多播組,以確保沒有其他設(shè)備使用相同的IPv6地址,這被稱為重復地址檢測(DAD)。而分配到重復地址的幾率很小。 設(shè)備將它獲取到的本地地址發(fā)送給路由器(與IPv4不同,在IPv6中,路由器始終可以通過組播地址ff02::2被訪問到),并通過發(fā)送一個RS(路由請求)ICMPv6數(shù)據(jù)包來請求路由器的實際前綴。路由器收到請求后,會通過RA(路由通告)數(shù)據(jù)包回應(yīng),并用回復的實際前綴替換掉fe80,設(shè)備隨后開始使用這個新的地址作為其永久地址。這就是你現(xiàn)在的IPv6互聯(lián)網(wǎng)地址。
IPv6的“神話”
IPv6也有一些夸大的說法,我們一起梳理澄清下:
你設(shè)備只有一個IPv6地址,可用于在所有地方
為宇宙中每個原子分配一個IP地址
每個設(shè)備的通用連接
從我看來,在某些情況下,IPv6的表現(xiàn)甚至不如IPv4:
IPv6的不足之處
在IPv4環(huán)境下,我們習以為常的一些功能,當過渡到IPv6后可能會讓你懷念,例如:
依賴 ISP 提供子網(wǎng)劃分服務(wù)
IPv6地址在URI中需要額外編碼
http://[aaaa:bbbb:cccc:dddd:eeee:ffff:1111:2222]/path/?query
注意地址兩邊的方括號。但這還不是最糟糕的部分,因為:
IPv6地址難以記憶
IPv6地址復雜
IPv6地址在表示形式上也有類似的多樣性。以下是其一些特征:
IPv6地址中的零值前綴不會顯示,因此2600:00ab
實際上顯示為2600:ab
。
這些都是有效的IPv6地址:
:: 表示所有零,即0:0:0:0:0:0:0:0.
2600::相當于2600:0:0:0:0:0:0:0.
::ffff:1.1.1.1 等同于IPv4地址1.1.1.1 。
最終,在地址欄中輸入的IPv6地址可能看起來像下面這個人為構(gòu)造的例子:
https://[542b:b2ae:ed5c:cb5a:e38b:2c49:123:192.168.1.1%25eth3]
我可記不住這么長的地址。
通過這次學習,讓我對IPv6的相關(guān)知識有了更清晰的認識。例如,我以前不知道IPv6地址是通過無狀態(tài)協(xié)議自動配置的,也不知道IPv6中沒有NAT技術(shù),更不了解地址空間是如何恰好被便捷地劃分為兩半的。
IPv6并未對終端用戶提供實質(zhì)好處
技術(shù)人怎么看?
@lxgr 在學習這篇文章后,針對作者提到的一些看法,有不同的意見:
針對“IPv6沒有子網(wǎng)掩碼”的說法,他認為絕對是有子網(wǎng)掩碼的,只不過在IPv6中它們被稱為前綴長度。/64前綴剛好適合與SLAAC(無狀態(tài)地址自動配置)配合使用。
防火墻穿越比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ū),這種情況得以避免)。