
【CCNA_6】サブネットマスクって結局何?|ネットワーク部・ホスト部から考えてみた
IPアドレスについて勉強していると必ず出てくる、
ネットワーク部
ホスト部
そして、
サブネットマスク。
たとえば、
192.168.1.100/24
というIPアドレスがあったとき、
「/24までがネットワーク部で、残りがホスト部」
という説明は理解できます。
サブネットマスクなら、
255.255.255.0
です。
でも、そこでいくつか疑問が出てきました。
そもそも、
なんでIPアドレスをネットワーク部とホスト部に分ける必要があるの?
そして、
サブネットマスクって結局何をするもの?
さらに、
「IPアドレスを無駄なく使うためにサブネット化する」
という説明もよく見ます。
でも、
サブネットマスクを変えると、なんでIPアドレスの節約になるの?
そしてもうひとつ。
同じIPアドレスでも、
192.168.1.100/24
と
192.168.1.100/26
は存在できるのでしょうか。
今回はこのあたりをまとめて整理してみました。
そもそもIPv4アドレスは32bit
IPv4アドレスは、
32bit
でできています。
普段は、
192.168.1.100
のように8bitずつ4つに分け、10進数で表記しています。
でもコンピューターから見れば、本来は32個の0と1です。
そして、この32bit全部を単純に、
「1台の機器を識別する番号」
として使っているわけではありません。
IPv4アドレスは大きく、
ネットワーク部
と
ホスト部
に分かれています。
ネットワーク部とホスト部は何のためにある?
ざっくり言えば、
ネットワーク部
→ どのネットワークに所属しているのか
ホスト部
→ そのネットワークの中のどの機器なのか
を表します。
住所で考えると分かりやすそうです。
たとえば、
東京都○○区○○町1丁目 100号
という住所があったとして、
前半がエリアを表し、最後の部分がその中の具体的な家を表しているようなイメージ。
IPアドレスも、
ネットワークを表す部分+その中の端末を表す部分
という階層構造になっています。

分けることでルーティングしやすくなる
では、なぜこんな構造にする必要があるのでしょうか。
大きな理由のひとつが、
通信先をネットワーク単位でまとめて扱えるから
です。
たとえば、
192.168.1.10
192.168.1.50
192.168.1.100
192.168.1.200
という端末が、
すべて
192.168.1.0/24
というネットワークに所属しているとします。
ルーターは、
「192.168.1.10はこっち」
「192.168.1.50はこっち」
「192.168.1.100もこっち」
と端末一台ずつについて経路を持たなくても、
「192.168.1.0/24への通信はこっち」
とネットワーク単位で扱えます。
つまり、
ネットワーク部があることで、たくさんのIPアドレスをひとまとまりとして扱える
ということです。
現在のIPルーティングでは、この「ネットワーク部」に相当する部分を、
ネットワークプレフィックス
として扱います。
自分と相手が同じネットワークか判断するためにも使う
ネットワーク部とホスト部の区別は、ルーターだけに必要なものではありません。
PC自身も使います。
たとえば自分が、
192.168.1.100/24
だったとします。
ここから、
192.168.1.200
へ通信したい。
/24なら、
192.168.1までが同じネットワーク部なので、
「これは自分と同じネットワークにいる」
と判断できます。
一方、
192.168.2.100
へ通信したい場合、
ネットワーク部が違います。
そこで、
「これは自分のネットワークの外にいる」
と判断して、ルーター、つまりデフォルトゲートウェイへ通信を渡します。
つまりサブネットの情報は、
相手が自分と同じネットワークにいるのか、それともルーターに渡す必要があるのか
を判断するためにも使われています。
じゃあサブネットマスクって結局何?
ここまで分かると、サブネットマスクの役割もかなりシンプルです。
サブネットマスクは、
IPアドレスのどこまでをネットワーク部として扱うのかを示す32bitの値
です。
たとえば、
255.255.255.0
を2進数にすると、
11111111.11111111.11111111.00000000
となります。
サブネットマスクでは、
1になっている部分
→ ネットワーク部
0になっている部分
→ ホスト部
として扱います。
つまり、
255.255.255.0
では1が24個あるので、
/24
と表すことができます。
Ciscoの説明でも、マスクの1に対応するIPアドレスのbitがネットワーク側、0に対応するbitがホスト側として扱われます。
/24って「24個の1」という意味だった
つまり、
192.168.1.100/24
の「/24」は、
なんとなくIPアドレスの後ろについている番号ではなく、
「ネットワークプレフィックスは先頭から24bitですよ」
という意味です。
/24なら、
11111111.11111111.11111111.00000000
なので、
255.255.255.0
/26なら、
11111111.11111111.11111111.11000000
なので、
255.255.255.192
になります。

