目錄

前言
Network ID
Subnet Mask 子網絡遮罩
Supernet
VLSM 可變長子網路遮罩
Private IP Address

前言

什麽是 IP Address 網絡位址呢?相信就算對網絡認識不深的朋友都知道,IP Address 就是一台電腦在網絡上的地址。網絡供應商甚至可以憑 IP Address 知道電腦的物理位置,就像香港 TVB 劇集一樣,那些警探只要查到壞人的 IP Address 便立刻知道壞人的所在位置,衝上門拉人。另外我們在電腦除了看到 IP Address 外,還有 Subnet Mask 子網絡遮罩,這又是什麼呢?本篇教學會詳細講解。

ipv4

Network ID

現在一般使用的 IP (Internet Protocol) 為版本 4,又稱為 IPv4。IPv4 的 IP Address 由 32 位元組成,即 32 個 1 和 0,例如: 00001011110000100011111101100100,很明顯,這只適合機器閱讀,人類很難理解,於是我們便把 32 位元的 IP Address 分成 4 組,每組之間用一點隔開: 00001011.11000010.00111111.01100100,然後把每一組分別轉換成十進數,所以這串 IP Address 就變成我們常見的格式: 11.194.63.100。理論上,任何一台連上網絡的電腦、電話、平板電腦、隱閉鏡頭等等都要有一個獨一無二的 IP Address,如果我的電腦需要與對方的電腦溝通,就必需要知道對方的 IP Address。問題是,我的電腦並不是和對方的電腦直接連線,我知道對方的 IP Address 之後又如何和對方溝通呢?答案是 Router 路由器,網絡上有很多 Router 負責傳送訊息。

Router 的責任是記錄 IP Address 的和相應的接駁位置,當有訊息傳來時,就按目的地位置把訊息交給另一隻 Router,直至訊息傳到目的地為止,有點像快遞公司,收到快件後就由速遞人員拿到最近的收發站,收發站的職員又把快件送到另一個最近目的地的收發站,如此類推,直至送到收件者手上。

ipv4

ipv4

當然這個例子只是電腦網絡的一個濃縮版本,世界上有成千上萬的 Router 去應付百萬千萬台電腦。問題來了,用以上這個方法,Router 豈不是要記錄百萬千萬台電腦的 IP Address 和相對位置?(事實上有更多),例如 R1 除了要記著 167.42.36.12 和 5.90.13.28 在那裡,還要記著 167.24.23.53、167.63.75.112、167.69.54.167、5.12.43.83、5.90.36.13......等等百萬千萬台電腦的 IP Address 紀錄,這太為難 Router 了,於是我們想到了一個方法,就是盡量把頭一組數字相同的電腦放在一起,這樣,Router 只要紀錄同一推電腦的第一組數字的位罝而不需要紀錄世界上每一台電腦的 IP Address,這就成了網絡的雛形。

ipv4

要用這個方法,我們就可把 IP Address 有系統地分派給不同公司或組織,這樣 Router 就可以有效率地把目的地位置記錄。為了清楚分辨,我們把首 8 Bits 稱為 Network ID,尾 24 Bits 稱為 Host ID。例如: 11.194.63.100,11 就是 Network ID,而 194.63.100 就是 Host ID。

00001011.11000010.00111111.01100100
Network ID                   Host ID

Network ID 也有另一個表示方法,就是把後面的部份寫成 0,如: 11.0.0.0。

不過仔細計算一下,同一個 Network ID 之下的 IP Address 加起來有多少個呢?例如: 第一組數字是 11 的 IP Address 一共有多少個?

11.X.X.X  => 00001011.XXXXXXXX.XXXXXXXX.XXXXXXXX

不同的可能性有 2 的 24 次方,即 16,777,216 個可能性,於是,得到 11.0.0.0 這個網絡的公司便可擁有一千六百多萬個設備連上網絡,如果是超大型公司如 Microsoft 或 IBM 這類當時的電腦強人還好,但如果是分派給小公司的話就似乎有點浪費。

另一方面,由 0 字頭至 255 字頭就只能分配給 256 家公司或組織,這肯定不夠。於是當時的電腦專家決定把這樣大的網絡再分得細一點,他們的構思是這樣的,想想看,如果把 Network ID 位元增加,Host ID 位元自然會減少,這樣子, 一個網絡所容納的 IP Address 數量就會減少。例如:把 Network ID 增加至 16 Bits,Host ID 就會減少至 16 Bits,則 IP Address 數量就會減少至 2^16 = 65,536,但網絡數量卻會增加至 65,536。這就可以提供更多較小的網絡給更多公司使用。就是這樣,我們按 Network ID 的長度分成三個不同的類別,分別是 Class A,Class B 和 Class C。

Class A

