結論

サブネットマスクとは、IP アドレスのどこまでが「ネットワークの番号」かを示す値です。255.255.255.0 は /24 と同じ意味です。

この記事でわかること

  • 2進数のANDで計算する4つの手順と例2問
  • /8〜/32のマスク・ホスト数の早見表25行
  • マスクを間違えたとき出るエラー原文6種

2026年10月23日更新|Python 3.11・iproute2 6.1.0で実行確認

パソコンは、自分の IP アドレスとサブネットマスクから「自分のネットワークの範囲」を計算し、相手がその中にいるかどうかで送り方を変えます。

flowchart TD
    A[IPアドレス<br>192.168.1.10] --> C{2進数で<br>AND}
    M[サブネットマスク<br>255.255.255.0] --> C
    C --> N[ネットワーク<br>192.168.1.0/24]
    N -->|相手が範囲内| D[直接送る]
    N -->|相手が範囲外| G[ゲートウェイへ]

急いでいる人向けに、よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
サブネットマスクとは IP アドレスをネットワーク部とホスト部に分ける値 サブネットマスクとは
255.255.255.0 の意味 前の24ビットがネットワーク部(/24) 255.255.255.0と/24
/24 でつなげる台数 254台(256−2) ホスト数の数え方
計算のしかた 2進数にして IP とマスクを AND 計算方法
よく使う値 /24・/16・/8、クラウドは /16〜/28 早見表
Windows で調べる ipconfig の「サブネット マスク」 確認方法
Mac で調べる ipconfig getoption en0 subnet_mask 確認方法
Linux で調べる ip addr の /24 の部分 確認方法
間違えると 一部の相手とだけ通信できない 間違えると起きること

