子網路位元,是 32 位元子網路遮罩中,前導的那一段連續 1 位元,而 CIDR 記號中斜線後面的數字,會直接告訴你有多少個——一個 /24 代表有 24 個子網路位元與 8 個主機位元。一旦知道這個切分方式,其他每個數值都可以從同一條公式推得:每個區塊可用的主機數,等於 2 的(主機位元數)次方減 2,適用於到 /30 為止的前綴長度。網路位址是 IP 與遮罩逐位元做 AND 運算的結果,廣播位址是網路位址與萬用遮罩(把遮罩逐位元反轉後得到的結果)做 OR 運算的結果,而萬用遮罩本身,就是把子網路遮罩反轉而來。你可以用一張二進位轉換表手動算出這些值,但Subnet Calculator會在你輸入一個 IPv4 位址、並選擇一個 CIDR 前綴或以點分隔的遮罩的那一刻,套用同樣的 32 位元無符號位元運算,回傳網路位址、廣播位址、第一與最後一個可用主機、總數與可用數量、萬用遮罩、IP 類別,以及 RFC 1918 私有位址狀態,而且不會把任何東西送出你的裝置。

how to calculate subnet bits
how to calculate subnet bits

IPv4 位址中,子網路位元代表什麼

每一個 IPv4 位址,都是一個 32 位元的數字,由子網路遮罩分成兩部分:網路部分(前綴,或稱子網路位元)與主機部分。子網路位元,是從遮罩最高有效位開始、連續出現的 1 位元數量。主機位元則是接下來的所有位元——同樣是連續的,全部是 0。以二進位表示,遮罩永遠是像 11111111.11111111.11111111.00000000 這樣的字串;1 與 0 之間的界線,就是前綴長度。

這個前綴長度,正是 CIDR 記號所揭示的:斜線後面的那個數字。因此 /24 的意思是「前 24 個位元用來識別網路,最後 8 個位元用來識別主機」。/16 代表 16 個子網路位元與 16 個主機位元。/30 代表 30 個子網路位元,主機位元只有 2 個。這兩者之間的切分,是其他每一項子網路計算所依賴的基礎,因為主機位元數,正是決定總位址數、可用主機數,以及廣播區塊大小的關鍵。

從 CIDR 前綴到子網路遮罩

CIDR 前綴與以點分隔的子網路遮罩,是同一個切分方式的兩種呈現方式。斜線形式的 /24,換成點分隔形式就是 255.255.255.0,因為前三個八位元組全部是 1(每組八個 1 位元,加總為 24),最後一個八位元組全部是 0。/16 變成 255.255.0.0;/30 變成 255.255.255.252;/8 變成 255.0.0.0。一旦你能雙向換算,就能在路由器設定、雲端網路面板,或防火牆規則上,直接讀懂任一種記號,不必在腦中翻譯。

CIDR 前綴子網路位元主機位元子網路遮罩
/8824255.0.0.0
/161616255.255.0.0
/24248255.255.255.0
/26266255.255.255.192
/28284255.255.255.240
/30302255.255.255.252
/31311255.255.255.254
/32320255.255.255.255

可用主機數量,是從主機位元這一欄計算出來的,公式為 2 的(主機位元數)次方減 2,適用於到 /30 為止的前綴長度。若要取得任何特定前綴的確切數量,請使用 Subnet Calculator;以 /24 為例,它會回傳 256 個總位址中的 254 個可用主機。

用 Subnet Calculator 計算子網路位元

  1. 在位址欄位中輸入一個 IPv4 位址,例如 192.168.1.10。
  2. 選擇一個 CIDR 前綴,例如 /24,或切換到子網路遮罩欄位,輸入一個以點分隔的遮罩,例如 255.255.255.0——這個計算器兩種輸入方式都接受。
  3. 閱讀結果表:網路與廣播位址、第一個與最後一個可用主機、總主機數與可用主機數、子網路遮罩與萬用遮罩、IP 類別,以及 RFC 1918 私有位址狀態,都會即時更新。
  4. 你可以直接讀取斜線形式,或計算回傳的子網路遮罩中前導 1 位元的數量,來確認子網路位元數,其餘數值都會與公式相符。

每一個值,都是在你的瀏覽器中,以 32 位元無符號位元運算計算出來的,因此你輸入的位址與遮罩,永遠不會離開你的裝置。當你處理的是內部網路範圍、不想貼到遠端服務時,這一點就很重要。

