在過去的十年間,IPv6 本來應(yīng)該得到很大的發(fā)展,但事實(shí)上這種好事并沒有降臨。由此導(dǎo)致了一個(gè)結(jié)果,那就是大部分人都不了解 IPv6 的一些知識(shí):它是什么,怎么使用,以及,為什么它會(huì)存在?
IPv4 和 IPv6 的區(qū)別
IPv4 做錯(cuò)了什么?
自從1981年發(fā)布了 RFC 791 標(biāo)準(zhǔn)以來我們就一直在使用 IPv4。在那個(gè)時(shí)候,電腦又大又貴還不多見,而 IPv4 號(hào)稱能提供40億條 IP 地址,在當(dāng)時(shí)看來,這個(gè)數(shù)字好大好大。不幸的是,這么多的 IP 地址并沒有被充分利用起來,地址與地址之間存在間隙。舉個(gè)例子,一家公司可能有254(28-2)條地址,但只使用其中的25條,剩下的229條被空占著,以備將來之需。于是這些空閑著的地址不能服務(wù)于真正需要它們的用戶,原因就是網(wǎng)絡(luò)路由規(guī)則的限制。最終的結(jié)果是在1981年看起來那個(gè)好大好大的數(shù)字,在2014年看起來變得好小好小。
互聯(lián)網(wǎng)工程任務(wù)組(IETF)在90年代初指出了這個(gè)問題,并提供了兩套解決方案:無類型域間選路(CIDR)以及私有IP地址。在 CIDR 出現(xiàn)之前,你只能選擇三種網(wǎng)絡(luò)地址長(zhǎng)度:24 位 (共16,777,214個(gè)可用地址), 20位 (共1,048,574個(gè)可用地址)以及16位 (共65,534個(gè)可用地址)。CIDR 出現(xiàn)之后,你可以將一個(gè)網(wǎng)絡(luò)再劃分成多個(gè)子網(wǎng)。
舉個(gè)例子,如果你需要5個(gè) IP 地址,你的 ISP 會(huì)為你提供一個(gè)子網(wǎng),里面的主機(jī)地址長(zhǎng)度為3位,也就是說你最多能得到6個(gè)地址(LCTT:拋開子網(wǎng)的網(wǎng)絡(luò)號(hào),3位主機(jī)地址長(zhǎng)度可以表示0~7共8個(gè)地址,但第0個(gè)和第7個(gè)有特殊用途,不能被用戶使用,所以你最多能得到6個(gè)地址)。這種方法讓 ISP 能盡最大效率分配 IP 地址!八接械刂贰边@套解決方案的效果是,你可以自己創(chuàng)建一個(gè)網(wǎng)絡(luò),里面的主機(jī)可以訪問外網(wǎng)的主機(jī),但外網(wǎng)的主機(jī)很難訪問到你創(chuàng)建的那個(gè)網(wǎng)絡(luò)上的主機(jī),因?yàn)槟愕木W(wǎng)絡(luò)是私有的、別人不可見的。你可以創(chuàng)建一個(gè)非常大的網(wǎng)絡(luò),因?yàn)槟憧梢允褂?6,777,214個(gè)主機(jī)地址,并且你可以將這個(gè)網(wǎng)絡(luò)分割成更小的子網(wǎng),方便自己管理。
也許你現(xiàn)在正在使用私有地址?纯茨阕约旱 IP 地址,如果這個(gè)地址在這些范圍內(nèi):10.0.0.0 – 10.255.255.255、172.16.0.0 – 172.31.255.255或192.168.0.0 – 192.168.255.255,就說明你在使用私有地址。這兩套方案有效地將“IP 地址用盡”這個(gè)災(zāi)難延遲了好長(zhǎng)時(shí)間,但這畢竟只是權(quán)宜之計(jì),現(xiàn)在我們正面臨最終的審判。
IPv4 還有另外一個(gè)問題,那就是這個(gè)協(xié)議的消息頭長(zhǎng)度可變。如果數(shù)據(jù)的路由通過軟件來實(shí)現(xiàn),這個(gè)問題還好說。但現(xiàn)在路由器功能都是由硬件提供的,處理變長(zhǎng)消息頭對(duì)硬件來說是一件困難的事情。一個(gè)大的路由器需要處理來自世界各地的大量數(shù)據(jù)包,這個(gè)時(shí)候路由器的負(fù)載是非常大的。所以很明顯,我們需要固定消息頭的長(zhǎng)度。
在分配 IP 地址的同時(shí),還有一個(gè)問題,因特網(wǎng)是美國(guó)人發(fā)明的(LCTT:這個(gè)萬惡的資本主義國(guó)家占用了大量 IP 地址)。其他國(guó)家只得到了 IP 地址的碎片。我們需要重新定制一個(gè)架構(gòu),讓連續(xù)的 IP 地址能在地理位置上集中分布,這樣一來路由表可以做的更。↙CTT:想想吧,網(wǎng)速肯定更快)。
還有一個(gè)問題,這個(gè)問題你聽起來可能還不大相信,就是 IPv4 配置起來比較困難,而且還不好改變。你可能不會(huì)碰到這個(gè)問題,因?yàn)槟愕穆酚善鳛槟阕隽诉@些事情,不用你去操心。但是你的 ISP 對(duì)此一直是很頭疼的。
下一代因特網(wǎng)需要考慮上述的所有問題。
IPv6 和它的優(yōu)點(diǎn)
IETF 在1995年12月公布了下一代 IP 地址標(biāo)準(zhǔn),名字叫 IPv6,為什么不是 IPv5?→_→ 因?yàn)槟硞(gè)錯(cuò)誤原因,“版本5”這個(gè)編號(hào)被其他項(xiàng)目用去了。IPv6 的優(yōu)點(diǎn)如下:
128位地址長(zhǎng)度(共有3.402823669×103⁸個(gè)地址)
其架構(gòu)下的地址在邏輯上聚合
消息頭長(zhǎng)度固定
支持自動(dòng)配置和修改你的網(wǎng)絡(luò)。
我們一項(xiàng)一項(xiàng)地分析這些特點(diǎn):
地址
人們談到 IPv6 時(shí),第一件注意到的事情就是它的地址好多好多。為什么要這么多?因?yàn)樵O(shè)計(jì)者考慮到地址不能被充分利用起來,我們必須提供足夠多的地址,讓用戶去揮霍,從而達(dá)到一些特殊目的。所以如果你想架設(shè)自己的 IPv6 網(wǎng)絡(luò),你的 ISP 可以給你分配擁有64位主機(jī)地址長(zhǎng)度的網(wǎng)絡(luò)(可以分配1.844674407×101⁹臺(tái)主機(jī)),你想怎么玩就怎么玩。
聚合
有這么多的地址,這些地址可以被稀稀拉拉地分配給主機(jī),從而更高效地路由數(shù)據(jù)包。算一筆帳啊,你的 ISP 拿到一個(gè)80位地址長(zhǎng)度的網(wǎng)絡(luò)空間,其中16位是 ISP 的子網(wǎng)地址,剩下64位分給你作為主機(jī)地址。這樣一來,你的 ISP 可以分配65,534個(gè)子網(wǎng)。
然而,這些地址分配不是一成不變地,如果 ISP 想擁有更多的小子網(wǎng),完全可以做到(當(dāng)然,土豪 ISP 可能會(huì)要求再來一個(gè)80位網(wǎng)絡(luò)空間)。最高的48位地址是相互獨(dú)立地,也就是說 ISP 與 ISP 之間雖然可能分到相同地80位網(wǎng)絡(luò)空間,但是這兩個(gè)空間是相互隔離的,好處就是一個(gè)網(wǎng)絡(luò)空間里面的地址會(huì)聚合在一起。
固定的消息頭長(zhǎng)度
IPv4 消息頭長(zhǎng)度可變,但 IPv6 消息頭長(zhǎng)度被固定為40字節(jié)。IPv4 會(huì)由于額外的參數(shù)導(dǎo)致消息頭變長(zhǎng),IPv6 中,如果有額外參數(shù),這些信息會(huì)被放到一個(gè)緊挨著消息頭的地方,不會(huì)被路由器處理,當(dāng)消息到達(dá)目的地時(shí),這些額外參數(shù)會(huì)被軟件提取出來。
IPv6 消息頭有一個(gè)部分叫“flow”,是一個(gè)20位偽隨機(jī)數(shù),用于簡(jiǎn)化路由器對(duì)數(shù)據(jù)包的路由過程。如果一個(gè)數(shù)據(jù)包存在“flow”,路由器就可以根據(jù)這個(gè)值作為索引查找路由表,不必慢吞吞地遍歷整張路由表來查詢路由路徑。這個(gè)優(yōu)點(diǎn)使 IPv6 更容易被路由。
自動(dòng)配置
IPv6 中,當(dāng)主機(jī)開機(jī)時(shí),會(huì)檢查本地網(wǎng)絡(luò),看看有沒有其他主機(jī)使用了自己的 IP 地址。如果地址沒有被使用,就接著查詢本地的 IPv6 路由器,找到后就向它請(qǐng)求一個(gè) IPv6 地址。然后這臺(tái)主機(jī)就可以連上互聯(lián)網(wǎng)了 —— 它有自己的 IP 地址,和自己的默認(rèn)路由器。
如果這臺(tái)默認(rèn)路由器宕機(jī),主機(jī)就會(huì)接著找其他路由器,作為備用路由器。這個(gè)功能在 IPv4 協(xié)議里實(shí)現(xiàn)起來非常困難。同樣地,假如路由器想改變自己的地址,自己改掉就好了。主機(jī)會(huì)自動(dòng)搜索路由器,并自動(dòng)更新路由器地址。路由器會(huì)同時(shí)保存新老地址,直到所有主機(jī)都把自己地路由器地址更新成新地址。
IPv6 自動(dòng)配置還不是一個(gè)完整地解決方案。想要有效地使用互聯(lián)網(wǎng),一臺(tái)主機(jī)還需要另外的東西:域名服務(wù)器、時(shí)間同步服務(wù)器、或者還需要一臺(tái)文件服務(wù)器。于是 dhcp6 出現(xiàn)了,提供與 dhcp 一樣的服務(wù),唯一的區(qū)別是 dhcp6 的機(jī)器可以在可路由的狀態(tài)下啟動(dòng),一個(gè) dhcp 進(jìn)程可以為大量網(wǎng)絡(luò)提供服務(wù)。
唯一的大問題
如果 IPv6 真的比 IPv4 好那么多,為什么它還沒有被廣泛使用起來(Google 在2014年5月份估計(jì) IPv6 的市場(chǎng)占有率為4%)?一個(gè)最基本的原因是“先有雞還是先有蛋”。服務(wù)商想讓自己的服務(wù)器為盡可能多的客戶提供服務(wù),這就意味著他們必須部署一個(gè) IPv4地址。
當(dāng)然,他們可以同時(shí)使用 IPv4 和 IPv6 兩套地址,但很少有客戶會(huì)用到 IPv6,并且你還需要對(duì)你的軟件做一些小修改來適應(yīng) IPv6。另外比較頭疼的一點(diǎn)是,很多家庭的路由器壓根不支持 IPv6。還有就是 ISP 也不愿意支持 IPv6,我問過我的 ISP 這個(gè)問題,得到的回答是:只有客戶明確指出要部署這個(gè)時(shí),他們才會(huì)用 IPv6。然后我問了現(xiàn)在有多少人有這個(gè)需求,答案是:包括我在內(nèi),共有1個(gè)。
與這種現(xiàn)實(shí)狀況呈明顯對(duì)比的是,所有主流操作系統(tǒng):Windows、OS X、Linux 都默認(rèn)支持 IPv6 好多年了。這些操作系統(tǒng)甚至提供軟件讓 IPv6 的數(shù)據(jù)包披上 IPv4 的皮來騙過那些會(huì)丟棄 IPv6 數(shù)據(jù)包的主機(jī),從而達(dá)到傳輸數(shù)據(jù)的目的。
總結(jié)
IPv4 已經(jīng)為我們服務(wù)了好長(zhǎng)時(shí)間。但是它的缺陷會(huì)在不遠(yuǎn)的將來遭遇不可克服的困難。IPv6 通過改變地址分配規(guī)則、簡(jiǎn)化數(shù)據(jù)包路由過程、簡(jiǎn)化首次加入網(wǎng)絡(luò)時(shí)的配置過程等策略,可以完美解決這個(gè)問題。
問題是,大眾在接受和使用 IPv6 的過程中進(jìn)展緩慢,因?yàn)楦淖兇鷥r(jià)太大了。好消息是所有操作系統(tǒng)都支持 IPv6,所以當(dāng)你有一天想做出改變,你的電腦只需要改變一點(diǎn)點(diǎn)東西,就能轉(zhuǎn)到全新的架構(gòu)體系中去。