0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IPv4のクラスA〜Eを「先頭ビット」から理解する ─ ネットワーク部・ホスト部・クラスD・CIDRまで

0
Last updated at Posted at 2026-10-08

IPv4のクラスフルアドレッシングを学ぶと、次のような疑問が出てきます。

  • そもそも「アドレッシング」とは何か
  • 「クラスフル」とは何を意味するのか
  • クラスA・B・Cは何が違うのか
  • なぜクラスAは「大規模ネットワーク向け」なのか
  • 0、10、110、1110 は何を表しているのか
  • なぜクラスDは 224.0.0.0 ~ 239.255.255.255 なのか
  • クラスDにも「ホスト部」はあるのか
  • プライベートIPアドレスとクラスは同じ分類なのか
  • 現在でもクラスA/B/Cでネットワークを設計するのか

この記事では、これらを個別に暗記するのではなく、 IPv4の32bitを先頭からどう解釈するか という一本の流れで整理します。

この記事で扱うクラスフルアドレッシングは歴史的なIPv4の方式です。現在のネットワーク設計では、基本的にCIDRによるクラスレスな表現を使います。クラスA〜Eは、IPv4アドレス設計の歴史や現在のCIDRを理解するための前提知識として扱います。

そもそもアドレッシングとは何か

addressing は、直訳すると「アドレスを付けること」「アドレスを扱うこと」です。

IPネットワークの文脈では、単にIPアドレスの数字そのものを指すのではなく、

  • IPアドレスをどのような構造で解釈するか
  • どの部分をネットワークの識別に使うか
  • どの部分をネットワーク内のホストの識別に使うか
  • どの範囲のアドレスを、どの用途に割り当てるか

といった、 IPアドレスの構成・割当て・解釈の方法 を含む言葉として考えると分かりやすくなります。

例えばIPv4アドレスが、

192.168.1.10

だったとしても、この数字だけでは、

どこまでがネットワークを表す部分なのか
どこからがホストを表す部分なのか

は決まりません。

そこで、アドレスをどのように区切って解釈するかというルールが必要になります。

クラスフルアドレッシングとは何か

classful addressing は、文字どおり クラスを使うアドレッシング方式 です。

IPv4アドレスをClass A、B、Cなどに分類し、クラスごとにネットワーク部とホスト部の長さをあらかじめ固定します。

Class A
[ネットワーク側 8bit][ホスト部 24bit]

Class B
[ネットワーク側 16bit][ホスト部 16bit]

Class C
[ネットワーク側 24bit][ホスト部 8bit]

つまり、クラスフルアドレッシングでは、

IPv4アドレス
↓
先頭ビットからクラスを判定
↓
クラスによって区切り位置が決まる
↓
ネットワーク部とホスト部を解釈する

という流れになります。

ここで classful の -ful は「〜を持つ」という意味なので、

classful
= class を持つ
= クラスに基づいて扱う

と考えると名前の意味も理解しやすくなります。

これに対して現在広く使われているCIDRは Classless Inter-Domain Routing です。

classless は「クラスを使わない」という意味で、Class Aなら /8、Class Bなら /16 のような固定的な区切りに縛られず、 /20 や /27 のように必要な長さを指定できます。

この違いを最初に押さえておくと、その後に出てくるClass A〜EやCIDRの説明がつながりやすくなります。

先に結論

まず全体を表にすると、次のようになります。

クラス 先頭ビット 第1オクテットの範囲 A〜Cでのホスト部 主な意味
A 0 0〜127 24bit 大規模ネットワーク
B 10 128〜191 16bit 中規模ネットワーク
C 110 192〜223 8bit 小規模ネットワーク
D 1110 224〜239 なし IPv4マルチキャスト
E 1111 240〜255 なし 予約領域

まず全体像をつかむなら、次の対応を押さえておくと理解しやすいです。

A = 0     → ホスト部24bit → 大規模
B = 10    → ホスト部16bit → 約65,000台
C = 110   → ホスト部 8bit → 254台
D = 1110  → マルチキャスト
E = 1111  → 予約領域

ただし、この表だけを暗記すると「なぜ?」が残ります。ここから順番に仕組みを見ていきます。

IPv4アドレスは32bit

IPv4アドレスは 32bit の値です。

人間が読みやすいように、8bitずつ4つに区切って10進数で表記します。

192.168.1.10

192      168       1        10
 ↓        ↓        ↓         ↓
8bit     8bit     8bit      8bit

8bit × 4 = 32bit