一個實際範例:192.168.1.10/24

以位址 192.168.1.10、前綴 /24 為例。斜線後面的數字,直接給出子網路位元數:24。這樣剩下 32 − 24 = 8個主機位元。這個區塊的總位址數是 2 的 8 次方 = 256,可用主機數則是 256 − 2 = 254,因為最低位址(網路位址,192.168.1.0)與最高位址(廣播位址,192.168.1.255)都被保留,不能指派給任何裝置。

子網路遮罩,是前 24 個位元為 1、後 8 個位元為 0,寫出來就是 255.255.255.0。萬用遮罩會反轉每一個位元,得到 0.0.0.255。把位址與遮罩做 AND 運算,得到網路位址 192.168.1.0;把網路位址與萬用遮罩做 OR 運算,得到廣播位址 192.168.1.255。第一個可用主機是 192.168.1.1,最後一個是 192.168.1.254。Subnet Calculator 會在你輸入的那一刻,回傳同一組結果,不需要手動排列二進位。

解讀結果:網路、廣播與主機範圍

結果表的編排方式,是讓每一列都回答一個規畫上的問題。網路位址,是這個區塊中的第一個位址——所有主機位元都設為 0——也是路由器在決定要把封包轉送到哪裡時,用來比對的依據。廣播位址,是最後一個位址——所有主機位元都設為 1——是主機想要同時送達本地子網路上每一台裝置時所使用的位址。這兩者都不能指派給任何裝置,這也是為什麼在 /30 及以下的前綴中,可用主機數永遠比總位址數少兩個。

第一個與最後一個可用主機列,標示出你實際會在主機上設定的範圍。子網路遮罩與萬用遮罩會一起回報,因為它們是逐位元互為反轉的關係,而萬用遮罩正是 Cisco 存取控制清單與 OSPF 網路陳述式,用來比對範圍的依據——萬用遮罩中的 1 位元代表「這裡任何值都可以」,0 位元代表「必須與設定位址中對應的位元相符」。IP 類別這一列,告訴你這個位址是否落在歷史上的 A 類、B 類或 C 類範圍內,這是一項在較舊文件中仍然會出現的背景資訊,儘管 CIDR(定義於 RFC 4632)已經取代了分類式定址法。

特殊情況:/31 與 /32

有兩個前綴打破了 2 的(主機位元數)次方減 2 這條規則,而這個計算器兩者都能處理。/31 只剩下 1 個主機位元,因此這個區塊總共有 2 個位址。根據RFC 3021,這兩個位址都是有效的主機,沒有另外獨立的網路位址或廣播位址;因此 /31 會回報 2 個可用主機。RFC 3021 之所以引入這項規則,是為了讓點對點連結——例如兩台路由器之間的連結——不必為一個永遠只承載兩個端點的子網路,浪費掉兩個位址。

/32 完全沒有主機位元。網路位址、廣播位址與主機位址,全都是同一個位址,而計算器會回報 1 個可用主機。/32 正是用來表示回送介面與單一主機防火牆規則的寫法:「這條規則只適用於一個位址,不是一個範圍。」當你在路由表中看到 /32 時,你看到的是一條主機路由,而不是一個子網路。

私有範圍與 RFC 1918

有三個區塊被保留給內部使用,永遠不會在公開網際網路上被路由:10.0.0.0/8172.16.0.0/12,以及192.168.0.0/16RFC 1918定義了這些區塊,好讓組織可以在 NAT 之後執行私有網路,而不會與公開位址衝突。當你在決定一項服務是否應該對外公開,還是留在區域網路內部時,知道一個位址屬於哪個區塊很重要;當你在閱讀別人的設定、想了解某個範圍是否能從公開網際網路上被存取時,這一點同樣重要。

計算器輸出中的 RFC 1918 這一列,會立即告訴你,你輸入的 IP 是否落在這些區塊之一。如果是,這個位址就是私有的;如果不是,這個位址要嘛是公開的,要嘛屬於其他某個保留範圍,在開啟一個連接埠或發布一筆 DNS 紀錄之前,你應該據此對待它。對於 IPv6 的工作,對應的私有範圍是 fc00::/7,計算方式也有所不同;如果你正在遷移到 v6,IPv6 subnet mask guide會帶你走過同一套前綴邏輯,套用在 128 位元位址上。

如果你還在權衡選項,How to Convert IPv4 to a 32-Bit Integer for Storage這篇文章有詳細說明。