確認環境:Ubuntu 24.04.4 LTS・Linux カーネル 6.18。計算は Python 3.11.15 の標準ライブラリ ipaddress、ipcalc 0.51、sipcalc 1.1.6 で実行しました。Linux の表示と通信は iproute2 6.1.0(ip コマンド)・net-tools 2.10(ifconfig)・iputils 20240117(ping)・tcpdump 4.99.4・curl 8.5.0 で、ネットワーク名前空間(ip netns。1台の中に独立したネットワークを作る仕組み)の中に PC・PC B・ルーター・サーバーの4台とスイッチを作り、マスクを変えて動かしました。Windows・Mac・iPhone・Android の画面とコマンドは Microsoft Learn・Microsoft サポート・Apple サポート・Apple のオープンソースの ipconfig(8)・FreeBSD の ifconfig(8)・NEC Aterm のサポートページ、仕様は RFC 950・1122・1918・3021・4291・4632、クラウドの値は AWS のドキュメントで確かめました(確認日 2026年10月23日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「サブネットマスクとは|計算方法・早見表・確認方法を図と実例で解説」

サブネットマスクとは(意味をたとえで理解する)

この節では、サブネットマスクが何を表す値なのかが、身近なたとえで分かります。

サブネットマスク(subnet mask)は、32ビットの IP アドレス(IPv4)のうち、前からどこまでが「ネットワーク部」で、どこからが「ホスト部」かを示す32ビットの値です。 ネットワーク部は「どのネットワークか」、ホスト部は「そのネットワークの中のどの機器か」を表します。RFC 950 は、ネットワークとサブネットの番号の部分のビットを1にしたマスク、と定めています。

1IP アドレス=住所

「さくらマンション 203号室」のように、建物の名前と部屋番号が1つの文字列になっている。

2ネットワーク部=建物の名前

同じ建物(同じネットワーク)の人どうしは、外に出ずに直接届けられる。

3サブネットマスク=区切りの位置

どこまでが建物の名前かを決める。区切りを間違えると、隣の建物の人を同じ建物の人だと思ってしまう。

IP アドレスは 192.168.1.10 のように見えますが、中身は32個の0と1です。サブネットマスクも同じ形で、前から1が続き、ある所から後ろはすべて0 になります。1の部分がネットワーク部、0の部分がホスト部です。

IP アドレス       192.168.1.10   = 11000000.10101000.00000001.00001010
サブネットマスク  255.255.255.0  = 11111111.11111111.11111111.00000000
                                   |←──── ネットワーク部 ────→|←ホスト部→|
言葉 意味 例(192.168.1.10/24)
ネットワーク部 どのネットワークかを表す部分。マスクが1の所 192.168.1
ホスト部 ネットワークの中の機器を表す部分。マスクが0の所 10
ネットワークアドレス ホスト部をすべて0にしたもの。ネットワークの名前 192.168.1.0
ブロードキャストアドレス ホスト部をすべて1にしたもの。全員あての宛先 192.168.1.255
サブネット 大きなネットワークを小さく区切った1つ1つ 192.168.1.0/24

なぜサブネットマスクが必要なのか

この節では、サブネットマスクが通信のどの場面で使われているのかが分かります。

パソコンは送るたびに、相手が「同じネットワークの中」か「外」かを、サブネットマスクを使って判断します。 RFC 1122 の 3.3.1.1「Local/Remote Decision」は、自分のアドレスと相手のアドレスをそれぞれマスクで取り出して比べ、一致すれば相手は直接つながっているネットワークにいる、一致しなければゲートウェイ経由でしか届かない、と決めています。

判断の結果 パソコンの動き 例(自分が 192.168.1.10/24)
同じネットワーク ARP で相手の MAC アドレスを調べ、直接送る 192.168.1.200 へ送る
外のネットワーク デフォルトゲートウェイ(ルーター)に渡す 8.8.8.8 へ送る

ほかにも、次の場面でサブネットマスクが使われます。

  • ルーターやクラウドで、ネットワークの大きさ(何台つなげるか)を決める
  • 部署・用途ごとにネットワークを分け、ブロードキャストの届く範囲を小さくする
  • ファイアウォールやアクセス制御で「この範囲から来た通信を許す」と書く
  • 経路表(ルーティングテーブル)で、宛先の範囲をまとめて書く

外へ出るときに渡すルーターの決め方は、関連記事「デフォルトゲートウェイとは|調べ方・設定・決め方をLinuxで実演」で扱っています。

255.255.255.0と/24の関係(プレフィックス長・CIDR表記)

この節では、255.255.255.0 と /24 が同じものである理由と、相互の変換方法が分かります。

/24 は「前から24ビットがネットワーク部」という意味で、プレフィックス長と呼びます。 255.255.255.0 は2進数で1が24個並ぶので、/24 と同じです。192.168.1.0/24 のように IP アドレスの後ろに / と数字を付ける書き方を CIDR(サイダー)表記といい、RFC 4632 の 3.1 は、/ の後ろの0〜32の10進数が意味のあるビットの数を表すと定めています。

32ビットのうちネットワーク部とホスト部の割合プレフィックス長ごと

/8
824
/16
1616
/24
248
/26
266
ネットワーク部(ビット)ホスト部(ビット)

プレフィックス長が大きいほどネットワーク部が長く、ホスト部が短くなり、つなげる台数は少なくなります。

マスクの1つの区切り(オクテット)に入る値は9種類だけ

サブネットマスクは前から1が続くので、8ビットずつの区切り(オクテット)に入る値は次の9つしかありません。RFC 4632 の 5.1 も、マスクは左から連続していなければならないとしています。

2進数 10進数 1の数
00000000 0 0
10000000 128 1
11000000 192 2
11100000 224 3
11110000 240 4
11111000 248 5
11111100 252 6
11111110 254 7
11111111 255 8

マスクからプレフィックス長へは「1の数を足す」、逆は「8ずつ255で埋め、余りをこの表で引く」で変換できます。 例:255.255.255.192 は 8+8+8+2=/26。/20 は 8+8 で 255.255、残り4は 240 なので 255.255.240.0 です。255.255.0.255 や 255.255.255.1 のように1が途中で途切れる値は、マスクとして使えません(後の節で、Python と ip コマンドが受け付けない様子を載せています)。

クラスA・B・Cと、既定のサブネットマスク

1990年代の初めまでは、IP アドレスの先頭の値で「クラス」が決まり、マスクも決まっていました(クラスフル)。今はクラスに関係なく自由な長さで区切る CIDR(クラスレス)が使われています。RFC 4632 も、もとのクラス B の 172.16.0.0 を 172.16.0.0/16 と書く例を挙げています。

クラス 先頭のオクテット 既定のマスク
A 1〜126 255.0.0.0(/8)
B 128〜191 255.255.0.0(/16)
C 192〜223 255.255.255.0(/24)
D・E 224〜255 マルチキャスト・予約(マスクなし)

家庭や社内で使うプライベート IP アドレスの範囲も、RFC 1918 でプレフィックス長つきで決められています。

範囲 CIDR 表記 マスク
10.0.0.0〜10.255.255.255 10.0.0.0/8 255.0.0.0
172.16.0.0〜172.31.255.255 172.16.0.0/12 255.240.0.0
192.168.0.0〜192.168.255.255 192.168.0.0/16 255.255.0.0

家庭のルーターはこの中から 192.168.1.0/24 のような /24 を1つ選んで使うのが一般的です。

サブネットマスクの計算方法(2進数でANDをとる)

この節では、IP アドレスとサブネットマスクから、ネットワークアドレス・ブロードキャストアドレス・使える範囲を手で求める手順が分かります。

AND(論理積)は、2つのビットが両方1のときだけ1になる計算です。 マスクが1の所は IP アドレスのビットがそのまま残り、0の所は0になります。これで「ホスト部を消したもの」=ネットワークアドレスが求まります。

IP のビット マスクのビット AND の結果
1 1 1
0 1 0
1 0 0
0 0 0
1

IP アドレスとマスクを2進数にする

4つの区切りをそれぞれ8桁の2進数にする。マスクの区切りは 0・128・192・224・240・248・252・254・255 のどれか。

2進数

2

縦に並べて AND をとる

両方1の所だけ1にする。結果を10進数に戻したものがネットワークアドレス。

AND

3

ホスト部をすべて1にする

ネットワークアドレスのホスト部(マスクが0の所)を全部1にしたものがブロードキャストアドレス。

ブロードキャスト

4

使える範囲を出す

ネットワークアドレス+1 から ブロードキャストアドレス−1 までが、機器に付けられるアドレス。

範囲

例1:192.168.1.10 と 255.255.255.0

区切りごとに2進数にして AND をとる計算を、Python で表示しました。

"""2進数にして AND をとる計算を、1オクテットずつ表示する"""
ip   = [192, 168, 1, 10]
mask = [255, 255, 255, 0]
b = lambda xs: ".".join(f"{x:08b}" for x in xs)
net = [i & m for i, m in zip(ip, mask)]          # AND:ネットワークアドレス
bc  = [n | (255 - m) for n, m in zip(net, mask)]  # ホスト部を全部1:ブロードキャスト
print("IP      ", b(ip),   ".".join(map(str, ip)))
print("マスク  ", b(mask), ".".join(map(str, mask)))
print("AND     ", b(net),  ".".join(map(str, net)))
print("ブロード", b(bc),   ".".join(map(str, bc)))
IP       11000000.10101000.00000001.00001010 192.168.1.10
マスク   11111111.11111111.11111111.00000000 255.255.255.0
AND      11000000.10101000.00000001.00000000 192.168.1.0
ブロード 11000000.10101000.00000001.11111111 192.168.1.255

ネットワークアドレスは 192.168.1.0、ブロードキャストアドレスは 192.168.1.255、機器に付けられるのは 192.168.1.1〜192.168.1.254 です。 マスクが 255 の区切りは IP の値がそのまま、0 の区切りは 0 になるので、/8・/16・/24 は2進数にしなくても求められます。

例2:172.16.45.77 と 255.255.240.0(/20)

区切りの途中でマスクが切れるときは、その区切りだけ2進数にします。

IP       10101100.00010000.00101101.01001101 172.16.45.77
マスク   11111111.11111111.11110000.00000000 255.255.240.0
AND      10101100.00010000.00100000.00000000 172.16.32.0
ブロード 10101100.00010000.00101111.11111111 172.16.47.255

3つ目の区切りは、45(00101101)と 240(11110000)の AND で 32(00100000)になりました。ネットワークアドレスは 172.16.32.0、ブロードキャストアドレスは 172.16.47.255、使える範囲は 172.16.32.1〜172.16.47.254 の 4,094個です。

暗算のコツは、マスクが途中で切れる区切りの「256 − その値」が、ネットワークの区切りの幅(ブロックサイズ)になることです。240 なら 256−240=16 なので、3つ目の区切りは 0・16・32・48 … と16ずつ区切られ、45 は 32〜47 の中にあります。

サブネットマスクのホスト数の数え方

この節では、あるサブネットマスクで何台の機器をつなげるのかを、式と実例で求められます。

使えるホスト数は「2の(32−プレフィックス長)乗 − 2」です。 ホスト部のビットが n 個なら、アドレスは2の n 乗個あります。そのうちネットワークアドレス(ホスト部が全部0)とブロードキャストアドレス(全部1)の2つは機器に付けられないので、2を引きます。

254台/24(255.255.255.0)2の8乗 256 − 2
62台/26(255.255.255.192)2の6乗 64 − 2
2台/30(255.255.255.252)2の2乗 4 − 2

Python の ipaddress で、192.168.1.10/255.255.255.0 の値をまとめて出しました。

"""IP アドレスとサブネットマスクから、ネットワークアドレス・ブロードキャスト・ホスト数を求める"""
import ipaddress

iface = ipaddress.ip_interface("192.168.1.10/255.255.255.0")   # マスクは 255.255.255.0 でも /24 でも書ける
net = iface.network
print("IP アドレス        :", iface.ip)
print("サブネットマスク    :", net.netmask)
print("プレフィックス長    :", "/" + str(net.prefixlen))
print("ネットワークアドレス:", net.network_address)
print("ブロードキャスト    :", net.broadcast_address)
hosts = list(net.hosts())
print("使えるホストの範囲  :", hosts[0], "〜", hosts[-1])
print("使えるホストの数    :", len(hosts), f"(全体 {net.num_addresses} − 2)")
print("ワイルドカードマスク:", net.hostmask)
print("CIDR 表記          :", net.with_prefixlen, "/", net.with_netmask)
IP アドレス        : 192.168.1.10
サブネットマスク    : 255.255.255.0
プレフィックス長    : /24
ネットワークアドレス: 192.168.1.0
ブロードキャスト    : 192.168.1.255
使えるホストの範囲  : 192.168.1.1 〜 192.168.1.254
使えるホストの数    : 254 (全体 256 − 2)
ワイルドカードマスク: 0.0.0.255
CIDR 表記          : 192.168.1.0/24 / 192.168.1.0/255.255.255.0

数えた台数の中には、ルーター(デフォルトゲートウェイ)の分も入っています。 /24 の 254個のうち1つはルーターが使うので、パソコンやスマホに配れるのは残りです。

/31 と /32 は例外

プレフィックス 使えるアドレス 使い道
/30 2個(4−2) ルーターどうしをつなぐ線(以前からの方法)
/31 2個(引かない) ルーターどうしの1対1の線。RFC 3021(2000年)で決まった
/32 1個 1台だけを表す。経路やファイアウォールで特定の1台を書くとき

Python のドキュメントでも、hosts() は /31 ではネットワークアドレスとブロードキャストアドレスも含め、/32 では1つのアドレスを返すと説明されています。実際に実行した結果です。

>>> list(ipaddress.ip_network("10.0.0.0/31").hosts())
[IPv4Address('10.0.0.0'), IPv4Address('10.0.0.1')]
>>> list(ipaddress.ip_network("10.0.0.5/32").hosts())
[IPv4Address('10.0.0.5')]

必要な台数からマスクを決める

「50台つなぎたい」なら、50+2=52 以上になる2のべき乗は 64(2の6乗)なので、ホスト部は6ビット、プレフィックス長は 32−6=/26(255.255.255.192)です。

import ipaddress, math
need = 50
p = 32 - math.ceil(math.log2(need + 2))
print(f"{need}台 → /{p}({ipaddress.ip_network(f'0.0.0.0/{p}').netmask})")
50台 → /26(255.255.255.192)

サブネットマスク早見表(/8〜/30)

この節では、よく使うサブネットマスクとプレフィックス長・アドレス数・ホスト数の対応を1つの表で引けます。

Python の ipaddress で /8〜/32 を1行ずつ計算して作った表です。

プレフィックス サブネットマスク アドレス数 使えるホスト数
/24 255.255.255.0 256 254
/16 255.255.0.0 65,536 65,534
/8 255.0.0.0 16,777,216 16,777,214
/25 255.255.255.128 128 126
/26 255.255.255.192 64 62
/27 255.255.255.224 32 30
/28 255.255.255.240 16 14
/29 255.255.255.248 8 6
/30 255.255.255.252 4 2
/23 255.255.254.0 512 510
/22 255.255.252.0 1,024 1,022
/21 255.255.248.0 2,048 2,046
/20 255.255.240.0 4,096 4,094
/19 255.255.224.0 8,192 8,190
/18 255.255.192.0 16,384 16,382
/17 255.255.128.0 32,768 32,766
/15 255.254.0.0 131,072 131,070
/14 255.252.0.0 262,144 262,142
/13 255.248.0.0 524,288 524,286
/12 255.240.0.0 1,048,576 1,048,574
/11 255.224.0.0 2,097,152 2,097,150
/10 255.192.0.0 4,194,304 4,194,302
/9 255.128.0.0 8,388,608 8,388,606
/31 255.255.255.254 2 2(RFC 3021)
/32 255.255.255.255 1 1

よく使う値から順に並べています。表を作ったコードです。

"""/8〜/32 のサブネットマスク早見表を ipaddress で作る"""
import ipaddress
for p in range(8, 33):
    n = ipaddress.ip_network(f"0.0.0.0/{p}")
    usable = len(list(n.hosts())) if n.num_addresses <= 1024 else n.num_addresses - 2
    print(f"| /{p} | {n.netmask} | {n.num_addresses:,} | {usable:,} |")

/0〜/7 も含めた全部の一覧と、範囲の重なりを調べるコードは、関連記事「CIDR計算・サブネット早見表|/0〜/32一覧とPython計算コード」で扱っています。

自分のPCのサブネットマスクを確認する方法(Windows・Mac・Linux・スマホ)

この節では、使っている機器のサブネットマスクを、OS ごとのコマンドと画面で調べられます。

機器 方法 見る所
Windows コマンドプロンプトで ipconfig 「サブネット マスク」の行
Windows(PowerShell) Get-NetIPAddress -AddressFamily IPv4 PrefixLength(24 など)
Mac ターミナルで ipconfig getoption en0 subnet_mask 出力の値(DHCP で受け取ったマスク)
Mac ifconfig en0 netmask 0xffffff00(16進数)
Mac(画面) システム設定 → ネットワーク → サービス → 詳細 → TCP/IP サブネットマスク
Linux ip addr または ip -br addr アドレスの後ろの /24
iPhone 設定 → Wi-Fi → 接続中のネットワークの「i」 IPV4 アドレスの「サブネットマスク」
Android 設定 → ネットワークとインターネット → インターネット → 接続中のネットワークの歯車 静的 IP の設定では「ネットワークプレフィックス長」

Windows:ipconfig と PowerShell

Microsoft Learn によると、ipconfig をパラメーターなしで実行すると、すべてのアダプターの IPv4・IPv6 アドレス、サブネットマスク、デフォルトゲートウェイが表示されます。日本語版の Windows では、アダプターごとに次の形で出ます。

イーサネット アダプター イーサネット:

   IPv4 アドレス . . . . . . . . . . . . .: 192.168.1.10
   サブネット マスク . . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . . .: 192.168.1.1

PowerShell では Get-NetIPAddress を使います。Microsoft Learn は -PrefixLength を「ローカルのサブネットの大きさを決める値で、サブネットマスクとも呼ばれる」と説明しています。表示は 255.255.255.0 ではなく 24 のようなプレフィックス長です。

Get-NetIPAddress -AddressFamily IPv4 | Format-Table IPAddress, PrefixLength, InterfaceAlias

画面では、Microsoft サポートの手順のとおり、設定の「ネットワーク & インターネット」→「Wi-Fi」か「イーサネット」で使っている接続を開くと IP の情報が出ます。手動で設定するときは「IP 設定の編集」で「手動」を選び、IPv4 をオンにすると「サブネット マスク」の欄が出ます。

Mac:ipconfig getoption・ifconfig・システム設定

Mac の ipconfig(Windows とは別のコマンド)は、getoption で DHCP で受け取った値を表示します。Apple が公開している ipconfig(8) のマニュアルには、subnet_mask (ip): 255.255.255.0 という出力の例があります。

ipconfig getifaddr en0             # en0(多くは Wi-Fi)の IP アドレス
ipconfig getoption en0 subnet_mask # en0 のサブネットマスク

Mac の ifconfig は、マスクを netmask 0xffffff00 のように16進数で表示します。 これは BSD 系の ifconfig の表示で、FreeBSD の ifconfig(8) にも、既定ではマスクを16進数で表示するとあります。0xffffff00 は ff・ff・ff・00 の4バイトで、10進数にすると 255.255.255.0 です。

>>> import ipaddress
>>> ipaddress.IPv4Address(0xffffff00)
IPv4Address('255.255.255.0')

16進数の読み方は、関連記事「16進数とは|変換・計算のやり方と0〜255早見表を3言語で実演」で扱っています。画面では、Apple サポートの手順のとおり、アップルメニュー →「システム設定」→ サイドバーの「ネットワーク」→ ネットワークサービスを選んで「詳細」→「TCP/IP」で見られます。

Linux:ip addr と ifconfig

Linux の ip コマンドは、マスクを /24 のようなプレフィックス長で表示します。 実際の表示です(PC にあたる名前空間で実行)。

ip -br addr
ip -4 addr show eth0
ip route
lo               UNKNOWN        127.0.0.1/8 
eth0@if7         UP             192.168.10.10/24 

8: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link-netns s368-sw
    inet 192.168.10.10/24 brd 192.168.10.255 scope global eth0
       valid_lft forever preferred_lft forever

default via 192.168.10.1 dev eth0 
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.10 
  • inet 192.168.10.10/24 の /24 がサブネットマスク(255.255.255.0)
  • brd 192.168.10.255 がブロードキャストアドレス
  • ip route の2行目 192.168.10.0/24 dev eth0 proto kernel scope link は、アドレスとマスクを付けたときにカーネルが自動で作った「このネットワークは直接つながっている」という経路

net-tools の ifconfig では、Mac と違って10進数で出ます。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255

iPhone・Android

iPhone は、NEC Aterm のサポートページの手順のとおり、設定アプリの「Wi-Fi」→ 接続中のネットワーク名の横の「i」をタップすると、IPV4 の情報に「サブネットマスク」が表示されます。

Android は機種や版で画面が違います。Google Pixel(Android 12)を例にした同じサポートページの手順では、「設定」→「ネットワークとインターネット」→「インターネット」→ 接続中のネットワークの歯車 →「詳細設定」で IP 設定を「静的」にすると、IP アドレスなどと並んで「ネットワークプレフィックス長」(24 など)の欄が出ます。Android はマスクを 255.255.255.0 ではなく 24 のような長さで入れます。

Pythonとipコマンドでサブネットマスクを計算・表示する

この節では、マスクの変換・分割・入力ミスの検出を、コマンドとコードで行う方法が分かります。

マスクとプレフィックス長を変換する(Python)

"""サブネットマスク ⇔ プレフィックス長の変換と、よくある入力の誤り"""
import ipaddress
print(ipaddress.ip_network("0.0.0.0/255.255.255.192").prefixlen)      # マスク → 長さ
print(ipaddress.ip_network("0.0.0.0/26").netmask)                     # 長さ → マスク
print(bin(int(ipaddress.IPv4Address("255.255.255.192"))).count("1"))  # 1 の数を数えても同じ
for s in ["192.168.1.0/255.255.0.255", "192.168.1.10/24", "192.168.1.0/33", "192.168.1.0/255.255.255.1"]:
    try:
        print(s, "→", ipaddress.ip_network(s))
    except ValueError as e:
        print(s, "→", type(e).__name__ + ":", e)
print(ipaddress.ip_network("192.168.1.10/24", strict=False))
26
255.255.255.192
26
192.168.1.0/255.255.0.255 → ValueError: '192.168.1.0/255.255.0.255' does not appear to be an IPv4 or IPv6 network
192.168.1.10/24 → ValueError: 192.168.1.10/24 has host bits set
192.168.1.0/33 → ValueError: '192.168.1.0/33' does not appear to be an IPv4 or IPv6 network
192.168.1.0/255.255.255.1 → ValueError: '192.168.1.0/255.255.255.1' does not appear to be an IPv4 or IPv6 network
192.168.1.0/24
  • 1が途中で途切れるマスク(255.255.0.255・255.255.255.1)と /33 は、エラーになりました。
  • ip_network() にホスト部が0でないアドレス(192.168.1.10/24)を渡すと has host bits set になります。 Python のドキュメントのとおり、strict=False を付けるとホスト部を消して 192.168.1.0/24 を返します。機器のアドレスとして扱うなら ip_interface() を使います。
  • ip_network("192.168.1.0/0.0.0.255") のように、後ろにワイルドカードマスク(マスクの0と1を反転した値)を書いても 192.168.1.0/24 と解釈されました。

/24 を /26 の4つに分ける(サブネット分割)

サブネット分割は、ホスト部の前のほうのビットをネットワーク部として借りて、1つのネットワークを小さく分けることです。 /24 から2ビット借りると /26 が4つ(2の2乗)できます。

import ipaddress
for sub in ipaddress.ip_network("192.168.1.0/24").subnets(new_prefix=26):
    h = list(sub.hosts())
    print(sub, sub.netmask, f"{h[0]}〜{h[-1]}", sub.broadcast_address, len(h))
192.168.1.0/26 255.255.255.192 192.168.1.1〜192.168.1.62 192.168.1.63 62
192.168.1.64/26 255.255.255.192 192.168.1.65〜192.168.1.126 192.168.1.127 62
192.168.1.128/26 255.255.255.192 192.168.1.129〜192.168.1.190 192.168.1.191 62
192.168.1.192/26 255.255.255.192 192.168.1.193〜192.168.1.254 192.168.1.255 62

分けると、それぞれにネットワークアドレスとブロードキャストアドレスが要るので、使える数は 254 から 62×4=248 に減りました。

ipcalc で2進数ごと表示する

Linux の ipcalc(apt の ipcalc パッケージ)は、ネットワーク部とホスト部の境目に空白を入れて2進数を表示します。

ipcalc -n 192.168.1.10 255.255.255.192
Address:   192.168.1.10         11000000.10101000.00000001.00 001010
Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111
=>
Network:   192.168.1.0/26       11000000.10101000.00000001.00 000000
HostMin:   192.168.1.1          11000000.10101000.00000001.00 000001
HostMax:   192.168.1.62         11000000.10101000.00000001.00 111110
Broadcast: 192.168.1.63         11000000.10101000.00000001.00 111111
Hosts/Net: 62                    Class C, Private Internet

ipcalc -n 192.168.1.0/24 26 のように後ろに新しい長さを書くと、分割した4つのサブネットを順に表示します。sipcalc では、マスクの16進数(FFFFFF00)と Cisco のワイルドカードマスク(0.0.0.255)も出ます。

Network mask        - 255.255.255.0
Network mask (bits) - 24
Network mask (hex)  - FFFFFF00
Broadcast address   - 192.168.1.255
Cisco wildcard      - 0.0.0.255
Addresses in network    - 256
Usable range        - 192.168.1.1 - 192.168.1.254

ip コマンドでマスクを付ける

ip addr add は、/24 でも 255.255.255.0 でも受け付けました。長さを書かないと /32 になります。

$ ip addr add 192.168.10.10/255.255.255.0 dev eth0
$ ip -br addr show eth0
eth0@if7         UP             192.168.10.10/24 

$ ip addr add 192.168.10.10/255.255.0.255 dev eth0
Error: any valid prefix is expected rather than "192.168.10.10/255.255.0.255".

$ ip addr add 192.168.10.10/33 dev eth0
Error: any valid prefix is expected rather than "192.168.10.10/33".

Linux の基本のネットワークコマンドは、関連記事「Linuxネットワークコマンド一覧|ip/ss/ncで障害切り分け」で扱っています。

同じネットワークかを判定する方法

この節では、2つの IP アドレスが同じネットワークにあるかを、計算とコマンドで判定できます。

2つのアドレスを同じマスクで AND して、結果(ネットワークアドレス)が同じなら同じネットワークです。 RFC 1122 の決まりと同じ手順を、Python で書きました。

"""2つの IP アドレスが同じネットワークかを判定する"""
import ipaddress

def same_network(a: str, b: str, mask: str) -> bool:
    na = ipaddress.ip_interface(f"{a}/{mask}").network
    nb = ipaddress.ip_interface(f"{b}/{mask}").network
    return na == nb

cases = [("192.168.1.10", "192.168.1.200", "255.255.255.0"),
         ("192.168.1.10", "192.168.2.10",  "255.255.255.0"),
         ("192.168.1.10", "192.168.2.10",  "255.255.0.0"),
         ("192.168.1.10", "192.168.1.200", "255.255.255.128")]
for a, b, m in cases:
    print(f"{a:13} と {b:13} マスク {m:15} → {'同じ' if same_network(a, b, m) else '違う'}")
192.168.1.10  と 192.168.1.200 マスク 255.255.255.0   → 同じ
192.168.1.10  と 192.168.2.10  マスク 255.255.255.0   → 違う
192.168.1.10  と 192.168.2.10  マスク 255.255.0.0     → 同じ
192.168.1.10  と 192.168.1.200 マスク 255.255.255.128 → 違う

同じ2つのアドレスでも、マスクが変わると判定が変わりました。 255.255.0.0 にすると 192.168.2.10 も「同じ」になり、255.255.255.128 にすると 192.168.1.200 が「違う」になります。これが次の節の「マスクを間違えると起きること」の原因です。

Linux では、OS が実際にどう判断したかを ip route get で見られます。via が無ければ直接、via 192.168.10.1 があればルーター経由です。

$ ip route get 192.168.10.200
192.168.10.200 dev eth0 src 192.168.10.10 uid 0 
    cache 
$ ip route get 192.168.20.50
192.168.20.50 via 192.168.10.1 dev eth0 src 192.168.10.10 uid 0 
    cache 

サブネットマスクを間違えると何が起きるか(ip netnsで再現)

この節では、マスクを広すぎ・狭すぎに設定したとき、どんなエラーが出て、どこまで通信できるのかが、実際の出力で分かります。

1台の Linux の中に、ネットワーク名前空間で次の5つを作りました。LAN1(192.168.10.0/24)に PC・PC B・ルーターがスイッチでつながり、ルーターの先の LAN2(192.168.20.0/24)にサーバーがあります。PC B とサーバーでは、確認用に Python の HTTP サーバー(36801・36800番)を動かしています。

flowchart TD
    PC[PC<br>192.168.10.10] --- SW[スイッチ<br>LAN1 192.168.10.0/24]
    B[PC B<br>192.168.10.200] --- SW
    SW --- RT[ルーター<br>.10.1 と .20.1]
    RT --- SV[サーバー<br>192.168.20.50]

作った手順の要点です(ルーターの転送の設定は、ルーターの名前空間の中だけで変えています)。

ip netns add s368-pc; ip netns add s368-b; ip netns add s368-rt; ip netns add s368-srv; ip netns add s368-sw
ip netns exec s368-sw ip link add br0 type bridge      # スイッチの代わり
# veth(仮想の LAN ケーブル)で各名前空間とスイッチをつなぐ(略)
ip netns exec s368-rt ip addr add 192.168.10.1/24 dev eth0
ip netns exec s368-rt ip addr add 192.168.20.1/24 dev eth1
ip netns exec s368-rt sysctl -qw net.ipv4.ip_forward=1
ip netns exec s368-b   ip addr add 192.168.10.200/24 dev eth0
ip netns exec s368-srv ip addr add 192.168.20.50/24 dev eth0
ip netns exec s368-pc  ip addr add 192.168.10.10/24 dev eth0     # ここを変えて試す
ip netns exec s368-pc  ip route add default via 192.168.10.1

正しい /24 では、PC B(ttl=64、直接)にもサーバー(ttl=63、ルーターを1つ通った)にも届きました。

64 bytes from 192.168.10.200: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 192.168.20.50: icmp_seq=1 ttl=63 time=0.057 ms

PC のマスクだけを変えた結果です。

PC の設定 宛先 結果
/24(正しい) PC B・サーバー 両方に届く
/16(広すぎ) サーバー 192.168.20.50 Destination Host Unreachable
/16(広すぎ) PC B 192.168.10.200 届く
/25(狭すぎ)・ゲートウェイなし PC B Network is unreachable
/25(狭すぎ)・ゲートウェイあり PC B 届くが行きだけルーター経由、Redirect が出る
長さを書かない(/32) PC B Network is unreachable

広すぎる(/24 を /16 にした)

外の相手まで「同じネットワーク」と思う

ルーターに渡さず ARP で直接探し、返事が来ない

外のネットワークの一部にだけ届かない

狭すぎる(/24 を /25 にした)

同じ LAN の相手を「外」と思う

ゲートウェイが無いと送る前にエラー

ゲートウェイがあると遠回りで届き、気づきにくい

広すぎるマスク(/16):Destination Host Unreachable

PC を 192.168.10.10/16 にすると、192.168.0.0〜192.168.255.255 がすべて「同じネットワーク」になります。サーバー 192.168.20.50 も範囲に入るので、PC はルーターに渡さず、自分で直接届けようとします。

$ ip route
default via 192.168.10.1 dev eth0 
192.168.0.0/16 dev eth0 proto kernel scope link src 192.168.10.10 
$ ip route get 192.168.20.50
192.168.20.50 dev eth0 src 192.168.10.10 uid 0 
    cache 
$ ping -c 3 192.168.20.50
PING 192.168.20.50 (192.168.20.50) 56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Host Unreachable
From 192.168.10.10 icmp_seq=2 Destination Host Unreachable
From 192.168.10.10 icmp_seq=3 Destination Host Unreachable

--- 192.168.20.50 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2031ms
$ ip neigh
192.168.10.200 dev eth0 lladdr fe:7b:b8:7f:f8:76 REACHABLE 
192.168.20.50 dev eth0 FAILED 

同じとき、PC の LAN ケーブルの所で tcpdump を取ると、サーバーの MAC アドレスを探す ARP の問い合わせだけが流れていました。

17:01:59.783207 ARP, Request who-has 192.168.20.50 tell 192.168.10.10, length 28
17:02:00.790465 ARP, Request who-has 192.168.20.50 tell 192.168.10.10, length 28
17:02:01.814485 ARP, Request who-has 192.168.20.50 tell 192.168.10.10, length 28

サーバーは別の LAN にいるので ARP に返事が来ず、From 自分のIP … Destination Host Unreachable(自分が出したエラー)になりました。 ip neigh の FAILED も、MAC アドレスが分からなかったことを示します。同じ LAN の PC B(192.168.10.200)には、このマスクでも届きました。TCP でも同じで、curl と Python では次のエラーになりました。

curl: (7) Failed to connect to 192.168.20.50 port 36800 after 3053 ms: Couldn't connect to server
OSError: [Errno 113] No route to host

狭すぎるマスク(/25):Network is unreachable と Redirect

PC を 192.168.10.10/25 にすると、自分のネットワークは 192.168.10.0〜192.168.10.127 だけになります。同じ LAN の PC B(192.168.10.200)は「外」と判断されます。

ゲートウェイを設定していないときは、送る前にエラーになりました。

$ ip route
192.168.10.0/25 dev eth0 proto kernel scope link src 192.168.10.10 
$ ping -c 1 192.168.10.200
ping: connect: Network is unreachable
$ curl http://192.168.10.200:36801/
curl: (7) Failed to connect to 192.168.10.200 port 36801 after 0 ms: Couldn't connect to server

ゲートウェイ(192.168.10.1)を設定すると、届くようになりました。

$ ip route get 192.168.10.200
192.168.10.200 via 192.168.10.1 dev eth0 src 192.168.10.10 uid 0 
    cache 
$ ping -c 3 192.168.10.200
PING 192.168.10.200 (192.168.10.200) 56(84) bytes of data.
From 192.168.10.1: icmp_seq=1 Redirect Host(New nexthop: 192.168.10.200)
64 bytes from 192.168.10.200: icmp_seq=1 ttl=64 time=0.090 ms
From 192.168.10.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.10.200)
64 bytes from 192.168.10.200: icmp_seq=2 ttl=64 time=0.114 ms
64 bytes from 192.168.10.200: icmp_seq=3 ttl=64 time=0.061 ms
$ curl http://192.168.10.200:36801/
hello-s368

