請在「模式」選擇 IPv4 或 IPv6,再輸入 IP 位址和前置長度。會算出網路位址、主機數、子網路遮罩等,並畫出位元結構圖。
這個頁面可以做什麼
- 只要輸入 IP 位址和前置長度(例:192.168.1.0 /24),就能馬上知道網路位址、廣播位址和可用的主機 IP 範圍
- 總主機數、可用主機數、子網路遮罩、萬用字元遮罩、CIDR 表示法、整數 ID、十六進位 ID,一次全部算出
- 把 IP 位址的 32 個位元分成「網路部分」和「主機部分」並用顏色區分的位元結構圖,讓您用眼睛看懂子網路的原理
- 可以切換 IPv4 模式和 IPv6 模式。IPv6 模式會計算網路、位址範圍和總位址數(\(2^{128-\text{前置長度}}\))
- 公式的淺顯解說,以及可直接複製的 Excel、Google 試算表、Python 公式,也都整理在這個頁面
這個計算有什麼用?
規模大的組織,會把一個 IP 網路按部門或據點切割成較小的子網路來運作。例如「業務部最多要接 60 台裝置,所以分配可用主機數 62(\(2^{32-26}-2 = 62\))的 /26」,就是從需要的裝置數決定前置長度。
子網路計算是網管人員和基礎架構工程師幾乎每天都會用到的基本規劃技能。
家用路由器管理頁面常見的「192.168.1.0/24」「子網路遮罩 255.255.255.0」,正是這個計算的世界。/24 的可用主機數是 254,所以手機、電腦、電視等合計最多可以接 254 台。
裝置連不上網路時,也能用來確認它的 IP 位址是否落在正確的範圍(網路)內。
在雲端建立自己專用的網路(例如 AWS 的 VPC)時,要用 CIDR 表示法指定位址範圍,例如「這個 VPC 是 10.0.0.0/16,裡面的子網路是 10.0.1.0/24」。範圍重疊就無法互相連線,所以必須正確算出網路位址和主機數。
對雲端工程師來說,子網路計算是建置環境的起點,也是必備的技能。
Cisco 的 CCNA 等網路證照,以及國家考試資訊處理類科的計算機網路科目,都經常出現「已知 IP 位址和子網路遮罩,求網路位址、廣播位址和可用主機數」這類題目。
二進位的 AND、OR 和 2 的次方,也就是本頁的 4 個公式,正是拿分的關鍵。搭配計算過程和位元結構圖,可以一邊自己演算一邊練習。
設定「只允許來自這個子網路的連線」這類防火牆規則或存取控制清單(ACL)時,會用 CIDR 表示法(例:192.168.10.0/24)一次指定要允許或拒絕的位址。網路位址或範圍弄錯,可能會誤擋正常連線,或不小心開了漏洞。
在資安工作中,這個計算是「範圍不多也不少、剛剛好」地指定位址的基礎。
公式
符號與用語解說
符號
| \(N\) | N | 網路位址。該網路的第一個位址(主機部分全部是 0),用來當作網路本身的名稱。 |
| \(B\) | B | 廣播位址。該網路的最後一個位址(主機部分全部是 1),用來一次傳送給網路內的所有裝置。 |
| \(W\) | W | 萬用字元遮罩。把子網路遮罩的 0 和 1 對調而成,主機部分全部是 1,用於求廣播位址和存取控制。 |
| \(p\) | p | 前置長度。就是「/24」裡的「24」,表示網路部分有幾個位元。(取自英文 prefix) |
| \(H\) | H | 總主機數。該網路內的位址總數,\(H = 2^{32-p}\)。(取自英文 host) |
| \(U\) | U | 可用主機數。實際能分配給裝置的位址數,是總數扣掉網路位址和廣播位址這 2 個後的值。 |
| \(\land\) | AND(且) | 邏輯且(AND)。兩個位元「都是 1 時才得到 1」的運算,用來求網路位址。 |
| \(\lor\) | OR(或) | 邏輯或(OR)。兩個位元「任一個是 1 就得到 1」的運算,用來求廣播位址。 |
用語
| 子網路 | 把一個大的 IP 網路切割成幾個小網路時,其中的每一個小網路。依部門或據點切割網路(子網路切割),可以更容易管理,也更安全。 |
| 子網路遮罩 | 表示 IP 位址中「哪裡到哪裡是網路部分、從哪裡開始是主機部分」的 32 位元值。網路部分的位元是 1、主機部分的位元是 0(例:255.255.255.0)。 |
| 前置長度 | 網路部分的位元數。寫成「/24」的形式,用更短的方式表示和子網路遮罩相同的資訊。 |
| CIDR | 無類別域間路由(Classless Inter-Domain Routing)。不受等級限制、依前置長度自由切割網路的方式,寫成「192.168.1.0/24」這樣加上斜線的形式,是現在網際網路的標準。 |
| 網路位址 | 該網路的第一個位址(主機部分全部是 0)。不分配給個別裝置,而是當作網路本身的名稱。 |
| 廣播位址 | 該網路的最後一個位址(主機部分全部是 1)。用來同時傳送給網路內所有裝置的特殊位址。 |
| 萬用字元遮罩 | 把子網路遮罩的位元反轉後的值,也叫反遮罩。主機部分全部是 1,用於計算廣播位址和路由器的存取控制清單(ACL)。 |
| 八位元組 | IPv4 位址用句點分隔後的其中一段(8 位元=0~255)。192.168.1.0 的「192」「168」「1」「0」各是 1 個八位元組。 |
| 私有 IP 位址 | 保留給家裡或公司內部等組織內部使用的 IP 位址(10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255,由 RFC 1918 規定),不能直接在網際網路上使用。能在整個網際網路上使用的位址叫做公有 IP 位址。 |
| IP 等級 | CIDR 普及前使用的舊觀念(分級式定址,classful),依最前面的數(第 1 個八位元組)把網路大小分成 A 級、B 級、C 級……。現在路由已經不用了,但這些用語還常常出現,所以本頁也會顯示等級。 |
| IPv4 | 32 位元(約 43 億種)的定址方式,使用最廣,也是本頁主要處理的對象。 |
| IPv6 | 128 位元、實際上幾乎可以產生無限位址的新定址方式,是為了解決 IPv4 位址不足而設計的。 |
| 位元 | 表示 0 或 1 其中之一的最小資訊單位。IPv4 位址由 32 個位元組成,IPv6 位址由 128 個位元組成。 |
建議先了解的基礎知識
為了讓您「理解意義」地使用本頁的計算,這裡整理了建議先了解的基礎知識。
| 二進位與十進位(國中、高中資訊科技) |
|
| 次方與指數(國中一年級,12~13 歲) |
|
| 邏輯運算 AND、OR(高中資訊科技) |
|
| 位元與位元組(高中資訊科技) |
|
用 Excel 計算的方法
| 前置長度 p | 24 |
| 主機部分的位元數 (32−p) | =32-B1 |
| 總主機數 | =2^B2 |
| 可用主機數 | =MAX(B3-2,0) |
| 前置長度 p | 24 |
| 子網路遮罩的整數值 | =(2^32)-(2^(32-B1)) |
| 第 1 個八位元組 | =INT(B2/16777216) |
| 第 2 個八位元組 | =INT(MOD(B2,16777216)/65536) |
| 第 3 個八位元組 | =INT(MOD(B2,65536)/256) |
| 第 4 個八位元組 | =MOD(B2,256) |
第二個表格把子網路遮罩分成 4 個八位元組(0~255)來求。B2 把整個遮罩當作一個整數計算,B3~B6 再用除以 256 的次方所得的商和餘數,逐一取出每個八位元組。/24 的結果是 255.255.255.0。
用 Google 試算表計算的方法
| 前置長度 p | 24 |
| 主機部分的位元數 (32−p) | =32-B1 |
| 總主機數 | =2^B2 |
| 可用主機數 | =MAX(B3-2,0) |
| 前置長度 p | 24 |
| 子網路遮罩的整數值 | =(2^32)-(2^(32-B1)) |
| 第 1 個八位元組 | =INT(B2/16777216) |
| 第 2 個八位元組 | =INT(MOD(B2,16777216)/65536) |
| 第 3 個八位元組 | =INT(MOD(B2,65536)/256) |
| 第 4 個八位元組 | =MOD(B2,256) |
用 Python 計算的方法
import ipaddress
ip = "192.168.10.130" # IP 位址
prefix = 24 # 前置長度(/24 的 24)
net = ipaddress.ip_network(f"{ip}/{prefix}", strict=False)
total = net.num_addresses # 總主機數 = 2 ** (32 - prefix)
usable = max(total - 2, 0) # 可用主機數(/31、/32 為 0)
print(f"網路位址: {net.network_address}")
print(f"廣播位址: {net.broadcast_address}")
print(f"子網路遮罩: {net.netmask}")
print(f"萬用字元遮罩: {net.hostmask}")
print(f"總主機數: {total}")
print(f"可用主機數: {usable}")
用 LaTeX 等數學式語言的寫法(可直接複製)
N = IP ∧ mask
N = \mathrm{IP} \land \mathrm{mask}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<mi>IP</mi>
<mo>∧</mo>
<mi>mask</mi>
</mrow>
</math>
N = IP ^^ mask
BitAnd[ip, mask]
N := Bits:-And(ip, mask);
N = bitand(ip, mask);
N = IP ∧ mask
B = N ∨ W
B = N \lor W
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>B</mi>
<mo>=</mo>
<mi>N</mi>
<mo>∨</mo>
<mi>W</mi>
</mrow>
</math>
B = N vv W
BitOr[network, wildcard]
B := Bits:-Or(network, wildcard);
B = bitor(network, wildcard);
B = N ∨ W
H = 2^(32 − p)
H = 2^{32 - p}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>H</mi>
<mo>=</mo>
<msup>
<mn>2</mn>
<mrow><mn>32</mn><mo>−</mo><mi>p</mi></mrow>
</msup>
</mrow>
</math>
H = 2^(32 - p)
2^(32 - p)
H := 2^(32 - p);
H = 2^(32 - p);
H = 2^(32-p)
U = H − 2
U = H - 2
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>U</mi>
<mo>=</mo>
<mi>H</mi>
<mo>−</mo>
<mn>2</mn>
</mrow>
</math>
U = H - 2
H - 2
U := H - 2;
U = H - 2;
U = H - 2
請 ChatGPT 幫忙計算的方法
你是網路計算助理。請務必實際執行 Python(標準函式庫的 ipaddress 模組)來進行下面的計算,並只根據執行結果的數值回答(不要用心算或猜測回答)。 請用前置長度 /24 計算 IPv4 位址 192.168.10.130,求出下列各項: 1. 網路位址 2. 廣播位址 3. 子網路遮罩和萬用字元遮罩 4. 總主機數和可用主機數 請列出計算用的程式碼和執行結果的數值。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權