Network ID 首 Bit 為 0 的話,就拿首 8 Bits 做 Network ID,每個 Class A 容納 2^24 = 16,777,216 個 IP Address。

Class B

Network ID 首兩 Bits 為 10 的話,就拿首 16 Bits 做 Network ID,每個 Class B 容納 2^16 = 65,536 個 IP Address。

Class C

Network ID 首三 Bits 為 110 的話,就拿首 24 Bits 做 Network ID,每個 Class C 容納 2^8 = 256 個 IP Address。

ClassNetwork IDNetwork ID 長度Host ID 長度IP 位址數量
A 0XXXXXXX 8 24 16,777,216
B 10XXXXXX.XXXXXXXX 16 16 65,536
C 110XXXXX.XXXXXXXX.XXXXXXXX 24 8 256

我們也可以知道一個網絡的 IP Address 範圍,例如:11.0.0.0 這個網絡,因為這是一個 Class A 的網絡,Network ID 是 00001011,因此 00001011.XXXXXXXX.XXXXXXXX.XXXXXXXX 全部都屬於這個網絡,即是由 11.0.0.0 至 11.255.255.255 這些 IP Address 都屬於此網絡。

現在來學些名詞,用這種方法分類的網絡稱為 Classful Network,而支緩 Classful Network 的 Routing Protocol 稱之為 Classful Routing Protocol,例如: RIPv1 和 IGRP。

Subnet Mask 子網絡遮罩

Classful 這個方法不錯呀!還有什麼問題?話說,網絡發展一日千里,要求接上網絡的公司或組織越來越多,Network ID 很快又供不應求,此時電腦專家又出來了,他們又想到一個方法把這些 Class A、B 和 C 的 Network,切割成較細的網絡去使用,稱之為 Subnet 子網絡。既然我們知道調校 Network ID 的長度可以調整 Network 的大小,那為何要規限只有 8、16 和 24 這三種長度呢?讓大家自由調校理想的長度不是更好嗎?

比方說,200.52.62.0 (11001000.00110100.00111110.00000000) 這個 Class C 的 Network,Network ID 長度是 24,可容納 256 個 IP Address,但如果把 Network ID 增加至 25,這個 Network 即可被切割成 2 個可容納 128 個 IP Address 的 Network!

ClassNetwork IDNetwork ID 長度Host ID 長度IP 位址數量
原網絡 11001000.00110100.00111110 24 8 256
子網絡 A 11001000.00110100.00111110.0 25 7 128
子網絡 B 11001000.00110100.00111110.1 25 7 128

所以子網絡 A 所包含的 IP Address 是 11001000.00110100.00111110.0XXXXXXX
即是: 200.52.62.0 至 200.52.62.127

而子網絡 B 所包含的 IP Address 是 11001000.00110100.00111110.1XXXXXXX
即是: 200.52.62.128 至 200.52.62.255

這般隨心隨意確是有型,但問題是,Classful Address 的規則已經崩壞!現在我們已無法憑 IP Address 的 Class 去知道 Network ID 的長度,也就沒法知道 Network ID,怎麽辨?Subnet Mask 子網絡遮罩來打救我們了,只要在 IP Address 後面加上一個 Subnet Mask,讓大家可以藉此計算出 Network ID。Subnet Mask 同樣為 32 Bits,再引用剛剛的例子,子網絡 A 的 Network ID 長度為 25,把它變成 25 個 1,然後補上 7 個 0,因此 Subnet Mask 為 11111111.11111111.11111111.10000000,以十進數表示的話就是 255.255.255.128。如果要表示子網絡 A 裡面的一個 IP Address 200.52.62.86,就要連同 Subnet Mask 一併寫出來,200.52.62.86 / 255.255.255.128。

要計算 Network ID,第一步是把 IP Address 和 Network Mask 變成二進數,然後把他們 "AND" 起來。

IP Address 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 0 0 1 1 1 0 0 0
Subnet Mask 
1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 0 0 0 0 0 0 0
Network ID 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 0 0 0 0 0 0 0 0

得出 Network ID = 200.52.62.0

另一個例子:200.52.62.136 / 255.255.255.128

IP Address 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 1 0 0 0 1 0 0 0
Subnet Mask 
1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 0 0 0 0 0 0 0
Network ID 
1 1 0 0 1 0 0 0 . 0 0 1 1 0 1 0 0 . 0 0 1 1 1 1 1 0 . 1 0 0 0 0 0 0 0

得出 Network ID = 200.52.62.128

Subnet Mask 除了可以用二進位或十進位表示,還有另一個更加方便的表示方式,就是直接寫出 Subnet Mask 的 Bit 1 數量,例如: 255.255.255.0 變成二進數的話一共有 24 個 1,就直接寫成 /24,如果是 255.252.0.0 就寫成 /14,非常方便,這種表示方式稱為 Prefix。在香港,/24 用廣東話會說成「騎」24,在中國大陸或台灣我就不知道怎樣叫,如果你知道的話請告訴我。