この8bit単位のまとまりを オクテット と呼びます。

例えば 172.16.1.10 の第1オクテットである 172 を2進数にすると、次のようになります。

172 = 10101100

したがってIPv4アドレス全体は、

172.16.1.10

10101100.00010000.00000001.00001010

と表せます。

10進数を8bitの2進数へ直す

ここでは、いきなり

128  64  32  16   8   4   2   1

を暗記するのではなく、 なぜこの数字が並ぶのか から考えます。

まず10進数の「桁の重み」を考える

例えば 172 という10進数は、

172
= 1 × 100
+ 7 × 10
+ 2 × 1

と分解できます。

10進数では、右から順番に、

1
10
100
1000
...

と桁の重みが10倍ずつ増えていきます。

指数で書くと、

10⁰ = 1
10¹ = 10
10² = 100
10³ = 1000

です。

つまり、10進数の各桁にはそれぞれ、

100   10    1

という「その桁が持つ価値」があります。

2進数では桁の重みが2倍ずつ増える

2進数では、使える数字は 0 と 1 だけです。

そして各桁の重みは、右から順番に2倍ずつ増えます。

1   2   4   8   16   32   64   128

8bitとして左から並べると、

128  64  32  16   8   4   2   1

になります。

これはすべて2の累乗です。

128 = 2⁷
 64 = 2⁶
 32 = 2⁵
 16 = 2⁴
  8 = 2³
  4 = 2²
  2 = 2¹
  1 = 2⁰

つまり、

128  64  32  16   8   4   2   1

という数字が突然決められているわけではありません。

2進数の8桁それぞれが持つ重み を並べたものです。

2進数の0と1は「その重みを使うかどうか」

2進数では、

  • 1 = その桁の重みを使う
  • 0 = その桁の重みを使わない

と考えると分かりやすくなります。

例えば、

00000101

なら、

128  64  32  16   8   4   2   1
 0    0   0   0   0   1   0   1

なので、

4 + 1 = 5

です。

したがって、

00000101₂ = 5₁₀

となります。

172を2進数に変換する

では、10進数の 172 を8bitの2進数に変換します。

使える重みは、

128  64  32  16   8   4   2   1

です。

左から順番に、172を作るためにその重みを使えるか確認していきます。

128は使える

172 - 128 = 44

なので、128の桁は 1 です。

128  64  32  16   8   4   2   1
 1

残りは 44 です。

64は使えない

残りは44なので、64は大きすぎます。

そのため64の桁は 0 です。

128  64  32  16   8   4   2   1
 1    0

32は使える

44 - 32 = 12

なので、32の桁は 1 です。

128  64  32  16   8   4   2   1
 1    0   1

残りは 12 です。

16は使えない

残りは12なので、16は使えません。

128  64  32  16   8   4   2   1
 1    0   1   0

8は使える

12 - 8 = 4

なので、8の桁は 1 です。

128  64  32  16   8   4   2   1
 1    0   1   0   1

残りは 4 です。

4は使える

4 - 4 = 0

なので、4の桁は 1 です。

残りが0になったので、2と1の桁はどちらも 0 になります。

128  64  32  16   8   4   2   1
 1    0   1   0   1   1   0   0

したがって、

172 = 10101100₂

です。

逆に確認する

10101100 のうち、1 が立っている桁だけを足します。

128  64  32  16   8   4   2   1
 1    0   1   0   1   1   0   0

なので、

128 + 32 + 8 + 4 = 172

となり、元の10進数と一致します。

なぜ1オクテットは0〜255なのか

8bitをすべて 0 にすると、

00000000

なので値は 0 です。

逆に、すべて 1 にすると、

11111111

となります。

各桁の重みをすべて足すと、

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 255

です。

したがって、8bitで表せる範囲は、

00000000₂ = 0
~
11111111₂ = 255

となります。

これが、IPv4アドレスの各オクテットが 0 ~ 255 の範囲になる理由です。

変換の考え方をまとめる

10進数から2進数へ変換するときは、

128  64  32  16   8   4   2   1

を左から見て、

その重みを使える
↓
1

その重みは大きすぎる
↓
0

と判断していけば変換できます。

例えば 172 なら、

172
↓
128を使う      → 1
64は使わない   → 0
32を使う       → 1
16は使わない   → 0
8を使う        → 1
4を使う        → 1
2は使わない    → 0
1は使わない    → 0

なので、

10101100

です。

クラスは先頭ビットで決まる

クラスフル方式では、IPv4アドレスの先頭ビットを見てクラスを判定します。

