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