在網路中計算子網路,意思是將一個 IPv4 位址搭配 CIDR 前綴長度或點分十進位子網路遮罩,轉換成該位址所屬區塊的完整邊界集合 — 包括網路位址(區塊中的第一個位址)、廣播位址(最後一個位址)、第一個與最後一個可用的主機位址、總主機數與可用主機數,以及 wildcard 遮罩。對於任何 /30 以下的前綴,可用主機數為 2^(32 − 前綴) − 2,因為第一個和最後一個位址分別保留為網路識別碼與廣播位址,不能指派給設備;因此 /24 會得到 256 個總位址,但只有 254 個可用主機。兩個邊緣前綴 — /31(在 RFC 3021 中定義,用於點對點連結)以及 /32(用於 loopback 和單一主機防火牆規則)— 對保留位址規則的處理方式不同。無論你是用手算、寫腳本,或使用瀏覽器工具來計算,輸入和輸出都相同:一個 IP、一個前綴長度,以及一張小小的衍生數值表,告訴你規劃定址方案或排除主機之間連線問題所需的全部資訊。

how to calculate subnet in network
如何計算網路中的子網路:完整方法

子網路計算的輸出結果

一個完整的子網路計算會回答關於單一 IP 與前綴的六個實務問題。網路位址是區塊中的第一個位址,用來識別子網路本身;廣播位址是區塊中的最後一個位址,作為同時發送給子網路上所有主機的封包目的地。第一個與最後一個可用主機位址是可指派給設備的最小和最大位址,而可用主機數則告訴你這個子網路最多能容納多少設備。子網路遮罩和 wildcard 遮罩是描述同一邊界的兩種方式:子網路遮罩在網路部分的位置為 1 位元、在主機部分為 0 位元,而 wildcard 遮罩 — 即逐位元反相 — 是 Cisco 存取控制清單(ACL)和 OSPF 網路宣告用來比對位址範圍的格式,其中 1 位元代表「任意值」,0 位元代表「必須相符」。RFC 4632 是表達這個分割方式的現行標準,而 IP 類別(A、B、C、D 或 E)是根據第一個八位元組所定的歷史標籤,至今仍出現在路由軟體和許多診斷工具中。子網路計算機在你按下 Enter 的瞬間,就會在一張結果表中呈現所有這些數值,並包含一個 RFC 1918 私有位址狀態旗標,讓你一眼就能判斷該位址是否可在公共網際網路上路由。

你需要兩個輸入

每個 IPv4 子網路計算都從相同的兩項資訊開始:位址本身,以點分十進位表示 — 由四個 0 到 255 的數字以小數點分隔,例如 192.168.1.10 — 以及一個前綴長度,用來說明 32 個位元中有多少位元用於識別網路。前綴長度可以用兩種方式表示。CIDR 的方式是在 IP 之後直接寫一個斜線和網路位元數,例如 192.168.1.10/24;斜線是子網路遮罩的簡寫。遮罩的方式則是寫 IP 和一個獨立的點分十進位遮罩,其二進位形式恰好有 N 個前置的 1 位元,N 即為前綴長度;因此 /24 對應 255.255.255.0,/16 對應 255.255.0.0,/30 對應 255.255.255.252。兩種形式描述的是同一個邊界,子網路計算機兩種都接受,所以你可以用任何已有的格式貼上位址。特別是遮罩有一個實用的特性:因為邊界只有在 /8、/16 和 /24 時才會整齊地落在八位元組交界處,像 /20 或 /27 這類前綴會在中間產生非 255 的八位元組 — /20 為 255.255.240.0,/27 為 255.255.255.224 — 而計算機會直接處理這些情況,不需要你特別輸入。

逐步計算子網路

要為指定的 IPv4 位址取得完整的子網路分解,最快的方法是使用瀏覽器型的計算機,它會為你處理位元運算和各種邊緣情況。

  1. 在位址欄位中輸入一個 IPv4 位址,例如 192.168.1.10。
  2. 選擇 CIDR 前綴(例如 /24),或切換到子網路遮罩並輸入如 255.255.255.0 的值。
  3. 立即讀取結果表:網路位址與廣播位址、第一個與最後一個可用主機、可用與總主機數、子網路遮罩與 wildcard 遮罩、IP 類別,以及 RFC 1918 私有位址狀態。

若想更深入了解如何用手算產生相同的答案,請參考下一節。

位元運算的原理

