ADVERTISEMENT
CIDR無類別網域間路由
進入新的單元之前,請各位先想想自己是否了解了Class的分類,不用精確到記住各個Class有哪些保留位置,但要記得每個Class的網路和主機分別占了多少位元的網路位址,Class A網路位址為前8位元、Class B為前16位元、Class C為前24位元,雖不是相當精準的分法,但有助於了解下一階段的子網路分割。
Class A可提供125個網路,每個網路16777214個主機位址;16777214!沒錯!就是這麼多,單一網路就將近有1700萬台主機,哪家公司規模這麼龐大,塞得下這麼多台電腦,就算員工是章魚還是蜈蚣也是筆龐大的數目。
在分類網路發明出來後,很快地就發現到了這個問題,Class A網路太龐大、Class C網路又有點小,在實際使用上其實並不方便。回過頭來想想,分類網路將位址分成網路位址加主機位址的形式,但是網路位址和主機位址所占用的位元數是固定的,如果我們能彈性指派位元占用數目,不就可以任意的切割網路了嗎!
▲子網路遮罩控制了網路區段的大小
子網路切割
一旦我們有了「網路和主機位址不必佔據固定的位元數量」的觀念後,我們就可以來任意切割網路區段。假設現在分配到192.168.0.0∼192.168.0.255的位址,我們可以將它直接劃作1個網路,若網路位址為前方24個位元,可塞入254台主機;或者是分割成2個網路,網路位址為前方25個位元,各可塞入126台主機。而在網路中,該如何確定網路位址的長度,就要靠子網路遮罩的設定了。
要進行子網路切割,將IP位址全部轉換為0或1比較容易理解,例如255.255.255.0的子網路遮罩,轉換為2進位制就是11111111 11111111 11111111 00000000。再利用子網路遮罩將和目前主機的IP做運算,便可得出目前的網路位址為何,最大可容納多少的主機數量。
以192.168.0.1位址和子網路遮罩255.255.255.0做為例子,轉換為2進位後便是11000000 10101000 00000000 00000001和11111111 11111111 11111111 00000000,將兩者進行布林運算AND之後,會得到11000000 10101000 00000000 00000000,轉換回十進位為192.168.0.0,所以192.168.0.0就是192.168.0.1的網路位置。
由此範例可知,子網路遮罩位元數為1的部分,就是對應到IP位址的網路部分;反過來說,可利用子網路遮罩控制IP位址中網路位元占用的多寡,控制子網路的大小(網路位元占得越多,主機位元就更少,單一網路可容納的主機數也越小)。藉由規則反推,Class A的子網路遮罩就是255.0.0.0、Class B為255.255.0.0、Class C就是255.255.255.0。
子網路遮罩位元為0的部分就是主機位址,掐頭去尾的去掉網路位址和廣播位址之後,192.168.0.0/24就有254個主機位址可供分配。
2進位轉10進位速算法
請先由右至左,依序在紙上寫下2從0開始的指數數值(1、2、4、8、16⋯⋯),你想換算的位數有多少、就寫多少個。之後將2進位數值一一寫在2的指數數值下方,若2的指數下方的2進為數值為1,就將這些數值全部加起來,出來的數字就是這串2進位數字轉換為10進位的數值。
利用子網路遮罩長度
上面所示範的網路切割方式,還是固定在Class C的範疇裡,接下來示範向Class C位址的主機位元借1位,讓網路位元變成25位、主機位元占7位,子網路遮罩就變成11111111 11111111 11111111 10000000(255.255.255.128)。與192.168.0.1計算後,得到網路位址192.168.0.0,這種藉由改變子網路遮罩的做法,稱為可變長度子網路遮蓋(variable length subnet masking)。
前述例子的IP位址192.168.0.1,無論是子網路遮罩255.255.255.0或是255.255.255.128,計算出來的網路都是192.168.0.0,讀者可能感受不出差異。若是今天主機位址為192.168.0.200,計算出來的網路位址將不同;當子網路遮罩為255.255.255.0,網路位址為192.168.0.0,當子網路遮罩為255.255.255.128時,網路位址則是192.168.0.128,分屬不同網路。
超網合併
除了大網路分割成小網路之外,利用VLSM也可將小網路合併成大網路,也就是將原本劃歸為網路位址的位元,變成主機位元使用。
再使用192.168.0.1做為例子,如果現在子網路遮罩設定成11111111 11111111 11111110 00000000(255.255.254.0),那麼192.168.0.1的網路位址就是192.168.0.0;在此同時,192.168.1.1的網路位址也會變成192.168.0.0,所以192.168.0.1和192.168.1.1原本在Class C下分屬2個不同的網路,藉由擴大主機位址範圍,讓這2個位址在不需經由NAT的情況下連線。
這種網路合併的情況除了在公司內部網路會發生之外,還常見於一連串的固定IP分配。由於現今IPv4位址短少,不太可能1次配發整個Class C網段,可能改發較小的/22或是/24,或是更小的/28。
不過網路合併也有個但書,就是合併的網路區段位址必須是連續的,因此192.168.0.0/24和192.168.1.0/24可以直接合併,但是192.168.0.0/24和192.168.2.0/24無法跳過192.168.1.0/24合併,因為無法算出同時適合192.168.0.0/24和192.168.2.0/24,卻不適合192168.1.0/24的子網路遮罩。
使用/31或是/32會發生什麼事?
首先/32的網路是沒有意義的,因為只有1個位址,跟拔掉網路線的意思差不多,/31就是個有趣的議題,容筆者娓娓道來。
/30一般是切割子網路的極限,內含4個位址,去掉頭尾的網路位址和廣播位址,只剩下2個可分配給主機的位址,因此將資料傳送給另1台主機和將資料傳送至廣播位址的意義是一樣的。/31內部只有2個位址,IP末碼不是0就是1,末碼0已經被拿去當作網路位址,無法分配,剩下末碼1的位址可以當作主機位址,廣播位址就消失了。若是想要廣播功能,可將資料丟向末碼為0的網路位址,這個功能是早期所定義出來的,部分路由器依然支援這種廣播方式。
/31只使用在點對點,且2端分屬於不同網路的連結上,有興趣的讀者可以搜尋「RFC 3021」。
CIDR的限制以及其它改變
了解利用VLSM的改變控制網路大小,現在也要來看一下其中的限制。第一,網路只能以2的指數做為網路大小,例如把網路分割為1、2、4、8、16、32⋯⋯個位址數量,其它的數字19、21、37⋯⋯都無法分配。這是由於網路位址本來就是0與1 2進位的組合,所以除了2的指數之外,無法分割為其它的數量。子網路遮罩也必須是連續1加上連續0的組合,不能出現11111111 11111110 11111111 00000000或是11111111 11111111 00001000 00000000的狀況。
其它還有網路廣播位置的改變,若是以分類網路的標準,網路位址的結尾8位元一定是00000000,廣播位址的末8碼一定是11111111。但是導入CIDR之後,位址末碼為00000000的IP位址也可分配給主機使用,而廣播位址的末8碼也不一定是11111111。
舉個例子,現在有個192.168.0.0/23的網路區段,IP位址為192.168.0.0∼192.168.1.255,此時的網路位址為192.168.0.0,廣播位址為192.168.1.255,不知大家看出端倪了嗎?在CIDR無類別網域間路由的規則中,第一個位址就是此網段的識別位址,最後的IP位址就是此網段的廣播位址。在此例中192.168.0.255和192.168.1.0都可以正常的分配給主機使用。事實上主機位址全為0或是全為1的位址可不可以分配給主機使用,取決於路由器的全域設定,Cisco IOS的預設值是允許的。
再舉1個192.168.0.0/25的例子,IP位址為192.168.0.0∼192.168.0.127,第一個位址192.168.0.0為網路位址,最後1個192.168.0.127位址就是此網段的廣播位置。所以說在CIDR的世界中,IP位置要配合子網路遮罩使用,才能知道此IP被劃分在哪個網路之中,廣播位址是多少。
練習切割網路
前面的教導大家如何從子網路遮罩推算回網路的大小,但在現實生活中網管的任務經常是拿到1段IP位址區段,使用這些位址配出需要的網路大小。例如將192.168.0.0/24均分成3等分(事實上不可能),或是切出1個至少可容納50個人的子網路,其它部分自成1個子網,這些都是在網路設計時需要應對的地方。當然一般使用者只需要將自己家中設定成/24的網路環境即可,並不需要去擔心外面網際網路的IP路由世界,但期許看完本章後有基本的認知,設定家用路由器更得心應手。
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!