届いてはいますが、ルーターから Redirect Host(New nexthop: 192.168.10.200)(相手は同じ LAN にいるので直接送れ、という ICMP リダイレクト)が返ってきました。 PC B の側で MAC アドレスつき(tcpdump -e)で見ると、行きと帰りで通り道が違います。

ee:83:39:b7:e2:1f > fe:7b:b8:7f:f8:76, … 192.168.10.10 > 192.168.10.200: ICMP echo request
fe:7b:b8:7f:f8:76 > 2a:17:1e:dd:f7:9a, … 192.168.10.200 > 192.168.10.10: ICMP echo reply
MAC アドレス 機器
ee:83:39:b7:e2:1f ルーター
fe:7b:b8:7f:f8:76 PC B
2a:17:1e:dd:f7:9a PC

行きはルーターが転送したもの(送り元の MAC がルーター)、帰りは PC B から PC へ直接でした。 PC B は正しい /24 なので、PC を同じネットワークだと判断して直接返します。こうした「片道だけ遠回り」は、ルーターの負荷やファイアウォールの設定によっては通信できない原因になります。リダイレクトを受けた後、PC の経路の一時記憶には cache <redirected> が残りました。

$ ip route get 192.168.10.200
192.168.10.200 via 192.168.10.200 dev eth0 src 192.168.10.10 uid 0 
    cache <redirected> expires 299sec

