ToolAct工具行動

子網計算器

計算 IPv4/IPv6 網路位址、廣播位址、遮罩、主機範圍與 CIDR——全程在瀏覽器本地完成。

網路位址192.168.1.0 複製
廣播位址192.168.1.255 複製
子網遮罩255.255.255.0 (/24) 複製
萬用字元遮罩0.0.0.255 複製
起始主機192.168.1.1 複製
結束主機192.168.1.254 複製
可用主機數254 複製
IP 類別私有C 類 複製
二進位表示網路位元主機位元
11000000.10101000.00000001.01100100
切分為更小的子網
切分至/
192.168.1.0/26
192.168.1.64/26
192.168.1.128/26
192.168.1.192/26

什麼是子網計算器?

子網計算器接收一個 IP 位址搭配 CIDR 前綴或子網遮罩,從中推導出該網路的結構性屬性:網路位址、廣播位址、可用主機範圍、總主機數,以及網路位元與主機位元之間的二進位邊界。網路工程師、系統管理員與開發者在規劃 VLSM 配置、撰寫防火牆規則、排查「為什麼這些主機彼此連不上」或設定路由表時,幾乎都會用到。背後的數學就是與遮罩做位元 AND/OR——原理簡單,實際手算卻容易出錯,IPv4 與 IPv6 位址分別為 32 位元和 128 位元時更是如此。本計算器完全在瀏覽器中執行,使用 BigInt 運算來處理完整的 IPv6(/0 到 /128)而不會損失精度,且不會把你貼上的位址傳送到任何伺服器。

使用方法

使用步驟

  1. 用頂部的切換按鈕選擇 IPv4 或 IPv6。
  2. 在輸入框中輸入 IP 位址,例如 10.0.0.42 或 2001:db8::1。
  3. 用數字輸入框或滑桿調整前綴長度,結果會即時更新。
  4. 點擊任一結果方塊,即可將該值複製到剪貼簿。
  5. IPv4 模式下,可選擇設定更長的目標前綴,將網路切分為更小的子網。

常見誤區

  • /31 網路並非無效——RFC 3021 明確允許在點對點鏈路上使用,兩個位址都可作主機。
  • /32 代表單一主機(主機路由),而非空網路。IPv6 的 /128 也是同樣道理。
  • IPv6 沒有「廣播位址」的概念,該欄位顯示的是前綴的最後一個位址,在範圍判斷上扮演相同角色。
  • 萬用字元遮罩(用於 Cisco ACL)就是子網遮罩的位元 NOT——0.0.0.255 即 255.255.255.0 對應的萬用字元。

使用場景

跨部門規劃 VLSM 位址配置假設公司有一個 /20 區段如 10.10.0.0/20(4,094 個可用主機),你需要依各部門實際人數切出子網:500 人辦公室需要 /23(510 個主機)、50 人團隊用 /26(62 個主機)、四台路由器的轉接段用 /29(6 個主機)。把每個候選前綴丟進計算器,網路位址與廣播位址會明確告訴你下一個子網應從哪裡開始,避免重疊。手算這類配置在相鄰 /26 與 /27 的邊界上幾乎一定會出 off-by-one 錯誤;這裡的二進位視覺化能讓網路位元邊界一目了然。
撰寫需要萬用字元遮罩的 Cisco/Juniper ACLCisco 的 access-list 語法接受萬用字元遮罩,而非子網遮罩。「permit ip 10.50.0.0 0.0.255.255」對應 10.50.0.0/16,但若萬用字元寫錯,比對到的就是錯誤的網段,留下安全漏洞。計算器會在你輸入任一前綴時同時顯示子網遮罩與萬用字元,可直接複製到 ACL 規則。EIGRP 與 OSPF 的 network 語句同樣使用萬用字元,而反向遮罩寫錯時會悄悄失敗——協議直接無法建立鄰接關係。
排查「兩台主機互相連不上」的工單當使用者回報 192.168.0.10 與 192.168.1.20 在同一個 Ethernet 上無法穩定互通時,第一個要查的就是兩端的遮罩是否一致。如果主機 A 是 192.168.0.10/24、主機 B 是 192.168.1.20/23,雙方對「誰在本網段」的判斷就會出現分歧:A 的網路是 192.168.0.0/24(只有 0.x 屬於本地),所以 A 會把送往 B 的封包透過預設閘道轉出;而 B 的網路是 192.168.0.0/23(同時涵蓋 0.x 與 1.x),因此 B 會直接在線路上對 A 發 ARP。流量呈現不對稱——B → A 成功,A → B 卻繞經路由器,可能被靜默丟棄或重新導向——計算器把這兩個不同的網路識別碼並列顯示,幾秒內就能看出設定錯誤。
從 IPv4 遷移到 IPv6 雙堆疊選擇 IPv6 前綴大小一開始很反直覺:一個 /64 有 18,446,744,073,709,551,616 個位址,恰好等於整個 IPv4 位址空間的平方(2^64 = (2^32)²)。慣例是每個葉節點網路分配 /64(讓 SLAAC 能運作),每個站點分配 /56 或 /48,每個 ISP 分配 /32。計算器的 IPv6 模式可確認網路與主機位元的邊界,以及那個驚人的主機數量,幫助初級工程師理解 IPv6 子網切分的重點是路由聚合,而非位址節省。
設定雲端 VPC 與安全群組規則AWS VPC、Google Cloud VPC 與 Azure VNet 在子網、路由表、安全群組規則上都需要 CIDR 區段。CIDR 設錯——比如本意是 10.0.0.0/24 卻寫成 10.0.0.0/16——會比預期多開放 256 倍的 IP 空間,往往是直接對著公網。計算器會在你把它貼進 Terraform 或主控台之前,先給出精確的主機範圍與總數;二進位檢視也能清楚看出你的 /20 是否真正對齊在 /20 邊界上(從既有網路複製貼上時很常犯這個錯)。

