本篇結(jié)構(gòu):
- 前言
- 劃分子網(wǎng)
- 無(wú)分類編址CIDR(構(gòu)造超網(wǎng))
一、前言
接著上一篇,繼續(xù)分享網(wǎng)際協(xié)議IP的內(nèi)容--劃分子網(wǎng)和構(gòu)造超網(wǎng)。
那么,為什么要?jiǎng)澐肿泳W(wǎng)和構(gòu)造超網(wǎng)?
我們知道,分類的IP地址主要有A類、B類、C類三類(D類為多播地址),其中:
- A類擁有超過(guò)65535臺(tái)主機(jī)
- B類擁有介于255~65535臺(tái)主機(jī)
- C類擁有小于255臺(tái)主機(jī)
這種分類卻又幾個(gè)很明顯的缺陷:
- IP地址空間的利用率有時(shí)候很低,地址浪費(fèi)大;
只有兩、三臺(tái)主機(jī)的網(wǎng)絡(luò),也至少要一個(gè)C類IP地址,A、B類浪費(fèi)更嚴(yán)重,少有達(dá)上萬(wàn)臺(tái)主機(jī)的大型IP網(wǎng)絡(luò)。
- 路由表太大,影響網(wǎng)絡(luò)性能
路由器需要能夠從路由表中找出怎樣到達(dá)其他網(wǎng)絡(luò)的下一跳地址,而一個(gè)物理網(wǎng)絡(luò)對(duì)應(yīng)一個(gè)網(wǎng)絡(luò)號(hào),如果網(wǎng)絡(luò)越多,則路由表越大,路由器的存儲(chǔ)空間就需要越大,查找也更耗時(shí),但使用構(gòu)造超網(wǎng),則能減少網(wǎng)絡(luò)數(shù),提升性能。
- 不夠靈活
企業(yè)有很多部門,每個(gè)部門可能需要各自獨(dú)立的網(wǎng)絡(luò),這怎么辦呢?再申請(qǐng)網(wǎng)絡(luò)?可是人數(shù)又不多,怎么辦呢?劃分子網(wǎng)剛好可以解決這個(gè)問(wèn)題,而且便于管理。
二、劃分子網(wǎng)
劃分子網(wǎng)是指將IP類網(wǎng)劃分為若干個(gè)子網(wǎng)。一般是從網(wǎng)絡(luò)的主機(jī)號(hào)用若干位作為子網(wǎng)號(hào)(當(dāng)然用來(lái)分配的主機(jī)號(hào)就相應(yīng)減少),于是二級(jí)網(wǎng)絡(luò)便成了三級(jí)網(wǎng)絡(luò)。

劃分子網(wǎng)后,發(fā)送到子網(wǎng)某臺(tái)主機(jī)的IP數(shù)據(jù)報(bào),仍是根據(jù)IP數(shù)據(jù)報(bào)的目的網(wǎng)絡(luò)號(hào)找到連接到路由器,然后路由器根據(jù)IP數(shù)據(jù)報(bào)的目的網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào)找到子網(wǎng),再把IP數(shù)據(jù)報(bào)交付主機(jī)。
并且,劃分了子網(wǎng)后,ip地址的網(wǎng)絡(luò)號(hào)是不變的,因此在局域網(wǎng)外部看來(lái),這里仍然只存在一個(gè)網(wǎng)絡(luò),即網(wǎng)絡(luò)號(hào)所代表的那個(gè)網(wǎng)絡(luò);但在網(wǎng)絡(luò)內(nèi)部卻是另外一個(gè)景象,因?yàn)槲覀兠總€(gè)子網(wǎng)的子網(wǎng)號(hào)是不同的,當(dāng)用化分子網(wǎng)后的ip地址與子網(wǎng)掩碼做'與'運(yùn)算時(shí),每個(gè)子網(wǎng)將得到不同的子網(wǎng)地址,從而實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)的劃分。
2.1、子網(wǎng)掩碼