マスクを付け忘れる(/32)・ブロードキャストに送る

ip addr add 192.168.10.10 dev eth0 のように長さを書かないと /32(自分1台だけのネットワーク)になり、直接つながっている経路が1つもできません。同じ LAN の相手にも届きませんでした。

$ ip -br addr show eth0
eth0@if7         UP             192.168.10.10/32 
$ ip route
(何も出ない)
$ ping -c 1 192.168.10.200
ping: connect: Network is unreachable

マスクを計算し間違えて、ブロードキャストアドレス(ホスト部が全部1)を相手のアドレスだと思って ping すると、ping がそれを止めました。

$ ping -c 1 192.168.10.255
ping: Do you want to ping broadcast? Then -b. If not, check your local firewall rules

マスクの間違いを疑う切り分けの順番

  1. 1自分のマスクを見るipconfig・ip addr で、同じ LAN のほかの機器と同じ値(多くは 255.255.255.0・/24)か
  2. 2相手が範囲に入るか計算する自分と相手を同じマスクで AND し、ネットワークアドレスが同じかを比べる
  3. 3OS の判断を見るLinux は ip route get 相手のIP。外の相手なのに via が無ければ広すぎ、同じ LAN なのに via があれば狭すぎ
  4. 4エラーの文言で見分ける自分の IP からの Destination Host Unreachable は広すぎ、Network is unreachable はマスクかゲートウェイの不足