Supernet

除了把網絡切割成細小的子網絡,反過來說,我們也可把 Network 組合成一個更大的 Network,稱為 Supernet。例如: 現在我們有四個相鄰的網絡,16.2.64.0 / 255.255.255.0、16.2.65.0 / 255.255.255.0、16.2.66.0 / 255.255.255.0 和 16.2.67.0 / 255.255.255.0,要把它們合併,方法很簡單,首先把 IP Address 改成二進數:

00010000.00000010.01000000.00000000
00010000.00000010.01000001.00000000
00010000.00000010.01000010.00000000
00010000.00000010.01000011.00000000

請留意 Network ID 部份 (即首 24 Bits 中),其中首 22 Bits 都是相同的,換句話說,如果我們把 Network ID 縮短至 22 Bits,即可包含這 4 個網絡,所以把這 4 個網絡合併起來的 Network ID 將是: 00010000.00000010.01000000.00000000 亦即 16.2.64.0,而 Subnet Mask 是 22 Bits,即是 255.255.252.0。

VLSM 可變長子網路遮罩

這種自由自在可加可減的 Subnet Mask 長度又可稱為 VLSM Variable Length Subnet Masking (可變長子網路遮罩),用了 VLSM 的 Network 稱為 Classless Network,而支緩 Classless Network 的 Routing Protocol 稱之為 Classless Routing Protocol,例如: OSPF 和 EIGRP。

不過有一件事要特別注意,就是每個網絡中的第一個 IP Address 為 Network ID,不可使用,而最最後一個 IP Address 是 Broadcast Address 也不可使用。設定 VLSM 時要留意網絡必需可容納多於 2 個 IP Address 才有用,所以最小的 Subnet Mask 為 /30,/31 和 /32 是沒有意義的。

Subnet MaskPrefixIP 數量實際可使用 IP備注
255.255.255.252 /30 4 2  
255.255.255.248 /29 8 6  
255.255.255.240 /28 16 14  
255.255.255.224 /27 32 30  
255.255.255.192 /26 64 62  
255.255.255.128 /25 128 126  
255.255.255.0 /24 256 254 傳統 Class C
255.255.254.0 /23 512 510  
255.255.252.0 /22 1,024 1,022  
255.255.248.0 /21 2,048 2,046  
255.255.240.0 /20 4,096 4,094  
255.255.224.0 /19 8,192 8,190  
255.255.192.0 /18 16,384 16,382  
255.255.128.0 /17 32,768 32,766  
255.255.0.0 /16 65,536 65,534 傳統 Class B
255.254.0.0 /15 131,072 131,070  
255.252.0.0 /14 262,144 262,142  
255.248.0.0 /13 524,288 524,286  
255.240.0.0 /12 1,048,576 1,048,574  
255.224.0.0 /11 2,097,152 2,097,150  
255.192.0.0 /10 4,194,304 4,194,302  
255.128.0.0 /9 8,388,608 8,388,606  
255.0.0.0 /8 16,777,216 16,777,214 傳統 Class A
254.0.0.0 /7 33,554,432 33,554,430  
252.0.0.0 /6 67,108,864 67,108,862  
248.0.0.0 /5 134,217,728 134,217,726  
240.0.0.0 /4 268,435,456 268,435,454  
224.0.0.0 /3 536,870,912 536,870,910  
192.0.0.0 /2 1,073,741,824 1,073,741,822  
128.0.0.0 /1 2,147,483,648 2,147,483,646  
0.0.0.0 /0 4,294,967,296 4,294,967,294  

Private IP Address

最後還有一個要點要留意的,就是有些 IP Address 是保留用作測試或在內聯網中使用,這些 IP Address 在 Internet 上是不會被處理的。或許大家對這些 IP Address 都已經耳熟能詳:

10.0.0.0 - 10.255.255.255 (共 16,777,216 IP Address)
172.16.0.0 - 172.31.255.255 (共 1,048,576 IP Address)
192.168.0.0 - 192.168.255.255 (共 65,536 IP Address)

由於國際網絡上的路由器不會處理這些 IP Address,所以如果正在使用 Private IP Address 的內聯網內的電腦想與世界溝通,必需透過一個叫做 NAT (Network Address Translation) 的步驟把 Private IP Address 轉換成 Public IP Address。一個十分普遍例子就是家用的無線網絡分享器,家中電腦透過 Private IP Address 與 Router 連接,Router 把 Private IP Address 轉換成 Public IP Address 與 Internet 上的電腦連線。

ipv4

圖片來源