魏郎爾
北京時間2014年8月12日下午4點鐘開始,全世界的網(wǎng)絡(luò)突然都變慢了一點點。不幸的是,接下來還可能又會慢下去。并且,這一回錯的真的不是你,而是世界。錯在哪呢?路由規(guī)則太多,溢出了。
不夠用的地址
你很可能見過譬如192.168.1.1這樣的數(shù)字串,這樣的數(shù)字就是所謂的“IP地址”。這是你平常訪問的那些網(wǎng)站的“真實地址”,例如,當(dāng)你輸入www.guokr.com(域名)時,網(wǎng)絡(luò)會把它轉(zhuǎn)換成真正的地址111.13.57.142,然后才能找到這個網(wǎng)站在哪里。如果這個轉(zhuǎn)換系統(tǒng)(也就是所謂的“DNS”)出了問題,那網(wǎng)絡(luò)就要出現(xiàn)問題。
常見的IP地址里的數(shù)字是有規(guī)定的:四個數(shù)字,每個可以從0到255,這被稱為“IPv4”(互聯(lián)網(wǎng)協(xié)議第四版)。那么一共就會有2^32次方個不同的地址,也就是將近43億。而且這43億地址還有不少是保留的,比如所有以9開頭的原則上都是IBM的,12開頭的都是AT&T的,17開頭的是蘋果的,18開頭的則歸麻省理工……有些厚道的組織,比如斯坦福,本來占據(jù)了所有36開頭的,現(xiàn)在正把多余的地址拿出來回饋社會,但人并不都這么好心。
所以,那幫技術(shù)人員實在太目光短淺了?這還真不是,IPv4協(xié)議誕生于1981年,早在20世紀80年代末他們就預(yù)料到了這個不夠用的問題,可是新一代協(xié)議IPv6——可以提供3.4×10^38個地址——直到1998年才出臺?,F(xiàn)在,IPv6已經(jīng)走過整整十六個年頭。互聯(lián)網(wǎng)上使用IPv6的人數(shù)大概為4%(該數(shù)值基于訪問google的人統(tǒng)計,真實數(shù)字應(yīng)為更低,見圖1)。
耍花招的后果
為了推遲IPv4擠爆的同時又不用去辛辛苦苦換新協(xié)議,各方在抓緊時間利用每一點殘存的IP空間碎片。以前大手大腳一整塊幾萬地址分給一個組織的好日子一去不復(fù)返,現(xiàn)在就連一小撮256個地址都要寸土必爭。但是,這對路由器來說就辛苦了。路由器依靠一個名為“路由表”的東西來快速找到方向,每一個機構(gòu)拿到一段IP之后都會希望在路由表里加一句規(guī)則來加快自己的訪問速度。但是每一條規(guī)則都要占據(jù)同樣大小的空間,所以網(wǎng)上的地址越碎,需要的路由表就越大。
路由表是個很重要的東西,所以路由器會專門留出一塊高速存儲器來存它。譬如某款路由器足夠存一百萬個條目,想來應(yīng)該是足夠了,而且眼看IPv6必將征服市場,我留一半(512k)給v4,另一半給v6,事實上大部分路由器生產(chǎn)商都想當(dāng)然認為給v4留了512k足夠用,這算是行業(yè)標準。不幸的是,對于互聯(lián)網(wǎng)碎片化的程度,他們顯然又低估了。
多年的增長已經(jīng)讓路由表突破了50萬大關(guān),而在2014年8月12日,美國通信公司Verizon又一口氣往v4路由表里加了15000個條目,使總數(shù)抵達了約515000個,超過了上限(相比之下,v6還只有可憐的2萬個條目)。這些多出來的信息必須存在更慢的普通存儲器里,導(dǎo)致了速度變慢甚至局部網(wǎng)絡(luò)不穩(wěn)定。Verizon很快發(fā)現(xiàn)了這個問題并把多出來的條目削了回去,但是余波至少持續(xù)了數(shù)小時。這個事件就是所謂的“512k”事件,也許就是你那天覺得網(wǎng)絡(luò)慢了的元兇。但這不是問題的結(jié)束,只是開始。路由表里的條目數(shù)字肯定要自然增長的,早晚會自己超過這個數(shù)字。而這些問題都出在路由器上,換路由器可是要花錢的。
誠然,我們可以繼續(xù)拆東墻補西墻,來一次廣泛的固件升級,把更多的快速存儲器留給v4。而代價可想而知,就是進一步削減了留給v6的空間。要是早用v6取代v4,IP地址夠用的話,現(xiàn)在就不會出現(xiàn)地址碎片化、路由表過大的問題了。
事實上,想想之前人們還以為內(nèi)存640k就足夠,兩位數(shù)字存儲年份就足夠,32位儲存秒數(shù)就足夠,現(xiàn)在又一個想當(dāng)然的上限被突破帶來了麻煩,就是理所應(yīng)當(dāng)?shù)氖虑榱恕?/p>
圖1 2012年4月一次IPv4地址普查顯示的使用情況,黑色代表沒有數(shù)據(jù),其他顏色代表使用率。由于調(diào)查方法問題,實際占用率肯定會比圖中看起來更高。