サブネットマスクの決め方(家庭・会社・クラウド)

この節では、自分でサブネットマスクを設定・設計するとき、どの値を選べばよいかの目安が分かります。

場面 よく使う値 理由・決まり
家庭の LAN 255.255.255.0(/24) 254台まで。ルーターの DHCP が自動で配る
会社の部署・フロアごと /24〜/22 台数に合わせ、増える分を見込む
ルーターどうしの1対1の線 /30 か /31 2台しか要らない。/31 は RFC 3021
AWS の VPC のサブネット /16〜/28 AWS の上限。各サブネットで5個が予約される
1台だけを表す(経路・許可リスト) /32 ファイアウォールで特定の1台を書く

DHCP(アドレスを自動で配る仕組み)を使っている機器は、IP アドレスと一緒にサブネットマスクも受け取ります。 手で設定するのは、サーバーやプリンターに固定のアドレスを付けるときです。そのときは、同じ LAN の機器やルーターと同じマスクにします。

AWS のドキュメントでは、VPC のサブネットの大きさは /28(16個)から /16(65,536個)までで、各サブネットの最初の4つと最後の1つは使えません。10.0.0.0/24 なら、10.0.0.0(ネットワークアドレス)・10.0.0.1(VPC ルーター)・10.0.0.2(DNS)・10.0.0.3(将来用)・10.0.0.255(ブロードキャスト)の5つです。/28 なら使えるのは 16−5=11個になります。VPC とサブネットを作る手順は、関連記事「AWS CLIでVPCを作成する手順|サブネットからIGWまで一式」で扱っています。