技術原理

IPv4 位址是 32 位元,IPv6 是 128 位元。CIDR 標記法(RFC 4632,2006 年 8 月)在位址後附加前綴長度 /n,宣告最左邊 n 位元為網路識別碼,其餘位元為主機識別碼。子網遮罩是一段位元樣式:n 個連續的 1 後接 32−n(或 128−n)個 0——/24 對應的就是 11111111.11111111.11111111.00000000,點分十進位寫法是 255.255.255.0。CIDR 取代了 RFC 791 較早的分類定址(0.0.0.0–127.255.255.255 屬於 A 類(隱含 /8),其中 0.0.0.0/8 保留作「本網路」、127.0.0.0/8 保留作迴路;128.0.0.0–191.255.255.255 屬於 B 類(/16);192.0.0.0–223.255.255.255 屬於 C 類(/24)),分類定址浪費位址相當嚴重:一家 1,000 人規模的公司分到 B 類就會拿到 65,534 個主機位址,導致 IPv4 空間支離破碎。CIDR 允許任意前綴長度,催生了 VLSM(可變長度子網遮罩,最早在 1985 年的 RFC 950 中正式定義)與路由聚合(supernetting)。 核心運算是位元層級的:network = address AND mask;broadcast = network OR (NOT mask) = network OR wildcard。以 192.168.1.100/24 為例,位址 0xC0A80164 與 0xFFFFFF00 做 AND 得到 0xC0A80100(192.168.1.0),與 0x000000FF 做 OR 得到 0xC0A801FF(192.168.1.255)。IPv4 的可用主機數是 2^(32−n) − 2(扣掉網路與廣播位址);這個 −2 在 /31 時不成立(RFC 3021 把它收回給點對點鏈路使用,兩端都可用),/32 也不成立(單一主機路由)。IPv6 沒有廣播位址——多點傳送與任意傳送取代了它——因此「最後位址」只是前綴範圍的上界。JavaScript 原生的位元運算子是 32 位元有號數,IPv4 的 0xFFFFFFFF 會溢位(變成 −1),IPv6 更是無法表示;本計算器全程使用 BigInt,確保兩種版本的計算結果完全一致。 IPv4 的私有位址空間由 RFC 1918 定義:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。IPv6 則是用 fc00::/7 範圍內的 ULA(RFC 4193),加上用於 SLAAC 與本地通訊的鏈路本地 fe80::/10。計算器會標示這些範圍,避免你不小心把私有區段公布到公網 BGP。本工具能避免的常見錯誤包括:(1) 不確定 192.168.1.100/255.255.255.0 與 /24 是否相同——計算器接受前綴形式並顯示點分遮罩;(2) 算錯 /30 與 /29 的主機容量(2 個 vs 6 個主機);(3) 把 /24 切成八個 /27 時,誤判第四個子網的起點(應該是 192.168.1.96,不是 192.168.1.97);(4) 在 Cisco ACL 語法中混淆萬用字元 0.0.0.255 與遮罩 255.255.255.0。把網路位元突顯出來的二進位視覺化,是內化邊界概念、讓這些錯誤自然消失的最快途徑。

  • RFC 4632(2006 年 8 月)定義了 CIDR——無類別域間路由——取代 RFC 791 的 A/B/C 分類方案。/n 標記法宣告網路前綴長度,其餘位元為主機部分。CIDR 催生了 VLSM(最早由 1985 年的 RFC 950 定義)與路由聚合,兩者皆是 IPv4 節省與現代 BGP 路由表的關鍵。
  • 網路位址 = IP AND 遮罩;廣播位址 = 網路 OR 萬用字元(其中萬用字元 = NOT 遮罩)。/24 對應遮罩 0xFFFFFF00、萬用字元 0x000000FF。可用主機數 = 2^(32−n) − 2,例外:/31(RFC 3021,點對點鏈路兩個位址皆可用)與 /32(單一主機路由)。
  • IPv6(128 位元)沒有廣播——由多點傳送(ff00::/8)與任意傳送取代。慣例最小前綴是 /64(用於 SLAAC,每個子網 18 京個位址);每個站點 /56 或 /48;每個 ISP /32。IPv6 位址空間優先考量路由聚合,而非位址節省。
  • RFC 1918 之外的保留範圍:127.0.0.0/8 是迴路、169.254.0.0/16 是 IPv4 鏈路本地(auto-IP / APIPA)、224.0.0.0/4 是多點傳送、240.0.0.0/4 保留作實驗用途。IPv6 同樣保留 fe80::/10 給 SLAAC 鏈路本地、ff00::/8 給多點傳送、::1/128 作迴路。計算器會區分私有與公開範圍,讓你一眼就能判斷輸入的位址是否可在公網上路由。
  • JavaScript 位元運算子是 32 位元有號數:(0xFFFFFFFF & 0xFFFFFF00) 會回傳 −256,而非 0xFFFFFF00。本計算器全程使用 BigInt,可處理完整的 IPv4 範圍與 128 位元 IPv6 而不損失精度。同一份程式碼能同時處理兩種版本,差別僅在遮罩寬度。
  • Cisco/Juniper 常見陷阱:ACL 語法接受的是萬用字元遮罩(0.0.0.255),不是子網遮罩(255.255.255.0)。EIGRP 與 OSPF 的 network 語句同樣使用萬用字元。寫反的遮罩會比對到目標網段的補集——在路由協議中悄悄失敗(無法建立鄰接),在 ACL 中則會放行錯誤流量造成可被利用的漏洞。
  • VLSM 範例:把 /24 平均切成 4 個子網,得到 4 × /26(每個 64 個位址),可用主機 62 個。相鄰 /26 的起點偏移為 0、64、128、192——而非 0、63、127、191。計算器的切分工具會自動產生這些邊界,免去你心算換算。

