閒談IPV6-它到底好在哪兒
這個話題網上一搜,結果早就已經汗牛充棟,我為什麼還在再寫一篇呢?
其實我是在寫一篇總結,補充說點別人可能沒有說到的點。
報頭精簡-處理簡化
IPv4的報文頭長度由IHL欄位指出,雖然絕大多數的IP報頭都沒有 選項 ,但是為了統一化處理,協議棧便不能預設報頭是固定大小的,也就是說需要複雜地解析和處理,而只要有if語句,就會徒增CPU指令,而且還會破壞區域性性,降低cache利用收益。
注意,IHL欄位是第一個要解析的,且是必須解析的,這類似於TLV機制,比如ASN.1,但是核心態並不適合處理這個。
IPv6頭部固定40位元組,所有的策略性選項由Next Header欄位指示,這便和TLV有大不同。不再需要在一切處理之前先解析Length。固定長度的協議頭非常方便利用cache。
這就是所謂的 IPv6協議端到端延時將縮短 的原因之一!
分層編址-管理簡化
前面說過,IPv6編址類似於我們的公民身份證編址,它是層次化的。和IPv4相比,IPv6的地址空間和國家,省份,區縣等地理空間建立了 有關聯的對映 ,比如像IPv4地址中的15.16.x1.y1/16位於北美,而15.16.x2.y2/16卻位於東南亞,這種情況在IPv6時代將不復存在。
這無疑簡化了管理,降低了管理成本。
分層編址-路由簡化
值得一提的是,IPv6的分層編址和CIDR思想並不一致。
這一點不要混淆,千萬不要覺得CIDR思想以及與之對應的最長字首匹配演算法是路由查詢中與生俱來的理所當然,這是不對的。
即便是IPv4協議,最初它也不是CIDR的,而是基於類別的。CIDR是為了應對地址分配不合理和混亂導致的地址浪費問題而提出的見招拆招的解法,它不是與生俱來的!
CIDR固然好,解決了地址分配不合理的問題,但是其代價就是 造成了路由表項的激增 。這個問題在IPv6中得到了解決。
請注意,在IPv4中,錯的不是地址分類,而是它 分類策略的生成 ,可以說,A類,B類,C類,D類,E類這些分類標準是造成問題的根源。機制是正確的,策略完敗!
IPv6的層次化編址,本質上非常類似於IPv4的地址分類,不同的是,IPv6對128bit地址的解釋並不僅僅針對於其高位幾個bit,而是分散解釋,規定了 哪幾個bit分別是做什麼的 。
同時,在層次化編址之外,又規定了subnet,這裡便可以使用CIDR的最長字首匹配原則了。換句話說,IPv6編址是分類IP和CIDR的某種結合。
收益是, 路由表項可以大規模匯聚,減少了表項的數量! 這直接減少了路由器轉發延遲,因為查表的時間短了。
Why?怎麼會有這種收益?因為路由器部署都是基於地理位置的(武漢路由器北向接入鄭州的線很難想象會接入廣州… ),而地址分配也是基於地址位置的。
不再分片-TCP丟包恢復優化
IPv6取消了逐跳的分片。
這意味著什麼?
我們是不是都承認一個事實,雞蛋不要放在一個籃子裡。但是如果說只要有一個籃子裡碎了蛋,就算玩完,那還是把雞蛋都放進一個籃子吧…
我們簡單算一下。
假設一條鏈路丟包率為 ,一包丟失概率為 ,而如果發生了分片,分成了 個包,那麼丟失任何一個包的概率就成了 ,出事的概率增加了。
我們知道,對於TCP這種協議而言,只要丟失一個分片,整個包都要重傳,這就意味著 IP分片大大降低了網路的利用率。
當然,IPv6取消了逐跳分片,改成了端到端分片,這遍提高了網路利用率。當然了,對於那種不Care丟包的協議,這種改變可能並沒有帶來其承諾的收益,但無論如何,不也節省了端主機的記憶體麼?不然呢,等待一個已經丟失的分片,無論如何,都要徒勞消耗一些記憶體的吧…
地址數量-5G,IoT
如果說IPv4可以靠NAT解決地址不夠用的問題,那麼在5G,IoT時代,就不行了,Why?
- 有狀態NAT:節點數量巨大,NAT閘道器不足以應對海量的連線跟蹤
- 無狀態NAT:節點數量巨大,NAT閘道器不足以儲存海量的轉換表項
無論如何,查表開銷都會激增。
自動配置-IoT
很難想象一個管理員去配置一個電子細胞的IP地址…
很難想象一個普通使用者敲入像192.168.1.1這樣的地址敲入IPv6地址去登入路由器…
既然128bit的地址很難記憶,那幹嘛還要去記憶它?
自動配置免除了記憶IPv6地址的必要性。
這個就不多說。
私有地址ULA
IPv4地址空間保留了3塊私有空間,分別是10.,172.,192.,這些,就不多說了。
IPv6中同樣也定義了類似的ULA地址,參看RFC4193:https://tools.ietf.org/html/rfc4193
是不是IPv6向IPv4學習的呢?並不是!
IPv4的私有地址空間可以說是 專門用於NAT (求別抬槓,我知道有情況下並不需要NAT ),事實上,IPv4私有地址空間的存在,將一維的IPv4空間分裂成了兩個,成了二維的地址空間,兩個維度相互正交,互不影響,這就意味著每一個IPv4公網地址都可以對映成所有的私有空間的任何一個,這就為NAT提供了唯一性依據。
那麼IPv6的ULA呢?
IPv6明確的說,並不需要NAT,如果你還對NAT念念不忘,那是遺毒…
IPv6的ULA是為了讓所有人都可以使用IPv6通訊而不必非得有一個全球IP,這便於個人和企業使用ULA組建私有網路。
IPv4中不經運營商(比如你新買了一臺電腦 )隨意配置一個192.168的地址已經成為常態,IPv6中也需要類似的地址,不必經過運營商分配的,你可以肆意使用的。ULA就是了。
ULA有一個特性非常值得體會:
-
ULA的Global ID是平坦的,不是CIDR的
當然,這只是建議,你完全可以給一個ULA附著各種長度的字首,類似/30,/38,/22這些,然後組網,實施最長字首匹配演算法定址。
然而,ULA的規範建議你不要這麼做,你需要隨機化這個ULA地址,以保證它的 大概率全球唯一性 。
這種唯一性保證了私有網絡合並時會非常簡易,不用過多擔心地址衝突(IPv4中普遍使用192.168.1.x/24,兩個這種網段如果合併,勢必需要重新規劃路由 )。
什麼?私有地址也能全球唯一?
是的!
我們不要小看這40bits的Global ID,這個空間比IPv4空間大得多,只要隨機演算法足夠好,全球唯一根本不是事兒!
大家都用過VMWare虛擬機器,它的虛擬網絡卡MAC地址是怎麼保證唯一性的呢?畢竟這種網絡卡只是虛擬的,並沒有任何廠商去生產它,怎麼做到的呢?
答案就是 隨機性生成演算法。 不光虛擬機器網絡卡的MAC地址,類似TAP,VETH這種虛擬網絡卡也同樣。
回到IPv6的ULA Global ID,它也是靠這種機制來生成的,具體演算法參見:
Unique Local IPv6 Unicast Addresses: https://tools.ietf.org/html/rfc4193
Internet Protocol Version 6 (IPv6) Addressing Architecture: https://tools.ietf.org/html/rfc3513
RFC4193 IPv6 Generator: https://cd34.com/rfc4193/
最後,請注意,ULA不是讓你用來NAT的!
NAT44,NAT64,NAT66-都不需要了
NAT都不需要了!
NAT是需要成本的,不管是類似Linux核心conntrack的成本,還是Cisco閘道器表項固化和查詢的成本,都是成本!
NAT,特別是有狀態NAT破壞了網際網路的對等原則!成了一個C/S當道的世界。這就相當於你有一部只能打不能接的電話,是什麼感覺?
IPv6讓網際網路變得真正互聯互通,彼此對等。
誤區-純屬扯淡的論調
網上很多人說,IPv6能將網路延遲大大降低一個數量級!
這是有點扯淡了!
如果這一個數量級的延遲是由於你在協議棧處理IPv4資料包的時候故意sleep了1000ms,那麼換成IPv6,確實能有數量級的延遲降低,但是呢,哈哈。
你要明白RTT的組成和光速極限,在RTT組成中,很多時候,大頭就是傳播延時,這是光速極限所決定的,而IPv6能降低的只是處理延時,比如協議頭的簡化帶來的處理延遲的降低,以及路由表項的減少帶來的查表開銷的降低。
但是,IPv6不能突破光速!它甚至只是一個網路層協議而已,並不涉及物理層傳輸,扯淡也要找準了再扯吧。
其它誤區
IPv6可能不再有內網的概念了,它將直接把任何可路由的公網IP地址暴露在外!
然而這將大大改變現有的網際網路拓撲,所有的防火牆都要重新設計,這涉及到工業界,學術界以及政界的博弈,並不是誰能說了算的。
所以說,運營商很有可能會按照IPv4的方式運作IPv6,當你的路由器上線時,直接在地址池裡撈一個動態的IPv6地址給你,注意,只有一個地址,至於說你的家用路由器後面是什麼,運營商不管,你購買服務時,運營商也不會過問,因為他們根本就不會 給你的任何裝置都分配一個固定的IP地址並且收取費用 ,他們放棄了這筆收入,帶來的是簡單。
千萬不要用IPv4的思維來看IPv6,但這只是一種宗教式的教誨,事實上呢?
事實上包括BAT在內的絕大多數網際網路廠商,其聲稱的IPv6大規模支援,都是假的,其實都是在用IPv4的思路在運作IPv6,而已!
大規模支援IPv6,並不是僅僅換一個地址那麼簡單的事,它複雜的多!都說自己大規模支援IPv6,響應號召,搶佔先機罷了。
2006年,我在長春一家和吉大合作的公司做網路協議教學系統,我負責用Java Eclipse SWT做介面,做得還不錯。當時有一個專案組做IPv6相關的。
我覺得這個產品太偉大了,它本質上就是在教你什麼是IPv6的啊!只可惜,我當時並未涉入太深。
這一晃就13年了,IPv6在部署上並沒有進展太多,同樣,我們對它的理解上,也沒有太多的新東西。文章不斷寫,實驗也不斷做,它到底什麼時候能取代IPv4,真的是未知數。5G,IoT這些,到底是噱頭多一些,還是實質多一些呢?
其背後的推力呢,政府是輿論導向的,運營商是利潤導向的,網際網路企業是流量/利潤導向的,…我們沒有看到一個是技術導向的,哈哈,對於這些群體而言,技術顯得並不重要,更重要的,是鋪在技術上面對他們而言更重要的東西。
浙江溫州皮鞋溼,下雨進水不會胖。