設定する前に確かめることです。

  • 1同じ LAN のほかの機器と同じマスクか1台だけ違うと、上の節の片道の遠回りや一部だけ届かない状態になる
  • 2ゲートウェイがマスクの範囲の中にあるか範囲の外のゲートウェイは設定できないか、使えない
  • 3付けるアドレスがネットワークアドレス・ブロードキャストでないか/24 なら .0 と .255 は機器に付けない
  • 4台数が増えても足りるかあとで広げるとネットワーク全体の設定変更になる
  • 5ほかのネットワーク(VPN・別拠点・クラウド)と範囲が重ならないか重なると、どちらに送るか決められなくなる

IPv6 ではサブネットマスクを使わない

IPv6 では、255.255.… のようなマスクの形ではなく、2001:db8::/64 のようなプレフィックス長だけで書きます。 RFC 4291 の 2.3 は、IPv6 のプレフィックスを IPv4 の CIDR 表記と同じように「アドレス/プレフィックス長」で書くと定めています。同じ RFC の 2.5.1 は、ユニキャストアドレスの後ろ64ビット(インターフェース ID)を64ビットの長さにするとしているので、LAN では /64 がよく使われます。

サブネットマスクの計算の練習問題(答えつき)

この節では、ここまでの計算を自分で解いて確かめられます。答えは Python の ipaddress で確かめたものです。