假如互聯(lián)網(wǎng)的一個(gè)數(shù)據(jù)報(bào)(目的地址是子網(wǎng)154.13.3.10)到達(dá)路由器R(154.13.0.0),那它是如何到達(dá)子網(wǎng)1(154.13.3.0)的呢?
我們知道,從IP數(shù)據(jù)報(bào)中是無(wú)法知道目的主機(jī)所連接的網(wǎng)絡(luò)是不是已經(jīng)劃分了子網(wǎng),因?yàn)镮P數(shù)據(jù)報(bào)中并沒(méi)有這些信息,這就用到了子網(wǎng)掩碼。
1.子網(wǎng)掩碼的概念
子網(wǎng)掩碼是一個(gè)應(yīng)用于TCP/IP網(wǎng)絡(luò)的32位二進(jìn)制值,它可以屏蔽掉ip地址中的一部分,從而分離出ip地址中的網(wǎng)絡(luò)部分與主機(jī)部分,基于子網(wǎng)掩碼,管理員可以將網(wǎng)絡(luò)進(jìn)一步劃分為若干子網(wǎng)。
2.為什么需要使用子網(wǎng)掩碼
前面說(shuō)過(guò),在使用TCP/IP協(xié)議的兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信時(shí),IP數(shù)據(jù)報(bào)中是沒(méi)有子網(wǎng)的相關(guān)信息,這時(shí)可以通過(guò)將本機(jī)的子網(wǎng)掩碼與接受方主機(jī)的ip地址進(jìn)行'與'運(yùn)算,即可得到目標(biāo)主機(jī)所在的網(wǎng)絡(luò)號(hào),又由于每臺(tái)主機(jī)在配置TCP/IP協(xié)議時(shí)都設(shè)置了一個(gè)本機(jī)ip地址與子網(wǎng)掩碼,所以可以知道本機(jī)所在的網(wǎng)絡(luò)號(hào)。
通過(guò)比較這兩個(gè)網(wǎng)絡(luò)號(hào),就可以知道接受方主機(jī)是否在本網(wǎng)絡(luò)上。如果網(wǎng)絡(luò)號(hào)相同,表明接受方在本網(wǎng)絡(luò)上,那么可以通過(guò)相關(guān)的協(xié)議把數(shù)據(jù)包直接發(fā)送到目標(biāo)主機(jī);如果網(wǎng)絡(luò)號(hào)不同,表明目標(biāo)主機(jī)在遠(yuǎn)程網(wǎng)絡(luò)上,那么數(shù)據(jù)包將會(huì)發(fā)送給本網(wǎng)絡(luò)上的路由器,由路由器將數(shù)據(jù)包發(fā)送到其他網(wǎng)絡(luò),直至到達(dá)目的地。在這個(gè)過(guò)程中你可以看到,子網(wǎng)掩碼是不可或缺的!
3.如何用子網(wǎng)掩碼得到網(wǎng)絡(luò)/主機(jī)地址
既然子網(wǎng)掩碼這么重要,那么它是如何分離出ip地址中的網(wǎng)絡(luò)地址和主機(jī)地址的呢?
過(guò)程如下:
- 將ip地址與子網(wǎng)掩碼轉(zhuǎn)換成二進(jìn)制;
- 將二進(jìn)制形式的ip地址與子網(wǎng)掩碼做'與'運(yùn)算,將答案化為十進(jìn)制便得到網(wǎng)絡(luò)地址;
- 將二進(jìn)制形式的子網(wǎng)掩碼取'反';
- 將取'反'后的子網(wǎng)掩碼與ip地址做'與'運(yùn)算,將答案化為十進(jìn)制便得到主機(jī)地址。
具體演示一下:
假設(shè)有一個(gè)I P 地址:192.168.0.1
子網(wǎng)掩碼為:255.255.255.0
化為二進(jìn)制為:IP地址11000000.10101000.00000000.00000001
子網(wǎng)掩碼11111111.11111111.11111111.00000000
將兩者做'與'運(yùn)算得:11000000.10101000.00000000.00000000
將其化為十進(jìn)制得:192.168.0.0
這便是上面ip的網(wǎng)絡(luò)地址,主機(jī)地址以此類推。
4.子網(wǎng)掩碼的分類
- 缺省子網(wǎng)掩碼:
即未劃分子網(wǎng),對(duì)應(yīng)的網(wǎng)絡(luò)號(hào)的位都置1,主機(jī)號(hào)都置0。
A類網(wǎng)絡(luò)缺省子網(wǎng)掩碼:255.0.0.0
B類網(wǎng)絡(luò)缺省子網(wǎng)掩碼:255.255.0.0
C類網(wǎng)絡(luò)缺省子網(wǎng)掩碼:255.255.255.0
- 自定義子網(wǎng)掩碼:
將一個(gè)網(wǎng)絡(luò)劃分為幾個(gè)子網(wǎng),需要每一段使用不同的網(wǎng)絡(luò)號(hào)或子網(wǎng)號(hào),實(shí)際上我們可以認(rèn)為是將主機(jī)號(hào)分為兩個(gè)部分:子網(wǎng)號(hào)、子網(wǎng)主機(jī)號(hào)。 形式如下:
未做子網(wǎng)劃分的ip地址:網(wǎng)絡(luò)號(hào)+主機(jī)號(hào)
做子網(wǎng)劃分后的ip地址:網(wǎng)絡(luò)號(hào)+子網(wǎng)號(hào)+子網(wǎng)主機(jī)號(hào)
也就是說(shuō)ip地址在化分子網(wǎng)后,以前的主機(jī)號(hào)位置的一部分給了子網(wǎng)號(hào),余下的是子網(wǎng)主機(jī)號(hào)。
5.劃分子網(wǎng)的利弊
我們明白局域網(wǎng)是廣播通信的,而廣播傳輸,是向本網(wǎng)段中的所有節(jié)點(diǎn)都發(fā)送同樣的數(shù)據(jù)包,這會(huì)占用很多的網(wǎng)絡(luò)資源(因?yàn)槊總€(gè)廣播數(shù)據(jù)包硬件設(shè)備都要對(duì)它進(jìn)行分析),特別是帶寬資源。但是在這些廣播傳輸中對(duì)終端真正有用的只是所有廣播接收用戶中的一個(gè),因?yàn)閺V播的目的就是查詢目標(biāo)用戶的MAC地址,這樣也就是在所有廣播傳輸中,絕大多數(shù)都是沒(méi)有任何作用的,純粹是資源的浪費(fèi)。而且網(wǎng)絡(luò)規(guī)模越大,廣播數(shù)據(jù)包發(fā)送所占用的資源就越多(因?yàn)閺V播中要傳輸?shù)拇螖?shù)越多),很可能就形成廣播風(fēng)暴,正常的網(wǎng)絡(luò)通信可能被中斷,致使網(wǎng)絡(luò)癱瘓。
利:
- 劃分子網(wǎng)一個(gè)最為重要意義就在于減少?gòu)V播所帶來(lái)的負(fù)面影響,提高性能的整體性能。因?yàn)閺V播數(shù)據(jù)包只能在同一網(wǎng)段中傳輸,網(wǎng)絡(luò)規(guī)模小了,網(wǎng)絡(luò)中用戶數(shù)少了,當(dāng)然所占用的資源也就少了。
- 節(jié)省了IP地址資源。
- 由于不同子網(wǎng)之間是不能直接通信的(但可通過(guò)路由器或網(wǎng)關(guān)進(jìn)行),在網(wǎng)絡(luò)安全形勢(shì)不容樂(lè)觀的今天,網(wǎng)絡(luò)越小,安全性就相對(duì)越高,因?yàn)槿肭值耐窘?jīng)小了。
- 便于維護(hù)。
弊:
- 可連接的主機(jī)數(shù)減少。
- 至于各子網(wǎng)間不能直接通信,可以說(shuō)是既是它的利,又是它的害,會(huì)帶來(lái)諸多的不便。
PS:省了IP地址資源與連接主機(jī)數(shù)減少看上去相互矛盾,其實(shí)這要看具體的對(duì)象來(lái)定。對(duì)本身規(guī)模就較大(200個(gè)用戶以上)的網(wǎng)絡(luò),劃分子網(wǎng)后,可用的IP地址數(shù)是減少了,但是如果對(duì)于那些很小的小型企業(yè)網(wǎng)絡(luò)來(lái)說(shuō),劃分子網(wǎng)后又可節(jié)省大量IP地址資源。因?yàn)閹讉€(gè)小網(wǎng)絡(luò)可以共用一個(gè)大的網(wǎng)絡(luò)地址范圍,而且同樣可以取到隔離的作用。
2.2、使用子網(wǎng)時(shí)分組的轉(zhuǎn)發(fā)
使用子網(wǎng)劃分后,路由表必須包含以下三項(xiàng)內(nèi)容:目的網(wǎng)絡(luò)地址、子網(wǎng)掩碼和下一跳地址。
在劃分子網(wǎng)的情況下,路由轉(zhuǎn)發(fā)分組的算法如下:
- 從收到的數(shù)據(jù)報(bào)的首部提取目的IP地址D。
- 先判斷是否為直接交付。對(duì)路由器直接相連的網(wǎng)絡(luò)逐個(gè)進(jìn)行檢查:用各網(wǎng)絡(luò)的子網(wǎng)掩碼和D逐位相“與”(AND操作),看結(jié)果是否和相應(yīng)的網(wǎng)絡(luò)地址匹配。若匹配,則把分組進(jìn)行直接交付(還需把D轉(zhuǎn)換成物理地址,把數(shù)據(jù)報(bào)封裝成幀發(fā)送出去),轉(zhuǎn)發(fā)任務(wù)結(jié)束。否則就是間接交付,執(zhí)行(3)。
- 若路由表中有目的地址為D的特定主機(jī)路由,則把數(shù)據(jù)報(bào)傳送給路由表中所指明的下一跳路由器;否則,執(zhí)行(4)。
- 對(duì)路由表中的每一行(目的網(wǎng)絡(luò)地址、子網(wǎng)掩碼、下一跳地址),用其中的子網(wǎng)掩碼和D逐位相“與”(AND),其結(jié)果為N。若N與該行的目的網(wǎng)絡(luò)地址匹配,則把數(shù)據(jù)報(bào)傳送給該行指明的下一跳路由器;否則,執(zhí)行(5)。
- 若路由表中有一個(gè)默認(rèn)路由,則把數(shù)據(jù)報(bào)傳送給路由表中所指明的默認(rèn)路由器;否則,執(zhí)行(6)。
- 報(bào)告轉(zhuǎn)發(fā)分組出錯(cuò)。
Ps:可以和沒(méi)劃分子網(wǎng)的情況比較下,發(fā)現(xiàn)大體的流程是不變的:提取IP地址、判斷是否在同一網(wǎng)絡(luò)、判斷是否有特定路由、判斷間接交付、判斷是否有默認(rèn)路由。
三、無(wú)分類編址CIDR(構(gòu)造超網(wǎng))
最初的因特網(wǎng)設(shè)計(jì)者沒(méi)有預(yù)想到網(wǎng)絡(luò)會(huì)有如此快速地發(fā)展,因此現(xiàn)在網(wǎng)絡(luò)面臨的問(wèn)題都可以追溯到因特網(wǎng)發(fā)展的早期決策上,IP地址的分配更能體現(xiàn)這點(diǎn)。目前使用的IPv4地址使用32位的地址,即在IPv4的地址空間中有2的32次冪(4,294,967,296,約為43億)個(gè)地址可用。
這樣的地址空間在因特網(wǎng)早期看來(lái)幾乎是無(wú)限的,于是便將IP地址根據(jù)申請(qǐng)而按類別分配給某個(gè)組織或公司,而很少考慮是否真的需要這么多個(gè)地址空間,沒(méi)有考慮到IPv4地址空間最終會(huì)被用盡。
因此,IPv4地址是按照網(wǎng)絡(luò)的大?。ㄋ褂玫腎P地址數(shù))來(lái)分類的,它的編址方案使用“類”的概念。A、B、C三類IP地址的定義很容易理解,也很容易劃分,但是在實(shí)際網(wǎng)絡(luò)規(guī)劃中,它們并不利于有效地分配有限的地址空間。對(duì)于A、B類地址,很少有這么大規(guī)模的公司能夠使用,而C類地址所容納的主機(jī)數(shù)又相對(duì)太少。所以有類別的IP地址并不利于有效地分配有限的地址空間,不適用于網(wǎng)絡(luò)規(guī)劃。
在這種情況下,人們開(kāi)始致力于下一代因特網(wǎng)協(xié)議——IPv6的研究。由于現(xiàn)在IPv6的協(xié)議并不完善和成熟,需要長(zhǎng)期的試驗(yàn)驗(yàn)證,因此,IPv4到IPv6的完全過(guò)渡將是一個(gè)比較長(zhǎng)的過(guò)程,在過(guò)渡期間我們?nèi)匀恍枰贗Pv4上實(shí)現(xiàn)網(wǎng)絡(luò)間的互連。而在90年代初期引入了變長(zhǎng)子網(wǎng)掩碼(VLSM)和無(wú)類域間路由(CIDR)等機(jī)制,作為目前過(guò)渡時(shí)期提高IPv4地址空間使用效率的短期解決方案起到了很大的作用。
CIDR(無(wú)類型域間選路,Classless Inter-Domain Routing)主要是為了解決以下三個(gè)問(wèn)題而誕生的。
- 大小比較適中的B類IP地址的嚴(yán)重匱乏。
- 因特網(wǎng)主干網(wǎng)上的路由表中的項(xiàng)目數(shù)急劇增長(zhǎng)。
- Ipv4地址遲早被分配完,到時(shí)候再無(wú)IP地址可以分配。
3.1、CIDR特點(diǎn)
CIDR最主要有兩個(gè)以下特點(diǎn):
- 消除傳統(tǒng)的A,B,C地址和劃分子網(wǎng)的概念,更有效的分配IPv4的地址空間,CIDR使IP地址又回到無(wú)分類的兩級(jí)編碼。記法:IP地址::={<<網(wǎng)絡(luò)前綴>,<<主機(jī)號(hào)>}。CIDR還使用“斜線記法”即在IP地址后面加上“/”然后寫(xiě)網(wǎng)絡(luò)前綴所占的位數(shù)(192.198.80.72/22)。
- CIDR把網(wǎng)絡(luò)前綴都相同的連續(xù)IP地址組成一個(gè)“CIDR地址塊”,即強(qiáng)化路由聚合(構(gòu)成超網(wǎng))。一個(gè)CIDR地址塊中有很多地址,所以在路由表中就利用CIDR地址塊來(lái)查找目的網(wǎng)絡(luò)。這種地址的聚合常稱為路由聚合,它是的路由表中的一個(gè)項(xiàng)目可以表示原來(lái)傳統(tǒng)分類地址的很多個(gè)理由。路由聚合也稱為構(gòu)成超網(wǎng)。路由聚合有利于減少路由器之間的路由選擇信息的交換,從而提高了整個(gè)因特網(wǎng)的性能。
PS:
- 子網(wǎng)是把網(wǎng)絡(luò)拆分,而超網(wǎng)則是把網(wǎng)絡(luò)聚合。
- 為了更方便地進(jìn)行路由選擇,CIDR使用32位的地址掩碼。地址掩碼是一串1和一串0組成,而1的個(gè)數(shù)就是網(wǎng)絡(luò)前綴的長(zhǎng)度。雖然CIDR不使用子網(wǎng)了,但由于目前仍有一些網(wǎng)絡(luò)還使用子網(wǎng)劃分和子網(wǎng)掩碼,因此CIDR使用的地址掩碼也可以繼續(xù)稱為子網(wǎng)掩碼。斜線記法中,斜線后面的數(shù)字就是地址掩碼中1的個(gè)數(shù)。
3.2、CIDR路由查詢
1.最長(zhǎng)網(wǎng)絡(luò)前綴
在使用使CIDR時(shí),由于采用了網(wǎng)絡(luò)前綴這種記法,IP地址由網(wǎng)絡(luò)前綴和主機(jī)號(hào)這兩個(gè)部分組成,因此在路由表中的項(xiàng)目也要有相應(yīng)的改變。這時(shí),路由表中的每個(gè)項(xiàng)目由“網(wǎng)絡(luò)前綴”和“下一跳地址”組成。但是在查找路由表時(shí)可能會(huì)得到不止一個(gè)匹配結(jié)果。這樣就帶來(lái)一個(gè)問(wèn)題:我們應(yīng)當(dāng)從這些匹配結(jié)果中選擇哪一條路由呢?
這個(gè)時(shí)候我們應(yīng)當(dāng)從匹配結(jié)果中選擇具有最長(zhǎng)網(wǎng)絡(luò)前綴的路由,這叫作最長(zhǎng)前綴匹配。
可以參考《計(jì)算機(jī)網(wǎng)絡(luò)》書(shū)中的一個(gè)例子:
假定某ISP已擁有地址塊206.0.64.0/18。
現(xiàn)在該ISP給某大學(xué)分配一個(gè)地址塊206.0.68.0/22,然后這個(gè)大學(xué)再對(duì)本校的各系分配地址塊,例如四系206.0.71.128/25。
假定四系希望ISP把轉(zhuǎn)發(fā)給四系的數(shù)據(jù)報(bào)直接發(fā)給四系而不要經(jīng)過(guò)大學(xué)的路由器,但又不愿意改變自己使用的IP地址塊。
于是ISP路由器有以下兩個(gè)項(xiàng)目,即206.0.68.0/22(大學(xué))和206.0.71.128/25(四系)。
現(xiàn)在假定ISP收到一個(gè)數(shù)據(jù)報(bào),其目的IP地址為D=206.0.71.130,把D分別和路由表中這兩個(gè)項(xiàng)目的掩碼逐位相”與”(AND操作)。
不難想,這個(gè)這兩個(gè)項(xiàng)目肯定都是符合的,于是ISP選擇具有最長(zhǎng)網(wǎng)絡(luò)前綴的IP地址進(jìn)行轉(zhuǎn)發(fā)(即選擇兩個(gè)匹配結(jié)果中地址更具體的一個(gè))。

