上1篇文章主要介紹了公共因特網(wǎng)的拓撲,或說物理結(jié)構(gòu),那末這1篇文章要介紹IP――就是網(wǎng)絡(luò)中每一個節(jié)點或端系統(tǒng)的辨認問題。現(xiàn)實中,道路的端點是1個個村落或城市,它們都是著名字的,但是網(wǎng)絡(luò)世界中,用名字來標示每臺主機是1件不太明智的事,因而人們發(fā)明了IP這類方式來辨認主機。
IP是2進制數(shù)字,共有32位,理論上可以有2的32次方(大約40億)個不同0、1組合,因而可以標示這么多主機,每一個組合就是1臺主機的名字。以下圖是1個IP的例子:
11000001 00100000 11011000 00001001
明顯,這樣不方便記憶和書寫,因而人們發(fā)明了點分10進制法來做替換,具體就是,把每8個位用1個10進制數(shù)字代替,然后10進制數(shù)字之間用點號分隔,因而上面那個IP就能夠表示為:
193.32.216.9
不難想象,路由器既然要做中轉(zhuǎn)站,必定要與多臺主機/端系統(tǒng)相連,路由器伸出多條鏈路連接到各個主機,每一個主機被分配1個IP地址。那末路由器的IP是怎樣的呢?實際上路由器有多個IP或說它本身是沒有IP的,由于IP是1個與接口相干的概念,而不是1臺機器。所謂接口就是1臺機器和1條鏈路的交接處。表面上看,1條鏈路連接的是兩臺機器,但深入到機器內(nèi)部,這條鏈路的兩端卻是機器里的網(wǎng)卡(在路由器中又稱線路卡)。所以接口的本質(zhì)是這塊網(wǎng)卡,IP是與這塊網(wǎng)卡綁定在1起的。每一個網(wǎng)卡具有1個全球唯1的IP,因而每一個端系統(tǒng)就能夠被唯1定位或辨認出來,但是路由器卻有很多個網(wǎng)卡,所以可以說有很多個IP,也能夠說這些IP都不代表這個路由器本身。其實定位路由器本身也是沒有甚么意義的,下面我們就會知道。
首先要了解1下,路由器本身是如何工作的和每臺端系統(tǒng)是如何得到自己的IP的。路由器內(nèi)部保護著1個轉(zhuǎn)發(fā)表,其內(nèi)容就是IP和自己接口的映照關(guān)系。IP是指該路由器接收到的分組的目的IP,而內(nèi)部的每塊網(wǎng)卡(即接口)都是有編號的。舉個例子:
192.0.0.1 ―――― 1 ―――――― A
192.0.0.2 ―――― 2 ―――――― B
192.0.0.3 ―――― 3 ―――――― C
192.0.0.4 ―――― 4 ―――――― D
路由器根據(jù)自己的轉(zhuǎn)發(fā)表來轉(zhuǎn)發(fā)分組,上圖中的轉(zhuǎn)發(fā)表決定了目的IP是192.0.0.1的分組要發(fā)送到1號接口,然后1號接口通過1條鏈路與主機A相連,然后A的IP就順理成章的成為192.0.0.1,同理B、C、D的IP順次是192.0.2/3/4。
看到這里或許你就可以明白,所謂IP不過就是路由器轉(zhuǎn)發(fā)表中的1個數(shù)字,或說,你的IP其實不是你的,你自己是用不到它的,只有你的路由器才需要它。路由器需要1個IP來決定把1個分組扔到哪一個接口(也就是鏈路)。也許有1條鏈路把你的主機和路由器的1個接口固定起來,但是這其實不意味著你的IP也是固定的,由于路由器隨時可以改變轉(zhuǎn)發(fā)表,修改掉你的路由器接口和IP之間的映照關(guān)系。比如大學(xué)時期,我們宿舍每一個人的桌子底下都有1個網(wǎng)線插口,這個插口肯定通過1條鏈路和學(xué)校路由器的某個接口固定,但是我發(fā)現(xiàn)自己電腦的IP并不是是固定的。
小結(jié):IP的決定權(quán)不在端系統(tǒng)手中,而在與它相連的那臺路由器手中。
上面例子中的那臺路由器的工作還是非常低級的,由于每一個接口直接連接了1臺端系統(tǒng),或說該路由器中轉(zhuǎn)發(fā)表中的接口編號對應(yīng)的是1個個再具體不過的IP。實際上真實的路由器是不屑于干這類活兒的,由于太大材小用了?,F(xiàn)實世界中,這類活兒常常由以太網(wǎng)交換機或集線器承當(dāng),以太網(wǎng)是局域網(wǎng)的1種實現(xiàn)思路。為何說大材小用呢?由于路由器轉(zhuǎn)發(fā)表中接口編號對應(yīng)的其實不是具體的IP,而是IP的1個范圍,以下所示:
192.0.0.0~192.0.0.63 ―――― 1 ―――――― A
192.0.0.64 ~ 192.0.0.127 ―――― 2 ―――――― B
192.0.0.128 ~ 192.0.0.191 ―――― 3 ―――――― C
192.0.0.192 ~ 192.0.0.255 ―――― 4 ―――――― D
這樣,路由器接收到1個分組,會檢查它的目的IP出于哪一個范圍,然后扔到對應(yīng)的接口。注意,這個圖中,A~D不再是具體的端系統(tǒng)了,而是局域網(wǎng)中的交換機或集線器,它們收到分組后再繼續(xù)決定把分組發(fā)送到哪一個具體端系統(tǒng)。
這樣做的好處就是:減輕了路由器的負擔(dān),它的轉(zhuǎn)發(fā)表不需要保護那末多的映照。
現(xiàn)在我們把眼光集中到上例中IP范圍上,我們把192.0.0.0~192.0.0.63轉(zhuǎn)換成2進制就是:
11000000 00000000 00000000 00000000 ~ 11000000 00000000 00000000 00111111
可以發(fā)現(xiàn),處在這個范圍中的數(shù)(2進制),其前26位是相同的,都是11000000 00000000 00000000 00,只有后面6位不1樣。人們發(fā)明了1種方法來表示這個有規(guī)律可循的范圍,即:192.0.0.0/26,26表示這1范圍的地址的前26位都是相同的,稱之為IP地址的前綴;192.0.0.0是這個范圍的起始IP。
一樣道理,192.0.0.64 ~ 192.0.0.127表示為192.0.0.64/26;192.0.0.128 ~ 192.0.0.191表示為192.0.0.128/26;
192.0.0.192 ~ 192.0.0.255表示為192.0.0.192/26。
那末現(xiàn)在,路由器的每一個接口連到1個交換機(交換機本身沒有IP的)上,交換機再與各個端系統(tǒng)相連,并且與這個交換機相連的每一個接口都有相同的前綴:各個端系統(tǒng)就沒必要多言了,為何路由器上的那個接口也要保持相同的前綴呢?雖然前面說過它也有自己的IP,但沒說具體是怎樣的。實際上,這個路由器的接口和交換機那1頭的端系統(tǒng)構(gòu)成了1個子網(wǎng),同1子網(wǎng)內(nèi)的所有接口必須具有相同的前綴,這樣我們就能夠給出這個子網(wǎng)的地址,也就是上面所說的起始IP(注意到起始IP的末尾幾位都是0,國際規(guī)定,1個IP除去前綴后的末尾幾位若都是0,則這個IP代表這個子網(wǎng)的IP,且該IP不能用做子網(wǎng)內(nèi)任意1臺端系統(tǒng)的IP)。
再來談?wù)勥@個路由器接口的IP,其實我覺得可以把它看作子網(wǎng)派到路由器內(nèi)部的外交官,是為了子網(wǎng)內(nèi)部的其他端系統(tǒng)方便尋覓路由器而設(shè)定的。從上面的分析中我們可以看到,在路由器內(nèi)部是不會用到這個接口的IP的,由于路由器直接給了它1個內(nèi)部編號。
好了,上面的那臺路由器算是入門級的了,它下面有4個子網(wǎng)(而且網(wǎng)段很平均),這固然是1種理想化的狀態(tài),現(xiàn)實中可能要復(fù)雜的多??梢韵氲剑@臺路由器下面的4個子網(wǎng)其實構(gòu)成了另外一個大1點的子網(wǎng),而這臺路由器就是高級1點的交換機,這個大1點的子網(wǎng)的地址不難看出就是192.0.0.0/24,前24位是相同的。
子網(wǎng)是1個相對的概念,我們也能夠說真?zhèn)€中國的網(wǎng)絡(luò)也是1個子網(wǎng),由于它上面也還有高級路由器。明顯,子網(wǎng)的范圍越大,其前綴越短;子網(wǎng)越小,前綴越長。ISP們其實就是拿到了某個子網(wǎng)的分配權(quán),然后出賣IP地址。越高級的ISP管理的子網(wǎng)的范圍越大。那末誰是終極大BOSS呢?哈哈,ICANN,DNS也是歸他管的,谷歌1下吧。
還有1個問題:在最底層的那種路由器中(也稱為網(wǎng)關(guān)路由器),為何需要1個交換機才能與各個端系統(tǒng)相連呢?難道不能從1個接口伸出很多條線路然后連接各個主機?呃,這個問題我也還沒想明白。。