雖然上面已經把一個網絡劃分為若干個子網,但路由器R1必須知道數據報中目的IP地址的網絡號net-id、子網號-id和主機號host-id各是多少位,這就需要通過子網掩碼( Mask)來實現。
子網掩碼和IP地址一樣,也是32位長,由一串1和跟隨的一串0組成。子網掩碼中的1對應于IP地址中的網絡號net-id和子網號-id,而子網掩碼中的0對應于IP地址中的主機號host-id。要得到網絡或子網地址,只需將IP地址和子網掩碼進行按位"與"(AND)運算即可。下圖說明了子網掩碼的工作方式。
進行按位"與"(AND)運算可得到網絡地址
上圖(a)表示在未劃分子網情況下,網絡地址是IP地址與它默認的子網掩碼(255.255.0.0)按位"與"運算的結果,即將主機號host-id設置為0的IP地址。上圖(b)表示在劃分子網情況下,當主機號借用8位作為子網號-id,子網掩碼中"1"的個數相應地增加8,即255.255.255.0。這時將子網掩碼和IP地址按位"與"運算就得到了子網地址。這里要注意是:網絡地址(在劃分子網時常稱為子網地址)并不僅僅是一個子網號-id,而是將主機號host-id設置為0的IP地址。可以看出c類ip地址劃分4個子網,子網掩碼不能單獨存在c類ip地址劃分4個子網,它必須結合IP地址一起使用。
與IP地址相同,子網掩碼通常也使用點分十進制表示法表示,如255.255.255.0、255.255.255.240等。有時為了表示方便,通常在IP地址后加一個"/網絡號和子網號位數"。例如,210.45.12.58/28就表示該IP地址的網絡號net-id和子網號-id共占用28位,主機號占用32-28=4位,如果用點分十進制表示法表示,則子網掩碼是255.255.255.240(...)。
使用子網掩碼的好處是:不管網絡是否劃分子網,也不管IP地址中的網絡號net-id和子網號-id是多少位,只要將子網掩碼和IP地址進行按位"與"運算,就可立即得出網絡地址。這樣在路由器處理到來的IP分組時就可采用同樣的算法。
如果一個網絡不劃分子網,那么該網絡的子網掩碼就使用默認子網掩碼。默認子網掩碼中值為1的位與IP地址的網絡號net-id所占位正好相對應。因此默認子網掩碼和不劃分子網的IP地址按位"與"(AND)運算,就得出該IP地址的網絡地址,這樣做可以不用查找該地址的分類位就能知道這是哪一類的IP地址。顯然,A類、B類和C類網絡默認子網掩碼分別是255.0.0.0(/8)、255.255.0.0(/16)、255.255.255.0(/24),如下圖所示。
A類、B類和C類IP地址的默認子網掩碼