2.二叉線索樹(shù)
最長(zhǎng)前綴匹配會(huì)使查詢變得復(fù)雜,當(dāng)路由表很大時(shí),查詢效率會(huì)是個(gè)問(wèn)題,為了加快路由器對(duì)路由表的查找,通常是使用二叉線索樹(shù)進(jìn)行查找。
步驟如下:
- 找出每一個(gè)IP地址的唯一前綴;
- 用IP地址的唯一前綴構(gòu)造出一棵二叉線索樹(shù);
- 然后對(duì)二叉線索樹(shù)進(jìn)行搜索.
由于唯一前綴一般都小于32位,于是樹(shù)的深度一般都小于32層。事實(shí)上在實(shí)際應(yīng)用中,當(dāng)你搜索到一個(gè)葉節(jié)點(diǎn)時(shí),還必須將尋找匹配的目的地址和該葉節(jié)點(diǎn)的子網(wǎng)掩碼進(jìn)行逐位”與”運(yùn)算,看結(jié)果是否與對(duì)應(yīng)的網(wǎng)絡(luò)前綴相同。若匹配,就按下一條的接口轉(zhuǎn)發(fā)該分組。否則,就丟棄該分組。
3.3、構(gòu)成超網(wǎng)的幾個(gè)規(guī)則
- 構(gòu)成超網(wǎng)的地址塊數(shù)必須是2的N(N=1、2、3……)次冪。
- 構(gòu)成超網(wǎng)的地址塊(超塊)必須是連續(xù)的地址塊。
- 超塊的第一個(gè)地址的第三字節(jié)必須能夠被塊數(shù)均勻的分開(kāi)(開(kāi)始地址必須能被地址數(shù)N整除)