問題 答え
10.1.2.130/26 のネットワークアドレスと範囲は? 10.1.2.128〜10.1.2.191、使えるのは 62個
172.16.5.10、255.255.252.0 の範囲は? /22。172.16.4.0〜172.16.7.255、1,022個
192.168.0.100/25 と 192.168.0.130 は同じネットワーク? 違う(/25 の範囲は .0〜.127)
50台つなぐのに要る最小のマスクは? /26(255.255.255.192、62台)

解き方の要点です。

  • 1問目:/26 は4つ目の区切りが 192。256−192=64 ずつ区切られるので、130 は 128〜191 の中。
  • 2問目:3つ目の区切りが 252。256−252=4 ずつ区切られるので、5 は 4〜7 の中。
  • 3問目:/25 は4つ目の区切りが 128。0〜127 と 128〜255 に分かれ、100 と 130 は別。
  • 4問目:50+2=52 以上の2のべき乗は 64。ホスト部6ビットで /26。
import ipaddress
for s in ["10.1.2.130/26", "172.16.5.10/255.255.252.0", "192.168.0.100/25"]:
    n = ipaddress.ip_interface(s).network
    print(f"{s:26} → {n.network_address} 〜 {n.broadcast_address}  /{n.prefixlen}  ホスト {n.num_addresses - 2}")
print(ipaddress.ip_address("192.168.0.130") in ipaddress.ip_interface("192.168.0.100/25").network)
10.1.2.130/26              → 10.1.2.128 〜 10.1.2.191  /26  ホスト 62
172.16.5.10/255.255.252.0  → 172.16.4.0 〜 172.16.7.255  /22  ホスト 1022
192.168.0.100/25           → 192.168.0.0 〜 192.168.0.127  /25  ホスト 126
False

サブネットマスクのよくある間違いとエラー原文

この節では、出たエラーや表示から、マスクの何が間違っているかを引けます。

エラー文・症状 原因 直し方
From 自分のIP … Destination Host Unreachable マスクが広すぎ、外の相手を ARP で探している 同じ LAN の機器と同じマスクにする
ping: connect: Network is unreachable 相手が範囲外で、ゲートウェイも無い。または /32 マスクを直す。外ならゲートウェイを設定
Redirect Host(New nexthop: …) マスクが狭すぎ、同じ LAN の相手をルーターに送っている マスクを広げて同じ値にそろえる
curl: (7) Failed to connect … Couldn't connect to server 上の3つのどれか(TCP で同じ原因) ping と ip route get で切り分ける
OSError: [Errno 113] No route to host(Python) ARP に返事が無い(広すぎ)など 同上
ping: Do you want to ping broadcast? Then -b. 宛先がブロードキャストアドレス ホスト部が全部1でないアドレスにする
Error: any valid prefix is expected rather than "…" ip コマンドに1が途切れるマスクや /33 を書いた 0〜32 か、正しいマスクにする
ValueError: … has host bits set(Python) ip_network() に機器のアドレスを渡した ip_interface() か strict=False
ValueError: '…' does not appear to be an IPv4 or IPv6 network 1が途切れるマスク、/33 など 9種類の値だけでマスクを書く
ipconfig でマスクが 0.0.0.0 IP アドレスの重複など 関連記事の ipconfig の節を参照