範例

標準 /24(最常見的區網)

輸入:     192.168.1.100/24

網路:     192.168.1.0
廣播:     192.168.1.255
遮罩:     255.255.255.0
萬用字元: 0.0.0.255
主機:     192.168.1.1 - 192.168.1.254  (254 個可用)
類別:     C 類,私有 (RFC 1918)

二進位:   11000000.10101000.00000001.01100100
          (網路位 = 左 24;主機位 = 右 8)

點對點 /31 (RFC 3021)

輸入:     10.0.0.1/31

網路:     10.0.0.0
廣播:     10.0.0.1
遮罩:     255.255.255.254
主機:     10.0.0.0 - 10.0.0.1  (2 個可用,鏈路兩端皆可)

在 RFC 3021 之前,/31 因 2 - 2 = 0 而被視為「不可用」。
現代路由器允許在點對點鏈路上使用兩個位址,可在轉接段
節省一半的位址空間。

VLSM 切分:/24 切成四個 /26

輸入:     192.168.1.0/24,切分至 /26

子網 1:   192.168.1.0/26    主機 .1   - .62
子網 2:   192.168.1.64/26   主機 .65  - .126
子網 3:   192.168.1.128/26  主機 .129 - .190
子網 4:   192.168.1.192/26  主機 .193 - .254

注意邊界:0、64、128、192——每個 /26 各有 64 個位址
(62 個可用)。常見錯誤是把子網 2 從 .63(子網 1 的廣播
位址 +1)開始——但 .63 本身就是廣播位址;下一個子網從
.64 開始。

IPv6 /64(標準葉節點網路)

輸入:     2001:db8:1234:5678::1/64

網路:     2001:db8:1234:5678::
結束:     2001:db8:1234:5678:ffff:ffff:ffff:ffff
遮罩:     ffff:ffff:ffff:ffff::
主機:     18,446,744,073,709,551,616  (2^64)

單一個 /64 的位址數比 IPv4 平方還多。SLAAC 必須使用 /64,
因為低 64 位元用來編碼介面識別碼(EUI-64 或 RFC 7217
所定義的隨機值)。