同じIPでも/24と/26では所属ネットワークが変わる
ここで最初に気になっていた、
192.168.1.100/24
と
192.168.1.100/26
を比べてみます。
IPアドレス自体は、
192.168.1.100
でまったく同じです。
でもプレフィックス長が違います。
192.168.1.100/24の場合
/24なので、最初の24bitがネットワーク部。
ネットワークアドレスは、
192.168.1.0/24
です。
このネットワークが持つアドレスの範囲は、
192.168.1.0〜192.168.1.255
になります。
一般的な/24サブネットでは、そのうちネットワークアドレスとブロードキャストアドレスを除いた、
254個
をホストに割り当てられます。
192.168.1.100/26の場合
/26では、ホスト部が6bitになります。
6bitで表現できるのは、
2⁶=64通り。
そのため、/26ではアドレスが64個単位で区切られます。
192.168.1.0〜63
192.168.1.64〜127
192.168.1.128〜191
192.168.1.192〜255
という4つ。
192.168.1.100は、
64〜127
の範囲に入っています。
なので、
192.168.1.100/26
が所属するネットワークは、
192.168.1.64/26
です。
つまり、
192.168.1.100/24
→ 192.168.1.0/24に所属
192.168.1.100/26
→ 192.168.1.64/26に所属
となります。
IPアドレスの数字自体は完全に同じなのに、
サブネットマスクが変わるだけで「どのネットワークにいるのか」が変わる。
ここがかなり重要でした。

サブネット化するとアドレスを節約できる?
もうひとつ疑問だったのが、
「IPv4アドレスを無駄なく使うためにサブネットマスクを使う」
という説明です。
最初は、
「サブネットマスクをつけたところで、IPアドレスそのものの数は変わらなくない?」
と思いました。
ここは、
必要な大きさにネットワークを分けられる
と考えると分かりやすそうです。
全部/24にしたらかなり余る
たとえば会社の中に、
* 営業部:50台
* 開発部:25台
* 管理部:10台
の端末があるとします。
もしそれぞれに/24のネットワークを丸々用意すると、
1つの/24には256個のアドレスがあります。
でも営業部で必要なのは50台程度。
開発部は25台程度。
管理部は10台程度。
かなりのアドレスが使われないまま残ってしまいます。
そこで、
必要なホスト数に合わせてサブネットのサイズを変えます。
たとえば、
営業部
→ /26
→ 64アドレス
→ 一般的に62ホスト利用可能
開発部
→ /27
→ 32アドレス
→ 一般的に30ホスト利用可能
管理部
→ /28
→ 16アドレス
→ 一般的に14ホスト利用可能
とすれば、
必要な数に近いサイズで割り当てられます。
このように、
サブネットごとに異なる長さのサブネットマスクを使う方法
を、
VLSM(Variable Length Subnet Mask)
と呼びます。
Ciscoの例でも、必要なホスト数に応じて/27、/28、/30などを使い分けることで、固定サイズのサブネットよりアドレス空間を大幅に節約できることが示されています。