Windows の ipconfig の出力の読み方と、マスクが 0.0.0.0 になる場合は、関連記事「ipconfigの使い方とMTUとは|/all・/flushdnsとMTUの実例」で扱っています。

よくある質問

Q. サブネットマスクとは簡単に言うと何ですか? A. IP アドレスのうち、前からどこまでが「どのネットワークか」を表す部分かを示す値です。パソコンはこの値で、相手が同じネットワークにいるか、ルーターを通して外へ送るかを決めます。

Q. 255.255.255.0 とはどういう意味ですか? A. 2進数で1が24個並んだマスクで、/24 と同じです。IP アドレスの前の3つの区切りがネットワーク部、最後の1つがホスト部で、254台の機器をつなげます。家庭の LAN でよく使われる値です。

Q. /24 や /16 とは何ですか? A. プレフィックス長といい、前から何ビットがネットワーク部かを表します。/24 は 255.255.255.0、/16 は 255.255.0.0 と同じです。「サブネットマスク早見表」の節に /8〜/32 の対応があります。

Q. サブネットマスクの調べ方は? A. Windows は ipconfig の「サブネット マスク」、Mac は ipconfig getoption en0 subnet_mask、Linux は ip addr の /24 の部分で分かります。スマホは Wi-Fi の詳細画面で見られます。「確認方法」の節に機器ごとの表があります。

Q. サブネットマスクには何を入れればよいですか? A. 同じ LAN のほかの機器やルーターと同じ値を入れます。家庭のルーターの多くは 255.255.255.0 です。DHCP を使っている機器は、マスクも自動で受け取ります。

Q. サブネットマスクを間違えるとどうなりますか? A. 広すぎると外の一部の相手に届かず Destination Host Unreachable、狭すぎると同じ LAN の相手に Network is unreachable になるか、ルーター経由の遠回りになります。全部が届かないわけではないので気づきにくいのが特徴です。

Q. 255.255.255.255 とは何ですか? A. /32 のマスクで、1台だけを表します。経路やファイアウォールで特定の1台を書くときに使います。パソコンの LAN の設定にすると、同じ LAN の相手にも届かなくなりました。

Q. ワイルドカードマスクとは何ですか? A. サブネットマスクの0と1を反転した値で、255.255.255.0 なら 0.0.0.255 です。Cisco のルーターのアクセスリストや OSPF の設定で使われます。Python の ipaddress では hostmask で求められます。

Q. サブネットマスクとデフォルトゲートウェイの違いは? A. サブネットマスクは「自分のネットワークの範囲」、デフォルトゲートウェイは「範囲の外へ送るときに渡すルーター」です。ゲートウェイのアドレスは、マスクで決まる範囲の中になければなりません。

Q. IPv6 にサブネットマスクはありますか? A. 255.255.… の形のマスクは使わず、/64 のようなプレフィックス長だけで書きます。LAN では /64 がよく使われます。

Q. サブネットとサブネットマスクの違いは? A. サブネットは区切った1つ1つのネットワーク(例 192.168.1.0/26)、サブネットマスクはその区切りの位置を示す値(例 255.255.255.192)です。

まとめ

  • サブネットマスクは、IP アドレスのネットワーク部とホスト部の境目を示す32ビットの値。1が前に続き、後ろは0。
  • 255.255.255.0 は /24 と同じ。区切りに入る値は 0・128・192・224・240・248・252・254・255 の9種類だけ。
  • IP アドレスとマスクを2進数で AND するとネットワークアドレス、ホスト部を全部1にするとブロードキャストアドレス。
  • 使えるホスト数は「2の(32−プレフィックス長)乗 − 2」。/24 は254、/26 は62、/30 は2。/31・/32 は例外。
  • Windows は ipconfig、Mac は ipconfig getoption・ifconfig(16進数)、Linux は ip addr(/24)で確認できる。
  • 広すぎると Destination Host Unreachable、狭すぎると Network is unreachable や Redirect になり、一部の相手とだけ通信できなくなる。

次に読むとよい記事です。範囲の重なりや /0〜/7 も含めた計算は、関連記事「CIDR計算・サブネット早見表|/0〜/32一覧とPython計算コード」で、外へ出るときのルーターの調べ方と設定は、関連記事「デフォルトゲートウェイとは|調べ方・設定・決め方をLinuxで実演」で扱っています。

参考・出典

確認日はいずれも 2026年10月23日です。

  • RFC 950「Internet Standard Subnetting Procedure」:https://www.rfc-editor.org/rfc/rfc950
  • RFC 1122「Requirements for Internet Hosts -- Communication Layers」:https://www.rfc-editor.org/rfc/rfc1122
  • RFC 1918「Address Allocation for Private Internets」:https://www.rfc-editor.org/rfc/rfc1918
  • RFC 3021「Using 31-Bit Prefixes on IPv4 Point-to-Point Links」:https://www.rfc-editor.org/rfc/rfc3021
  • RFC 4291「IP Version 6 Addressing Architecture」:https://www.rfc-editor.org/rfc/rfc4291
  • RFC 4632「Classless Inter-domain Routing (CIDR)」:https://www.rfc-editor.org/rfc/rfc4632
  • Python ドキュメント「ipaddress --- IPv4/IPv6 操作ライブラリ」:https://docs.python.org/3/library/ipaddress.html
  • Microsoft Learn「ipconfig」:https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/ipconfig
  • Microsoft Learn「Get-NetIPAddress」:https://learn.microsoft.com/en-us/powershell/module/nettcpip/get-netipaddress
  • Microsoft サポート「Windows の基本的なネットワーク設定とタスク」:https://support.microsoft.com/ja-jp/windows/essential-network-settings-and-tasks-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9
  • Apple サポート「Mac で TCP/IP 設定を変更する」:https://support.apple.com/ja-jp/guide/mac-help/mh14129/mac
  • Apple Open Source「ipconfig(8)」:https://opensource.apple.com/source/bootp/bootp-314/ipconfig.tproj/ipconfig.8.auto.html
  • FreeBSD Manual Pages「ifconfig(8)」:https://man.freebsd.org/cgi/man.cgi?query=ifconfig&sektion=8
  • NEC Aterm サポート「iPhone の IP アドレス等を確認する」:https://www.aterm.jp/support/qa/qa_external/00295/002.html
  • NEC Aterm サポート「Android(Android 12)の IP 設定」:https://aterm.jp/support/qa/qa_external/00244/android12.html
  • AWS「Subnet CIDR blocks」:https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「サブネットマスクとは|計算方法・早見表・確認方法を図と実例で解説」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?