常見問題

為什麼 /24 是 254 個可用主機,而不是 256?

/24 子網有 2^8 = 256 個位址,但其中兩個被保留:網路位址(192.168.1.0)在路由表中代表整個子網,廣播位址(192.168.1.255)用於發送給子網內所有主機的訊息。兩者都不能作為主機 IP,因此剩下 254 個可分配的位址。這個 −2 規則適用於 /1 到 /30 的所有 IPv4 前綴。例外:/31 有 2 個可用位址(RFC 3021,點對點),/32 有 1 個(單一主機路由)。

子網遮罩和萬用字元遮罩有什麼差別?

子網遮罩在網路部分是 1,主機部分是 0——/24 對應 255.255.255.0。萬用字元遮罩是它的位元 NOT——/24 對應 0.0.0.255。Cisco IOS 的 access-list、EIGRP、OSPF 都使用萬用字元,因為原始 ACL 實作採「don't care」模型(萬用字元中為 1 的位元代表「這位元不必比對」)。其他廠商以及多數較新的 Cisco 語法也支援子網遮罩形式,但你接手的舊有設定通常都是萬用字元寫法。

IPv6 有廣播位址嗎?

沒有。IPv6 刻意移除了廣播,改用多點傳送(ff00::/8)與任意傳送。「all-nodes」範圍是 ff02::1,行為類似 IPv4 的鏈路本地廣播,但只會送達已加入該多點傳送群組的節點。因此在 IPv6 模式下,計算器把這個值標示為「最後位址」而非「廣播位址」;你也無法像 IPv4 的 255.255.255.255 那樣對它送出封包——協議層面就不存在能把封包送到每台主機的機制。

依舊公式 /31「沒有可用主機」,那它為何有用?

2000 年以前的教科書說 /31 有 2^1 − 2 = 0 個可用主機,因此無效。RFC 3021(2000 年 12 月)為點對點鏈路重新定義 /31:鏈路上剛好兩個端點,不需要獨立的廣播位址——鏈路本身就界定了廣播範圍。現代路由器(IOS 12.2+、Junos、FRR、Linux)都支援 /31。轉接鏈路改用 /31 而非 /30,可以省下一半的位址消耗,在大型網路上萬條鏈路累積起來相當可觀。

為什麼我看到的 IPv6 子網好像都是 /64?

依慣例,IPv6 分配給葉節點網路的最小單位就是 /64。低 64 位元保留給介面識別碼——SLAAC(RFC 4862)會用 MAC 位址(EUI-64)、基於網路字首與每主機密鑰的穩定雜湊 (RFC 7217),或短期隨機值 (RFC 4941 隱私延伸) 產生這部分。在點對點鏈路上靜態配置 /126 或 /127 技術上可行,但會讓 SLAAC 與許多自動化功能失效。建議所有承載終端設備的子網都用 /64;/127 僅用於可完全掌控的路由器對路由器鏈路。

這個工具會把我的 IP 位址送到伺服器嗎?

不會。所有計算都在你的瀏覽器中以 JavaScript BigInt 運算完成,不會把任何位址、前綴或計算結果傳送到後端。你可以打開瀏覽器 DevTools 的網路頁籤驗證——計算過程中不會有對外請求。這符合 ToolAct 所有瀏覽器端工具的隱私原則。

/24 和 255.255.255.0 有什麼差別?

功能上沒有差別——兩者只是同一個遮罩的不同寫法。/24(CIDR 標記法,RFC 4632)計算前面 1 位元的數量;255.255.255.0(點分十進位遮罩)把那些位元寫成四個八位元組的數字。多數現代作業系統與路由器設定兩種寫法都接受。計算器會同時顯示兩種形式,方便你依目標系統的需求複製貼上。

為什麼計算器會拒絕 010.0.0.1 這類輸入?

前導零(010、04、0001)會被拒絕,是因為同一個字串在不同的 IP 解析器中代表不同的意思——glibc 的 inet_aton 在歷史上會把帶前導零的八位元組解讀為八進位(010 = 8),而現代 Python(3.9.5+)與 JavaScript 執行環境則把它們當作十進位(010 = 10)。這種跨堆疊的解讀分歧曾造成實際的 SSRF 繞過漏洞(CVE-2021-29921 及其同族問題):某個服務在白名單檢查時把 010.0.0.1 視為 8.0.0.1,而下游函式庫實際連線到的卻是 10.0.0.1。為避免暗示某種特定解讀,本計算器會拒絕任何帶前導零的八位元組——請先去掉前導零(010 → 10)再貼上。