つまり、識別パターンは次のようになります。

Class A = 0
Class B = 10
Class C = 110
Class D = 1110
Class E = 1111

1 が少しずつ増えていくので、比較的覚えやすい並びです。

「先頭ビットが0」はネットワーク部なのか

ここは混乱しやすいところです。

結論から言うと、

0、10、110 は、まず どのクラスなのかを識別するためのビット です。ただし、クラスA〜Cではその識別ビットもネットワーク側の領域に含まれます。

RFC 791で示された構造を、簡略化すると次のようになります。

Class A
[0][ネットワーク番号 7bit][ホスト 24bit]

Class B
[10][ネットワーク番号 14bit][ホスト 16bit]

Class C
[110][ネットワーク番号 21bit][ホスト 8bit]

つまり、クラスAの先頭 0 は「ネットワーク番号そのもの」ではありません。

0 の役割は、

このアドレスはClass Aです

と知らせることです。

その 0 を含めた先頭8bitが、クラスフル方式ではネットワーク側として扱われます。

クラスA・B・Cのネットワーク部とホスト部

A〜Cを並べると、規模の違いが見えてきます。

重要なのは、 ホスト部が広いほど、1つのネットワークに多くのホストを収容できる ことです。

なぜクラスAは大規模ネットワーク向けなのか

クラスAではホスト部が24bitあります。

[ネットワーク側 8bit][ホスト部 24bit]

24bitで表せる組合せは、

2²⁴ = 16,777,216

です。

古典的なクラスフルネットワークでは、ホスト部がすべて0のアドレスと、すべて1のアドレスを通常のホストに割り当てないため、

2²⁴ - 2 = 16,777,214

となります。

同様に、

Class B
2¹⁶ - 2 = 65,534

Class C
2⁸ - 2 = 254

です。

したがって、

Class A
ホスト部 24bit
↓
約1,677万ホスト
↓
大規模


Class B
ホスト部 16bit
↓
約6.5万ホスト
↓
中規模


Class C
ホスト部 8bit
↓
254ホスト
↓
小規模

となります。

つまり、 クラスAが大規模と言われるのは、ネットワーク部が大きいからではなく、ホスト部を広く取れるから です。

クラスDは何が違うのか

クラスDは、クラスA〜Cと目的が違います。

クラスA〜Cは、基本的にネットワークとホストを識別するためのアドレスでした。

一方、クラスDは IPv4マルチキャストのグループを識別するためのアドレス です。

RFC 1112では、先頭4bitが 1110 のアドレスをClass Dのホストグループアドレスと定義しています。

Class D

[1110][残り28bit]
  ↑
クラス識別

残り28bitはマルチキャストグループの識別に使う

したがって、クラスDについて、

第2〜第4オクテットがホスト部

とは考えません。

A〜Cのような「ネットワーク部 + ホスト部」という通常の分割とは用途が異なるからです。

なぜクラスDは224〜239なのか

クラスDでは、第1オクテットの先頭4bitが 1110 に固定されています。

最小値を作るなら、残り4bitを全部0にします。

1110 0000

各bitの重みを見ると、

128  64  32  16   8   4   2   1
 1    1   1   0   0   0   0   0

なので、

128 + 64 + 32 = 224

です。

最大値を作るなら、残り4bitを全部1にします。

1110 1111

したがって、

128 + 64 + 32 + 8 + 4 + 2 + 1 = 239

となります。

つまり第1オクテットは、

224 ~ 239

です。

さらに、クラスDで固定されるのは32bit全体の先頭4bitだけなので、範囲の最大値を考えると残りのbitをすべて1にできます。

11101111.11111111.11111111.11111111

10進数へ直すと、

239.255.255.255

です。

したがってClass Dの範囲は、

224.0.0.0 ~ 239.255.255.255

となります。

なぜ第2〜第4オクテットは255まで行けるのか

1オクテットは8bitです。

8bitをすべて1にすると、

11111111

です。

これは、

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 255

です。

そのため、IPv4の各オクテットは10進数では基本的に 0 ~ 255 の範囲になります。

クラスDでは、

1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

の先頭4bitだけが固定されています。

そのため範囲上の最大値は、

11101111.11111111.11111111.11111111

すなわち、

239.255.255.255

になるわけです。

マルチキャストとは何か

マルチキャストは、 特定のグループに参加している複数の受信者へ同じデータを届ける通信 です。

ユニキャスト、ブロードキャストと比較すると分かりやすくなります。

これはユニキャストです。

