第 6 章 IP 位址 著作權所有 © 旗標出版股份有限公司
本章提要 IP 位址表示法 IP 位址的等級 (Class) Subnet (子網路) CIDR
IP 位址表示法 IP 位址本質上是一個長度為 32 Bits 的二進位數值, 看起來就是一長串的 0 或 1:
二進位 IP 位址的轉換 1. 以 8 Bits 為單位, 將 IP 位址分成 4 段: 2. 將各段的二進位數值轉換成十進位, 再以 . 隔開以利閱讀:
IP 位置的等級 IP 在設計初時, 著眼於路由與管理上的需求, 制定了 IP 位址的等級 (Class)。雖然後來面臨位址不足的問題, 而做了變更, 但仍應了解 IP 位址等級的來龍去脈。 在介紹 IP 位址等級前, 先來了解依據目的裝置的數量不同, IP 總共有 3 種傳遞模式: Unicast Broadcast Multicast
Unicast 一對一的傳遞模式。在此模式下, 來源裝置所發出的 IP 封包, 其 IP 表頭中的 Destination Address 代表單一目的裝置, 因此只有該一裝置會收到此IP 封包。在網際網路上傳輸的封包, 絕大多數都是 Unicast 的 IP 封包。
Unicast
Broadcast 一對多的傳遞模式, 此類封包中文通常稱為廣播封包。 在此模式下, 來源裝置所發出的 IP 封包, 其 IP 表頭中的 Destination Address 代表某一網路, 而非單一裝置, 因此該網路內的所有裝置都會收到、並處理此類 IP Broadcast 封包。由於此一特性, Broadcast 封包必須小心使用, 否則稍有不慎, 便會波及該網路內的全部裝置。
Broadcast
Multicast Multicast 是一種介於 Unicast 與 Broadcast 之間的傳送方式, 也是屬於一對多的傳送方式, 但是它與 Broadcast 的一對多有很大的不同。 Broadcast 的一對多必定會傳送至某一個網路內的所有裝置, 但是 Multicast 的一對多卻可以將封包傳送給一群指定的裝置。
Multicast 亦即, Multicast 的 IP 封包, 其 IP 表頭中的 Destination Address 代表的是一群裝置。凡是屬於這一群的裝置都會收到此一 Muticast 封包。
Multicast
為什麼需要 Multicast 假設我們現在必須傳送一份資料給網路上 10 部指定的裝置。如果使用 Unicast 的方式, 必須重覆執行 10 次傳送的動作才能達成目的, 不僅沒有效率, 且浪費網路頻寬。 如果使用 Broadcast 的方式, 則所指定網路中的所有 (例如 20 部) 電腦都會收到、且必須處理這些 Broadcast 封包。
為什麼需要 Multicast 換言之, 會影響到其他不相干的電腦。這時候, 如果使用 Multicast, 便能避免 Unicast 與 Broadcast 的問題。 不過, 在同一個網路內進行 Multicast 技術上沒什麼問題, 但若要透過網際網路, 則沿途的路由器必須都支援相關的協定才行。這也是 Multicast 發展所面臨的瓶頸。
IP 位址的結構 IP 位址是用來識別網路上的裝置, 因此, 對於路由器而言, 必須能夠從IP 位址來判斷要將封包送往何處。由於 IP 路由的架構並非以個別的裝置為基本單位, 而是以網路為基礎, 換言之, 路由器必須從 IP 位址來判斷所屬之網路。為了達成此目的, IP 位址是由下列兩個部份所組成:
IP 位址的結構 網路位址 (以下稱為 Network ID):Network ID 位於 IP 位址的前端, 可用來識別所屬的網路。當組織或企業申請 IP 位址時, 所分配到的並非個別零散的 IP 位址, 而是取得一個獨一無二的 Network ID。 同一網路上的所有裝置, 都會有相同的 Network ID。IP 路由便是依據 IP 位址的 Network ID, 決定要將 IP 封包送至哪個網路。
IP 位址的結構 主機位址 (以下稱為 Host ID):Host ID 位於 IP 位址的後端, 可用來識別網路上個別的裝置。同一網路上的裝置都會有相同的 Network ID, 而各裝置之間則是以 Host ID 來區別。
IP 位址的結構 Network ID 與 Host ID 合起來便形成 32 Bits 的 IP 位址。 如果 Network ID 的長度較長, 例如:24 Bits, 那麼 Host ID 便只有 8 Bits, 亦即此一 Network ID 下共有 28 =256 個 Host ID 可資運用, 亦即可分配給 256 部裝置使用。
IP 位址的結構 如果 Network ID 的長度較短, 例如:16 Bits, 那麼 Host ID 便只有 16 Bits, 亦即此一 Network ID 下共有 216 = 65536 個 Host ID 可資運用, 亦即可分配給 65536 部裝置使用。 由於各個網路的規模大小不一, 大型的網路應該使用較短的 Network ID, 以便能使用較多的 Host ID。
IP 位址的結構 反之, 較小的網路則應該使用較長的 Network ID。為了符合不同網路規模的需求, IP 在設計時便依據 Network ID 的長度, 劃分出 IP 位址等級。
IP 位址的等級 (Class) 為了方便管理與識別, IP 位址總共可分為 5 種等級 (Class)。一般會用到的是Class A、B、C 這三種等級的 IP 位址。 各等級分別使用不同長度的 Network ID, 因此適用於大、中、小型網路。 IP 位址的管理機構可根據申請者的網路規模, 決定要賦予何種等級。
Class A Network ID 的長度為 8 Bits, 第 1 Bit 必須為 0 (稱為前導位元)。Class A 的 Network ID 可從 00000000 (二進位) 至 01111111 (二進位), 總共有 27 = 128 個。 亦即每個 Class A 網路可資運用的 Host ID 有 224 = 16777216 個 (一千六百多萬)。
Class A 由於每個 Class 的前導位元不同, 因此, 從前導位元便可判斷所屬的等級。
Class B Network ID 的長度為 16 Bits, 前 2 Bits 為前導位元, 必須為 10, 因此 Class B 的 IP 位址必然介於 128.x.y.z 與 191.x.y.z 之間。每個 Class B 網路可資運用的 Host ID 有 216 = 65536 個。
Class C Network ID 的長度為 24 Bits, 前 3 Bits 為前導位元, 必須為 110, 因此 Class C 的 IP 位址必然介於 192.x.y.z 與 223.x.y.z 之間。每個 Class C 網路可資運用的 Host ID 有 28 = 256 個。
Class D 作為 Multicast 的用途。前 4 Bits 為前導位元, 必須為 1110, 因此 Class D 的 IP 位址必然介於 224.x.y.z 與 239.x.y.z 之間。
Class E 保留用途。前 4 Bits 為前導位元, 必須為 1111, 因此 Class E 的 IP 位址必然介於 240.x.y.z 與 255.x.y.z 之間。
Class A、B、C 的比較
Class A、B、C 的優點 路由器從 IP 位址的前導位元, 便可判斷出所屬網路的等級, 進而得知 Network ID 與 Host ID 為何。 依據企業或單位的實際需求, 可分配 Class A、B、C 三種等級的 Network ID, 讓 IP 位址的分配更有效率。
特殊的 IP 位址 Network ID 全為 0 代表本網路 (This Network), 例如:0.0.0.37 代表本網路上 Host ID 為 37 的裝置。Network ID 全為 1 則是保留作廣播 (Broadcast) 用途。 Host ID 全為 0 用來識別網路, 以 Class C 為例, 203.74.205.0 可用來代表Network ID 為 203.74.205.z 的網路。
特殊的 IP 位址 Host ID 全為 1 代表網路中的全部裝置, 因此也就是廣播的意思。 以 Class C 為例, 假設某一網路的 Network ID 為 203.74.205.0, 若網路中有一部電腦送出 203.74.205.255 的封包, 即代表這是對 203.74.205.0 這個網路的廣播封包, 所有位於該網路上的裝置 (203.74.205.z) 都會收到此封包。
特殊的 IP 位址 若 Network ID 與 Host ID 皆為 1, 亦即 255.255.255.255, 稱為 Limited 或 Local 廣播封包。此種廣播的範圍僅限於所在的網路。亦即, 只有同一網路上的裝置可收到此種廣播。
特殊的 IP 位址 各個 Class 的最後 1 個 Network ID (也就是除了前導位元外, 其餘的 Network ID 位元皆設為 1) 代表 Loopback 位址。例如:Class A 的 127.x.y.z, Class B 的 191.255.y.z, Class C 的 223.255.255.z。 Loopback 位址主要用來測試本機電腦上的 TCP/IP 之用。
特殊的 IP 位址 在設計 IP 時, 考慮到有些網路雖然使用 TCP/IP 的協定組合, 但不會與網際網路相連。因此, 在 Class A、B、C 中都保留了一些 Private (私人) IP 位址, 供這類網路自行使用:
Subnet (子網路) 舉例而言, 假設 A 企業分配到 Class B 的 IP 位址, 但若將六萬多部電腦連接在同一個網路中, 勢必造成網路效能的低落, 因此在實際上不可行。但是, 若在 Class B 網路中只連接幾十部電腦, 不是會浪費掉許多 IP 位址嗎?
Subnet (子網路) 解決這個問題的方法, 便是讓企業能自行在內部網路中切割 Subnet (子網路)。例如:A 企業可利用 Subnet 切割的技術, 將分配到的 Class B 網路切割成規模較小的 Subnet, 再分配給多個實體網路。換言之, Subnet 的技術, 讓原先只有 3 種等級的 IP 位址更加具有彈性。
Subnet 的切割原理 讓每個 Subnet 擁有一個獨一無二的 Subnet ID, 以便路由器能識別這些切割出來的 Subnet。 由於企業分配到的 Network ID 是無法變動的, 因此, 如果要切割 Subnet 的話, 必須從 Host ID『借用』前面幾個 Bit, 作為 Subnet ID。
Subnet 的切割原理 承前例, 假設 A 企業申請到 Class B 的 IP 位址如下: 若要切割 Subnet, 必須借用 Host ID 前面的幾個 Bit 作為Subnet ID。假設我們現在使用 Host ID 的前 3 Bits 作為 Subnet ID:
Subnet 的切割原理 Subnet ID 與原先的 Network ID 合起來共 19 Bits, 可視為新的 Network ID, 用來識別 Subnet。原先 16 Bits 的 Network ID 當然不可更動, 但是 Subnet ID 卻是可以自行分配。若 Subnet ID 使用了 3 Bits, 則產生了 23 = 8 個 Subnet:
Subnet 的切割原理
Subnet 的切割原理 換言之, 從 Host ID 借用了 3 Bits 之後, 您可以切割出 8 個 Subnet。當然, 相對地 Host ID 長度變短後, 所擁有的 IP 位址數量也減少了。以上例而言, 原先 Class B 可以有 216 = 65536 個可用的 Host ID;而新建立的 Subnet, 每個 Subnet 僅有 213 = 8192 個可用的 Host ID。
Class B 網路 可能切割 Subnet 的方式
Class C 網路 可能切割 Subnet 的方式
上表中不可行的部份 不可能使用 1 Bit 作為 Subnet ID, 因為它只能建立 2 個 Subnet ID, 扣掉全為 0 或 1 的 Subnet ID, 即沒有可用的 Subnet。 不能使 Host ID 只剩下 1 Bit, 因為此時每個 Subnet 只能有 2 個 Host ID, 扣掉全為 0 或 1 的 Host ID, 則 Host 就沒有可用的 IP 位址。
Subnet Mask (子網路遮罩) Subnet 不僅是單純的將 IP 位址加以切割, 其關鍵在於切割後的 Subnet 必須能夠正常地與其他網路相互連接, 也就是路由器必須能識別這些 Subnet。 此時, 便產生了一個問題, 路由器無法再利用 IP 位址的前導位元, 來判斷 Network ID 與 Host ID 有多少個位元。
Subnet Mask (子網路遮罩) 以上述 A 企業最後所分配到的 Network ID 為例, 雖然其前導位元仍然為 10, 但是經過 Subnet 切割後, Network ID 長度並非 Class B 的 16 Bits, 而是可能 17、18 個以上的位元。 因此, 勢必要利用其他方法來判斷 IP 位址中哪幾個位元為 Network ID, 哪幾個位元為 Host ID。Subnet Mask (子網路遮罩) 正是為了此目的因應而生。
Subnet Mask 的特性 長度為 32 Bits, 與 IP 位址的長度相同。 必須由連續的 1, 加上連續的 0 所組成。 可轉成十進位以方便閱讀:
Subnet Mask 的特性 必須與 IP 位址配對使用才有意義。 亦可這樣表示 『/』前面是正常的 IP 表示法, 『/』後面的數字 21 則代表 Subnet Mask 中 1 的數目。
Subnet Mask 的特性 原有 Classful 的 Network ID 仍然可繼續使用, 但必須額外設定對應的 Subnet Mask, 如下:
Subnet 切割實例 假設 A 企業申請到如下的 Class C IP 位址: A 企業由於業務需求, 內部必須分成 A1、A2、A3、A4 等 4 個獨立的網路。此時便需要利用 Subnet 切割的方式, 建立數個 Subnet, 以便分配給這 4 個獨立的網路。
Subnet 切割實例 決定了 Subnet ID 的長度後, 便可知道新的 Subnet Mask:
切割 Subnet 注意事項 Subnet 可再進一步切割成更小的 Subnet。承上例, 例如:網管人員可以再將 A1 網路切割成更小的 Subnet。方法仍舊是從 Host ID 借用幾個位元來作為 Subnet ID。 Subnet 切割時所作的設定, 都是在企業內部。換言之, 遠端的網路或路由器並不須知道 A 企業內部是如何切割 Subnet。如此, 可保持網際網路上路由架構的簡單性。
CIDR 3 種等級的 IP 位址, 很快便產生了一些問題。這其中最嚴重的便是 Class B 的 IP 位址面臨缺貨的危機;但是相對地, Class C 使用的數量則僅是緩慢成長。 為了解決這個問題, 便產生了 Classless Inter-Domain Routing (簡稱為CIDR), 亦即 Classless (無等級) 的 IP 位址劃分方式。
CIDR Class B 那麼快被耗盡, 有很多位址空間是浪費掉了。 舉例而言, 假設 B 企業需要 1500 個 IP 位址, 由於 Class C 位址只能供 256 個IP 位址, 因此必須分配 Class B 的 Network ID 給此 B 企業。不過, Class B 其實可提供 65536 個 IP 位址, 遠超過 B 企業的需求, 這些多出來的 IP 位址無法再分配給其他企業使用, 因此實際上都浪費掉了。
CIDR 既然 Class B 嚴重不足, 而 Class C 還很充裕, 更重要的是 Class B 實際上有很多是浪費掉了, 那麼要解決這些問題, 自然地便會想到是否可以將數個 Class C 的 IP 位址合併起來, 分配給原先須申請 Class B 的企業。 以前例而言, 我們只要分配 6 至 7 個 Class C 的 IP 位址給 B 企業, 便可符合其需求, 因而節省下 1 個 Class B 的位址空間。
CIDR 要合併數個 Class C 的 IP 位址, 可使用 Subnet Mask 來定義較具彈性的 Network ID。 讀者可能會覺得很訝異, 這不是與 Subnet 的原理相同嗎?沒錯, CIDR 又稱為 Supernet, 與 Subnet 可算是一體的兩面, 兩者其實都是使用相同的觀念與技術, 只是在應用上略有不同。
Supernet 與 Subnet Subnet Supernet 利用 Subnet Mask 重新定義較長的 Network ID, 以便將現有的網路加以切割成 2、4、8、16 等 2 冪方數的較小 Subnet。 Supernet 利用 Subnet Mask 重新定義較短的 Network ID, 以便將現有 2、4、8、16 等 2 冪方數的網路, 合併成為一個網路。
CIDR 實例 回到 B 企業的例子, 由於 B 企業所須的 1500 個 IP 位址, 數量介於 Class B (可提供 65535 個 IP 位址) 與 Class C (可提供 255 個 IP 位址) 的範圍之間。 藉由 CIDR 的方式, 我們可以分配一個長度為 21 Bits 的 Network ID 給 B 企業, 那麼 B 企業可供運用的 Host ID 將會有 32-21 = 11 Bits, 總共可產生211 = 2048 個 IP 位址。
CIDR 實例 上述方式其實便是將 8 個 Class C 的 IP 位址合併, 再分配給 B 企業。由於合併是透過變更 Network ID 長度來進行, 因此會有以下的限制: 用來合併的 Class C 的 Network ID 必然是連續的。 用來合併的 Class C 的 Network ID 數目必然是 2 的冪方數。
CIDR 實例
CIDR 實例 這 8 個連續的 Class C 位址可以利用下列方式來表示: 或是使用更簡潔的方式來表示:
CIDR 實例說明 雖然 CIDR 原先是為了合併 Class C 位址所設計, 但在實作上可適用於任何的 IP 位址範圍, 例如:ISP 可分配長度為 30 Bits 的 Network ID 給一些只有兩部電腦的個人公司。 由於 CIDR 讓 IP 位址在分配時更具彈性與效率, 因此, 目前皆是以 CIDR 的方式來劃分 IP 位址範圍。