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