これはブロードキャストのイメージです。

これはマルチキャストのイメージです。

Class Dのアドレスは、この「どのマルチキャストグループ宛てか」を表すために使われます。

クラスEとは

クラスEは先頭4bitが 1111 の領域です。

1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

第1オクテットは、

240 ~ 255

になります。

歴史的には、将来の利用などのために予約された領域として扱われてきました。

基本的な整理として、

Class E = 予約領域

くらいの理解でまず十分です。

プライベートIPアドレスは「別の分類」

よくある誤解が、

Class D = プライベートIP

というものです。

これは違います。

クラスA〜Eは、IPv4アドレスを先頭ビットなどで分類する歴史的な方式です。

一方、プライベートIPアドレスは、 インターネット上でグローバルに経路制御する用途ではなく、プライベートネットワーク内で使うために予約されたアドレス範囲 です。

RFC 1918で定められている代表的な範囲は次の3つです。

10.0.0.0/8

172.16.0.0/12

192.168.0.0/16

関係を分けて考えると理解しやすくなります。

つまり「Class D」と「プライベートIP」は、そもそも分類している観点が違います。

現在はCIDRを使う

ここまで説明したClass A・B・Cの考え方は、現在のネットワーク設計では基本的に使われません。

理由の一つは、クラスフル方式ではネットワークの大きさが粗すぎることです。

例えば、

Class C
最大254ホスト

では足りないネットワークが300台必要だったとします。

しかしClass Bへ移ると、

最大65,534ホスト

になり、大量のアドレスが余ってしまいます。

そこで登場したのが CIDR(Classless Inter-Domain Routing) です。

CIDRでは、ネットワーク部の長さを / の後ろに明示します。

192.168.1.0/24

なら、

先頭24bit = ネットワーク部
残り 8bit = ホスト側

です。

10.0.0.0/16

なら、

先頭16bit = ネットワーク部
残り16bit = ホスト側

です。

つまり現在は、

10.x.x.xだからClass Aなので必ず/8

とは考えません。

10.0.0.0/16 のように、クラスに縛られずネットワーク部の長さを指定できます。

JPNICも、現在はクラスレス方式によってIPv4アドレスが分配されていると説明しています。

クラスフルとCIDRの関係

クラスA〜Eは歴史的な分類であり、現在の実務ではCIDRの理解の方が重要です。

数字からクラスを見分ける

クラス問題では、次の対応をすぐ思い出せるようにしておくと解きやすくなります。

約250台

2⁸ - 2 = 254

なので、

Class C

です。

約65,000台

2¹⁶ - 2 = 65,534

なので、

Class B

です。

大規模ネットワーク

ホスト部24bit
↓
Class A

です。

マルチキャスト

1110
↓
224 ~ 239
↓
Class D

です。

よくある勘違い

「先頭の0はネットワーク番号?」

完全にはそうではありません。

0 はClass Aを示す クラス識別ビット です。

Class Aでは、

[0][ネットワーク番号 7bit][ホスト 24bit]

という構造になります。

「Class Dの第2〜第4オクテットはホスト部?」

違います。

Class Dはマルチキャストグループの識別用なので、A〜Cと同じ「ネットワーク部 + ホスト部」という分け方をしません。

「プライベートIPはClass D?」

違います。

プライベートIPはRFC 1918で定められた別の分類です。

「Class Aなら現在も必ず/8?」

違います。

クラスフル方式の歴史的なClass Aでは /8 相当でしたが、現在はCIDRを使います。

例えば、

10.0.0.0/16

のような設計も普通に行えます。

まとめ

IPv4のクラス分けは、個別の数字を丸暗記するより、先頭ビットから理解すると整理しやすくなります。

A = 0
B = 10
C = 110
D = 1110
E = 1111

A〜Cは、

ネットワーク側 | ホスト部

という構造を持ち、ホスト部の大きさによって1ネットワークあたりの規模が変わります。

A → Host 24bit → 大規模
B → Host 16bit → 約65,000
C → Host  8bit → 254

一方Class Dは、

1110 + マルチキャストグループ識別部分

であり、通常のホストアドレスではありません。

先頭 1110 から、

224.0.0.0 ~ 239.255.255.255

という範囲も自分で導けます。

そして現在の実務では、A/B/Cという固定的なクラスではなく、

192.168.1.0/24
10.0.0.0/16

のようなCIDRを使います。

クラスフルの仕組みを理解した上でCIDRへつなげると、単なる暗記ではなく、IPv4アドレス設計の変遷として理解できます。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?