# Subnet Calculator

> IPv6にも完全対応したCIDR計算機。ネットワークとブロードキャスト、ホスト範囲と数、マスクのドット・16進・ワイルドカード表記、/24を/26に割るサブネット分割まで。

- URL: https://bytescope.dev/ja/subnet-calculator/
- Locale: ja · Also: [en](https://bytescope.dev/en/subnet-calculator.md) · [zh-Hant](https://bytescope.dev/zh-Hant/subnet-calculator.md)
- Runs: すべてブラウザの中で動くので、何もアップロードされません。
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

ネットワークらしいものを貼れば、あとはこの計算機が片づけます。`192.168.1.0/24`、アドレス単体、`10.0.0.1/255.255.255.0`、`10.0.0.1 255.255.255.0`、`/0xffffff00` のような16進マスク、そしてIPv6はどの書き方でも受け付けます。返ってくるのはネットワークアドレス、ブロードキャストアドレス、利用可能な最初と最後のホスト、総アドレス数と利用可能ホスト数、全表記のサブネットマスク、そしてそのアドレスの正体 — プライベート、ループバック、リンクローカル、マルチキャスト、ドキュメント用、CGNAT — です。判定は昔のクラスA/B/Cの話ではなく、RFCが定める32個の特別用途レンジと突き合わせています。

ここではIPv6は後付けのおまけではなく主役の一つです。世のsubnet calculatorの多くは、いまだにIPv4で止まっています。プレフィックスはRFC 5952の形（小文字16進、ゼロが最も長く続く箇所に `::` を1つだけ）に正規化し、`::ffff:192.0.2.1` は混在表記で表示、個数はすべて多倍長整数で厳密に数えます — /48は本当に 1,208,925,819,614,629,174,706,176 個で、`1.2e24` ではありません。おかげで設計中に実際に出てくる問いがそのまま答えになります。/56や/48から/64が何本取れるのか、そのプレフィックスはULA（`fc00::/7`）なのかグローバルに到達可能なのか、リンクローカルの `fe80::/10` はどこに位置するのか。

サブネット分割は親プレフィックスを同じ大きさの子に切り分けます — /24を4つの/26に、/48を256個の/56に — そして各子のネットワーク、範囲、ブロードキャストを一覧にします。行を全部作らずページ単位で組み立てるので、/8を/30で切るという無茶な要求にも即答します。総数（4,194,304）は算術で求め、いま見ているページだけを描くからです。マスクの変換は双方向です。プレフィックス長を渡せばドット表記・16進・ワイルドカードが返り、`255.255.254.0` やワイルドカードの `0.0.1.255` を渡せばプレフィックス長が返ります。`255.0.255.0` のような連続していないマスクは、CIDRとして不正なので理由付きで拒否します。

計算はすべてブラウザ内です。このページは静的ファイルで、裏にAPIはありません。これはよくあるプライバシー文句以上の意味があります。社内のアドレス設計はそれ自体が偵察材料で、`10.42.7.0/23 — 決済ゲートウェイ` を誰かのサーバーに送信するフォームへ貼るのは、自社ネットワークの地図を他人に渡す行為です。不正な入力でページが壊れることもありません。壊れる代わりに何が悪いのかを名指しします — `192.168.01.1` の先頭ゼロ、1つのIPv6アドレスに `::` が2つ、ネットワークだと言った値にホストビットが立っている — なので、推測ではなく入力を直せます。

## Limits

Does not look up who owns an address or scan a network; it does IPv4/IPv6 CIDR arithmetic.

## Machine output

Copy JSON copies an envelope `{ tool, url, generatedAt, userAgentHint, result }`. `tool` is `"subnet-calculator"`; `result` is the on-screen CIDR analysis below. Split-children tables are omitted. `totalAddresses` and `usableHosts` are decimal digit strings, not JSON numbers, because IPv6 counts can exceed Number.MAX_SAFE_INTEGER.

- `version` (number | null) — `4` or `6`. `null` = not analysed.
- `input` (string | null) — Trimmed text the user typed. `null` = not analysed.
- `address` (string | null) — Canonical address as typed (host bits kept). `null` = not analysed.
- `mixedNotation` (string | null) — RFC 5952 mixed form for IPv4-mapped addresses (e.g. `::ffff:192.0.2.1`). `null` = not IPv4-mapped or not analysed.
- `cidr` (string | null) — Canonical `network/prefix`. `null` = not analysed.
- `network` (string | null) — Network address (host bits cleared). `null` = not analysed.
- `firstHost` (string | null) — First assignable host. `null` = not analysed.
- `lastHost` (string | null) — Last assignable host. `null` = not analysed.
- `broadcast` (string | null) — IPv4 directed broadcast. `null` = IPv6 (IPv6 has no broadcast) or not analysed.
- `totalAddresses` (string | null) — Address count as a decimal digit string. `null` = not analysed.
- `usableHosts` (string | null) — Usable host count as a decimal digit string. `null` = not analysed.
- `hostBitsSet` (boolean | null) — Typed address had host bits set. `null` = not analysed.
- `isPointToPoint` (boolean | null) — `/31` or `/127`. `null` = not analysed.
- `isSingleAddress` (boolean | null) — `/32` or `/128`. `null` = not analysed.
- `prefixLength` (number | null) — Prefix length. `null` = not analysed.
- `netmaskDotted` (string | null) — IPv4 dotted netmask. `null` = IPv6 or not analysed.
- `netmaskHex` (string | null) — `0x`-prefixed hex mask. `null` = not analysed.
- `wildcard` (string | null) — Wildcard / host mask, same-family text. `null` = not analysed.
- `classificationName` (string | null) — Special-use range label (e.g. `"Private-Use"`). `null` = no matching range (ordinary / unassigned) or not analysed.
- `classificationRfc` (string | null) — Defining RFC (e.g. `"RFC 1918"`). `null` = no matching range or not analysed.

## FAQ

### IPv6のブロードキャストアドレスは何ですか？

存在しません。RFC 4291はIPv6からブロードキャストを完全に取り除き、全ノードマルチキャストの `ff02::1` で置き換えました。リンク上の最後のアドレスは、ただの使えるインターフェイスアドレスです。この計算機はIPv6プレフィックスではブロードキャスト欄を空のままにします。もし他のツールがIPv6の「ブロードキャストアドレス」を表示しているなら、それは範囲の最後のアドレスに、存在しない名前を付けて見せているだけです。

### /31の利用可能ホストが2、/32が1になるのはなぜですか？

/31はRFC 3021がそう決めており、/32はホストルート1本だからです。ポイントツーポイントリンクの/31にはネットワークアドレスもブロードキャストアドレスも要りません — 両端が2つのアドレスをそのまま使います — だからルーター間リンクの標準的な番号付けになり、/30に比べてリンクごとに2アドレス節約できます。その下の/32はアドレス1つ、ループバックやVIP、ホスト1台だけに一致するファイアウォールルールです。教科書の `2^ホストビット − 2` の式ならどちらも0になるので、意味のない数字を出す代わりに特別扱いしています。

### IPv6の/64で減るアドレスが2つではなく1つなのはなぜですか？

減る1つはSubnet-Router anycastアドレス、つまりインターフェイスIDが全ゼロのもの（`2001:db8::/64` なら `2001:db8::`）で、RFC 4291がリンク上のルーター用に予約しています。反対側で引くべきブロードキャストアドレスは存在しないので、引き算は1回だけです。実務ではこの数字はほぼ学術的です。/64の利用可能アドレスは 18,446,744,073,709,551,615 個あり、そもそもSLAACが/64を要求するので、リンクごとに/64を配るべきです。

### /8を/30に分割してもブラウザは固まりませんか？

固まりません。分割器は総数（4,194,304サブネット）を算術で求め、いま見ている行だけを組み立てます。既定で256件ずつなので、ページ送りでも任意のオフセットへのジャンプでも構いません。全件をメモリに作らないので、無茶な要求も常識的な要求とまったく同じ速さで返ります。

### 100.64.0.0/10とは何で、なぜポート転送ができないのですか？

そのレンジはCGNAT用（RFC 6598）です。加入者ごとにグローバルなIPv4アドレスを用意できなくなったISPが配るアドレス、つまりキャリアグレードNATの空間です。ルーターのWAN側アドレスが `100.64.0.0/10` にあるなら、自宅のNATの外側にさらにISPのNATがあるので、外から入ってくるポート転送は成立しません。あなたに届く公開アドレスが存在しないからです。この計算機はそういうアドレスを「パブリック」ではなくCGNATと表示するので、たいていその行で状況が腑に落ちます。打ち手はISPから本物のグローバルIPv4をもらう、IPv6を使う（CGNATの環境なら大抵IPv6も来ています）、あるいは外向きのトンネルを張る、のどれかです。

### `fe80::1%eth0` が拒否されるのはなぜですか？

`%eth0` の部分が原因です。これはゾーンIDで、アドレス自体の性質ではなく、特定のマシンのインターフェイスを指します。`fe80::1%eth0` と `fe80::1%wlan0` はあなたのノートPCでは別の宛先で、私の機械では両方とも何も意味しません。だから計算機はゾーン部分について真であることを何も言えません。そこを外して `fe80::1`（プレフィックスなら `fe80::/10`）を貼れば、あとは普通に動きます。