じゃあサブネットマスクはIPv4枯渇対策なの?
ここは少し注意が必要でした。
「IPv4アドレスが足りないからサブネットマスクが作られた」
と単純に考えるのは正確ではありません。
サブネットマスクにはまず、
IPアドレスのネットワーク部とホスト部を区別し、ネットワークをさらに分割する
という役割があります。
そのうえで、
VLSMを使って必要なサイズに細かく分けたり、
CIDRによって従来のクラスA・B・Cという固定サイズに縛られず、必要量に近いアドレスブロックを扱えるようになったことで、
IPv4アドレス空間をより効率的に利用できるようになった
という流れです。
CIDRについても、RFCではIPv4アドレス空間の保全と、インターネットのルーティング情報増大を抑えることが目的として挙げられています。
なので、
サブネットマスク=IPv4枯渇を解決するもの
ではなく、
サブネットやCIDRによってアドレス空間を必要な単位で扱えるため、無駄を減らせる
と理解した方がよさそうです。
IPv4アドレス枯渇への対策には、このほかにもNATやIPv6への移行などがあります。
サブネットマスクってプライベートIPだけにつくの?
ここも最初は少し混乱しました。
192.168.x.xのようなプライベートIPで、
192.168.1.100/24
のような表記を見ることが多かったので、
「サブネットマスクってLANの中だけで使うもの?」
と思っていました。
でも、
サブネットマスクやプレフィックス長はプライベートIP専用ではありません。
グローバルIPアドレスでも使います。
インターネット上でも、
○○.○○.○○.0/24
などのネットワークプレフィックスを使って、どの範囲のIPアドレスなのかを表します。
つまり、
プライベートIPだから/24がある
のではなく、
IPv4アドレスをネットワークとして扱うために、
グローバルでもプライベートでもプレフィックス長を使う
ということです。
じゃあ同じグローバルIPの/24と/26を両方使える?
では、
203.0.113.100/24
と
203.0.113.100/26
のように、
IPアドレス部分がまったく同じものを考えてみます。
設定上、
同じ32bitのIPアドレスに異なるプレフィックス長を組み合わせること自体はできます。
先ほどの192.168.1.100の例と同じで、
それぞれが認識するネットワーク範囲は変わります。
ただし、
同じグローバルIPv4アドレスを、無関係な2台の機器にそれぞれ割り当てて、インターネット上の別々の宛先として使える
という意味ではありません。
宛先となるIPアドレスそのものは、
どちらも同じだからです。
IPパケットにはサブネットマスクが入っていない
ここを理解すると、
「同じIPの/24と/26をインターネットで別物として使えない」
理由も分かりやすくなりました。
IPv4パケットのヘッダーには、
送信元IPアドレス
と
宛先IPアドレス
は入っています。
でも、
その端末のサブネットマスクはIPv4ヘッダーには入っていません。
つまり、
203.0.113.100/24宛だからこのパケット。
203.0.113.100/26宛だから別のパケット。
という区別はありません。
パケットに書かれている宛先は、
どちらも、
203.0.113.100
です。
プレフィックス長は、
端末自身のインターフェース設定や、
ルーターのルーティングテーブルなどで使われます。
でも「/24のルート」と「/26のルート」は同時に存在できる
ここが少し面白いところ。
同じIPアドレスを持つ2台の端末を区別することはできませんが、
ネットワークのルート
なら、
203.0.113.0/24
と、
その中に含まれる
203.0.113.64/26
のようなルートが同時に存在することはあります。
では、
/24にも/26にも一致する宛先へのパケットが来た場合、
どちらを使うのでしょうか。
ここでは、
より長いプレフィックス
つまり、
より具体的なルート
が優先されます。
これが、
Longest Prefix Match(最長一致)
です。
たとえば、
203.0.113.100
は、
203.0.113.0/24にも、
203.0.113.64/26にも含まれています。
この場合は、
より具体的な、
203.0.113.64/26
のルートが選ばれます。
IPv4ルーターは、複数のプレフィックスに一致する場合、最も具体的な、つまり最長の一致を使用して転送します。
これはまたルーティングを勉強するときに改めて整理したいところです。
今回のまとめ
今回最初に気になったのは、
「ネットワーク部、ホスト部、サブネットマスクって結局何のためにあるの?」
というところでした。
整理すると、
ネットワーク部
→ どのネットワークに所属しているかを表す
ホスト部
→ そのネットワーク内のどの端末かを表す
サブネットマスク/プレフィックス長
→ IPアドレスのどこまでをネットワーク部として扱うのかを示す
という関係です。
そして、
/24から/26に変われば、同じIPアドレスでも所属するネットワークが変わる。
さらにサブネットを必要なサイズに分割することで、
IPアドレスをより効率よく使える。
サブネットマスクはプライベートIP専用ではなく、グローバルIPでもネットワークプレフィックスとして使われます。
ただし、
IPv4パケットそのものに「/24」「/26」という情報が付いて飛んでいるわけではない。
ここも今回調べて初めて整理できました。
最初は、
「255.255.255.0を見たら/24」
くらいの暗記になりそうだったサブネットマスク。
でも、
何のためにネットワーク部とホスト部を分けて、その境界を変えると何が起きるのか
まで考えると、
少しずつ「数字」ではなく「仕組み」として見えてきた気がします。
※この記事は初学者が学習の中で調べながらまとめた内容になります。
先輩エンジニアの皆さま、間違いや誤解があるなという箇所や追加の補足情報などありましたらご指摘いただけますと大変ありがたいです🙇♂️
関連記事
・前回「【CCNA_5】Auto MDI/MDI-X、両方Autoならどっちが切り替わる?|「自動」の仕組み」
・次回「タイトル未定」
▶︎現在執筆中!