子網路計算的結果並非魔法 — 它是套用到位址與遮罩上的 32 位元無號位元運算。網路位址是 IP 與子網路遮罩的逐位元 AND,會將每個主機位元歸零,並保留每個網路位元。廣播位址是網路位址與 wildcard 遮罩的逐位元 OR,會將每個主機位元設為 1。Wildcard 遮罩本身只是子網路遮罩將每個 1 位元翻成 0、每個 0 位元翻成 1 的結果 — 即逐位元反相 — 也是 Cisco ACL 和 OSPF 網路宣告用來比對位址範圍的格式。對於任何 /30 以下的前綴,可用主機數為 2^(32 − 前綴) − 2,因為網路位址和廣播位址是保留的,不能指派給設備。

要看完整的運算過程,以 192.168.1.10/24 為例。該位址的二進位表示為 11000000.10101000.00000001.00001010,而 /24 遮罩的二進位為 11111111.11111111.11111111.00000000。兩者進行 AND 運算會保留前 24 個位元並將最後 8 個位元歸零,得到 11000000.10101000.00000001.00000000 — 即 192.168.1.0,這就是網路位址。Wildcard 遮罩是子網路遮罩的反相:00000000.00000000.00000000.11111111,也就是 0.0.0.255。將網路位址與 wildcard 進行 OR 運算,會將最後 8 個位元設為 1,得到 192.168.1.255,這就是廣播位址。第一個可用主機是 192.168.1.1,最後一個可用主機是 192.168.1.254,總計有 2^8 − 2 = 254 個可用主機 — 正好是計算機所顯示的數字。

/31 和 /32:兩個打破常規的前綴

有兩個前綴遵循不同的規則,正確的子網路計算機必須明確處理它們。RFC 3021 中定義的 /31,整個區塊中只有兩個位址。由於這兩個位址都可以作為主機使用,沒有獨立的網路位址或廣播位址,因此計算機會顯示 2 個可用主機,而不是一般的 0 個。/31 子網路設計用於兩台路由器之間的點對點連結,在這種情況下若保留兩個位址作為網路位址和廣播位址,會浪費掉珍貴位址區塊的一半 — 而且現代路由器在兩端都能順利轉發流量,不會發送廣播。/32 描述的是單一主機:網路位址、廣播位址和主機位址都是同一個位址,計算機會顯示 1 個可用主機。/32 是撰寫 loopback 介面的標準方式(127.0.0.1/32 是常見的例子)、單一主機防火牆規則,或路由表中指向特定單一機器而非某個子網路的主機路由。

RFC 1918 私有位址範圍偵測

單靠 IP 類別無法判斷一個位址是否可在公共網際網路上路由。RFC 1918 保留了專供 NAT 後方私有網路使用的三個區塊:10.0.0.0/8、172.16.0.0/12,以及 192.168.0.0/16。這些位址在公共網際網路上永遠不會被路由,因此任何只監聽在私有位址上的服務,若沒有 NAT 或連接埠轉發規則,從區域網路外部就無法連線。在你嘗試對外開放服務、除錯連線問題,或為新部署記錄定址方案之前,知道一個位址是否為私有位址很重要 — 例如,一個在類別上看起來像公共 IP 的位址,仍有可能落在 172.16.0.0/12 範圍內,因為該區塊橫跨了 Class B 的上半部。子網路計算機會在結果表中與網路位址和廣播位址一起標示 RFC 1918 狀態,讓你在讀取主機範圍的同時一眼就能確認私有或公共屬性。

CIDR 前綴大小一覽

以下是最常見的 IPv4 前綴長度及其對應子網路遮罩表示法的快速參考。任何前綴的完整主機範圍和主機數都可由前一節的公式推導 — 若需要任意前綴的精確主機數和主機範圍,請將位址和前綴貼入子網路計算機。

CIDR子網路遮罩(點分十進位)網路位元數
/8255.0.0.08
/16255.255.0.016
/24255.255.255.024
/30255.255.255.25230
/31255.255.255.25431
/32255.255.255.25532

就 IPv6 定址而言,計算方式表面上類似,但位址空間是 128 位元而非 32 位元,斜線表示法相同,而且沒有等同於網路/廣播保留位址的規則。IPv6 的步驟詳見 如何逐步計算 IPv6 子網路遮罩。

若想更深入了解,請參閱 如何從常見網路連接埠清單驗證結果。