IPアドレスとは(1)|クラスとCIDER
- 著者:YAMANJO
- 公開日:2008年7月27日
- 最終更新日:2025年5月9日
IPで使用されるIPアドレスとイーサネットで使用されるMACアドレスの違い、クラスとCIDR、サブネットマスクの仕組みについて理解していきましょう。
IPアドレスとMACアドレス
これまでの学習のとおり、同じネットワークと異なるネットワークという概念は非常に重要で、同じネットワークがLAN、異なるネットワークがセグメントの異なるLANのことでした。
なぜ重要なのかと言うと、通信に使われるプロトコルが異なるからです。
プロトコルとOSI参照モデル で学習のとおり、LANの通信は第2層のデータリンク層が規定しており、プロトコルは主にイーサネットが使われています。言い換えると、イーサネットで通信できる範囲が同じネットワークになります。
異なるネットワークとの通信は、第3層のネットワーク層が規定し、プロトコルは主にIP(インターネットプロトコル)が使われています。文字どおり、インターネットのためのプロトコルで、異なるネットワークの集合体であるインターネットは、異なるネットワークの代表格になります。
同じネットワークの通信を「L2通信」、異なるネットワークの通信を「L3通信」と言います。プロトコルが違うということは、通信に使われるアドレスも異なります。イーサネットではMACアドレスが使われ、IPではIPアドレスが使われます。
MACアドレスとは、製造段階で機器に割り当てられた固有の識別番号で、基本的には重複しない不変の番号になります。そのため、ネットワーク内で確実にノードを特定することができます。
対してIPアドレスは、ユーザーが任意で割り当てることができる番号になります。詳しくは後述しますが、通信するネットワークの範囲内で重複がなければ問題ありません。逆に言えば、インターネットで固有のIPアドレスを割り当てる場合は、重複しない世界唯一のアドレスを取得する必要がありますが、様々な仕組みによってユーザーはこのことを意識する必要がなくなっています。
そもそも、MACアドレスのように、ネットワークに固有のアドレスを事前に割り当てておくことはできません。そのため、IPアドレスはインターネットや異なるLANとの通信において、目的のノードが所属するネットワークを特定する役割を担います。
IPアドレスによってネットワークが特定されると、その中での通信はMACアドレスに切り替えて行う仕組みです。同項で学習のとおり、MACアドレスだけで通信するとなると、送信側の機器にすべてのノードのMACアドレスを登録しておく必要があるからです。
IPアドレスでネットワークが特定されることによって、送信側の機器は異なるネットワークのノードのMACアドレスを管理する必要がなくなり、送信先のネットワークの機器に任せることができます。
つまり、L2通信を担当するスイッチングHUBなどのL2機器は、接続されているノードのMACアドレスを管理するだけでよく、異なるネットワークへ通信する場合は、L3通信を担当するルータやL3スイッチなどのL3機器がIPアドレスによって転送します。したがって、L3機器はIPアドレスとMACアドレスを紐づけて管理しています。L2機器はMACアドレスしか見ていないからです。
L3機器は、異なるネットワークからパケットが運ばれて来ると、MACアドレスを追加してパケットをフレームで包み込み、前項で学習した「カプセル化」を行ってL2機器に渡します。逆にネットワークのフレームを異なるネットワークへ転送する場合は、L3機器がフレームのカプセル化を解除してパケットを取り出します。
このような流れで、L2とL3通信が切り替わりますが、ポイントとしては、IPアドレスはL2通信では使われないということです。そのため、IPアドレスはネットワークの識別だけで、特定のノードまで識別できるものではないと学習してきました。そのとおりなのですが、少し違和感がなかったでしょうか?
例えば、会社等のLANでは多くの場合が固定のIPアドレスを割り当てており、異なるセグメントのLANでも体系の異なるIPアドレスを規則的に割り当てています。ネットワーク管理の基本はIPアドレス管理になっており、MACアドレスでノードを管理しているケースはあまりありません。
つまり、実際には、IPアドレスだけでノードまで特定することができるのです。インターネット上で重複しないIPアドレスをグローバルアドレスと言いますが、グローバルアドレスはインターネット上でそのノードを一意に特定できる情報になります。(グローバルアドレスについては次々項で詳しく学習します)
したがって、IPアドレスだけでノードを特定することは可能になりますが、同じネットワーク内では物理的にIPアドレスで通信できないため、IPアドレスに対応させたMACアドレスに切り替えて通信しているということです。
OSI参照モデルの建付けとして、レイヤーの明確な役割分担があるため、実際の運用はもっと柔軟に対応しているということです。現代のインターネットではIPアドレスによって多くの識別や管理が行われており、MACアドレスはユーザーが直接意識する必要がない場面が増えています。
少々難解になりましたが、やはり難しく感じた方は、プロトコルとOSI参照モデル をもう一度学習してみてください。
IPアドレスの仕組み
IPアドレスとは、文字どおりIPネットワーク上のアドレス(住所) を意味します。IPネットワークの象徴的なネットワークがインターネットであり、IPアドレスはインターネット上の住所と言い換えることができます。
しかし、URI(URL)とは ではインターネット上の住所を「URL」だと学習しました。確かにどちらも住所に違いありませんが、URLは実質的に指定したプロトコルでファイル取得を行う手段になっています。IPアドレスはただの数値情報であり、ファイルを取得したりプロトコルを指定する機能はありません。
また、同項で学習のとおり、URLはドメインの記述によってサーバの住所を特定します。ドメインについては次項で詳しく学習しますが、サーバを特定するための識別子で、例えば「yamanjo.net」のような文字列になります。この文字列がIPアドレスに対応しています。
と言っても、文字列が数字に変換されているわけではなく、ドメインを管理する専用のサーバが文字列とIPアドレスを対応させて保管しています。
例えば、ブラウザで「yamanjo.net」のURLを指定すると、ドメインを管理するサーバに問い合せが行われ、「この文字列に対応するサーバのIPアドレスはこれです」といった返答があります。
つまり、ドメイン名(文字情報)のみでIPアドレスが取得できるという仕組みです。この仕組みを「名前解決」と言い、名前解決を行うためのシステムをDNSと言いますが、DNSについても次項で詳しく学習します。
要するに、URLにIPアドレスが書かれているわけではありませんが、通信の中でIPアドレスが使われているということです。したがって、URLもIPアドレスも住所の意味で間違いではありません。URLはナビに近いものと言えるかもしれません。
ではこれを踏まえて、IPアドレスの仕組みを詳しく理解していきましょう。
IPアドレスは、先述のとおり実質的にそれだけでノードを特定できる情報です。そのため、通信範囲内にあるネットワークでは、セグメントの違いに関わらず、ユニーク(重複しない唯一の意味)な番号である必要があります。
ただし、IPアドレスには、
IPv4とIPv6
という2つのバージョンがあります。
IPv4は「アイピー・ブイ・ヨン(フォー)」、IPv6は「アイピー・ブイ・ロク(シックス)」と略して呼ばれることもありますが、現在使われているのはこの2つです。バージョン1、3、5なども存在していましたが、実用化されなかったため、実質的に2つしかありません。
本項では、まずIPv4について学習していきたいと思います。もともと、IPv4が一般的なIPアドレスであり、IPアドレスと言えばIPv4を意味します。そのため、以降でも特に指定しない限り、IPアドレスという用語はIPv4の意味で使用します。
IPアドレスは「32桁(32ビット)」の2進数で表されます。例えば、32桁の2進数は下記のようになります。
11011011000010011110011000001011
32桁の「0」と「1」で重複しない並びを作成していきます。そのため、2の32乗で単純計算して、約43億通りの重複しない値(アドレス)が作成可能です。
43億通りと聞いて多いと思うでしょうか?少ないと思うでしょうか?この問題がIPv6へつながっていくのですが、IPv4は32ビットを使うように設計されています。
ただ桁数がこれだけあると、とても覚えることができず、人間には扱いにくいものです。
そこで、
32桁を4ブロックに区切り、さらに2進数から10進数に変換して表記する
ことで、人間に扱いやすくしています。
例えば「210.9.230.13」といった具合です。10進数で表現すれば人間にもかなり扱いやすくなります。

このように、32桁を4ブロック8桁に区分けするということは、1バイト(8ビット)の数字が使用できます。つまり、2の8乗で256文字分が使用できることになります。したがって、IPアドレスは「0」から「255」までの4つの10進数で表現することができます。
この場合「11011011」は「1×27+1×26+0×25+1×24+1×23+0×22+1×21+1×20」となり「219」になります。(進数変換について詳しくは、2進数と10進数と16進数 を参照してください)
IPアドレスは通信範囲内で重複しなければ問題ありませんが、管理上、一定の規則性を持たせて割り当てることが一般的です。
MACアドレスにも左半分がメーカー番号、右半分が識別番号という規則性がありました。IPアドレスも同様に、4つのブロックに意味を持たせます。
4つの各ブロックを「オクテット」と呼び、さらに4つのオクテットを「ネットワークアドレス部」と「ホストアドレス部」に分けます。ネットワークアドレス部でネットワークの種類であるセグメントを、ホストアドレス部でそのセグメント内のホストの識別番号を表します。
IPネットワークでは、IPアドレスを割り当てられたコンピュータや機器を「ホスト」と呼びます。ノードと同じような意味ですが、ノードはネットワークに接続されているHUBなどのあらゆる機器を対象にしており、ホストはIP通信が可能なPCやサーバなどを対象としています(ノードについて詳しくは、LAN・WANとは を参照してください)
つまり、学習してきたように、ネットワークアドレス部でネットワークを特定し、ホストアドレス部でそのネットワーク内のホスト(ノード)まで特定することができます。
ということは、同セグメント内の複数のホストにIPアドレスを割り当てる場合は、ネットワークアドレス部の値は同じになり、ホストアドレス部にホスト固有の値を割り当てることになります。
例えば、ホストA~ホストCを「192.168.1.1~192.168.1.3」のように割り当てます。こうすることで、ネットワークアドレス部でそのネットワークの属性(セグメント)を表しつつ、IPアドレス自体は固有の番号を作成することが可能になります。
アドレスクラス
こうして、共通のネットワークアドレス部を指定することで、セグメントごとにIPアドレスを規則的に管理することができます。
ただし、先ほどの例では、どこまでがネットワークアドレス部で、どこからがホストアドレス部なのかがわかりません。具体的に言えば「192.168.1.1~192.168.1.3」のセグメントが「192」までなのか「192.168」までなのか「192.168.1」までなのかがわかりません。
実際にこれを指定する方法は後述しますが、例えば、第3オクテットの「192.168.1」までをネットワークアドレス部とし、第4オクテットのみがホストアドレス部とします。
すると「192.168.1」のアドレスを持つホストは同じセグメント内にあることになります。したがって「192.168.2」や「192.168.3」のアドレスを持つホストは別セグメントになります。
また「192.168」までをネットワークアドレス部にすれば、「192.168」までが同セグメントになり「192.168.2」や「192.168.3」のホストは同セグメントになります。
なかなか頭を使いますが、非常に重要な仕組みなので理解しておく必要があります。先述のとおり、IPアドレスはユーザーが任意に割り当てることができるため、どこまでをネットワークアドレス部にするか、どこからをホストアドレス部にするかも自由に決めることができます。
どのように指定するのかはネットワーク管理者の考え方によりますが、一般的には、ネットワーク内のホスト数によって決めます。ホスト数が多くなりそうであれば、ネットワークアドレス部の範囲を狭くし、ホスト数が少ないようであればネットワークアドレス部の範囲を広くします。
どういうことかと言うと、ネットワークアドレス部が固定の値になるため、ホストに割り当て可能なアドレスは、ホストアドレス部に割り当てられたビット数だけになるからです。
例えば、第3オクテットまでをネットワークアドレス部とした場合は、残りが第4オクテットしかなく、256台分しか固有の番号を割り当てることができません。

そのため、ネットワークアドレス部とホストアドレス部をどこで区切るのかは、割り当てるネットワークの大きさ(接続台数)によって変わります。
この大きさの違いによる区分を「クラス方式」と呼びます。
クラスA、クラスB、クラスC
の3つのクラスに分類されています。(さらに細かい分類もありますが本項では割愛します)
クラスは、単純にネットワークアドレス部に何オクテット使うかで分類します。第1オクテットだけがクラスA、第2オクテットまでがクラスB、第3オクテットまでがクラスCになります。
接続台数が多いネットワークでは、クラスAのようにホストアドレス部を広くとることで、より多くのホストを接続することができます。逆に、接続台数が少ないネットワークでは、クラスCのようにホストアドレス部を狭くすることで、無駄なアドレスが出ないようにすることができます。
これは電話の市外局番と同じで、IPアドレスを体系的に無駄なく利用するための方法です。ホストの多い都心部では市外局番が2桁ですが、ホストの少ない田舎では4桁になるイメージです。
クラスA
では、各クラスでどれだけのホストにアドレスを割り当てることができるのか理解していきましょう。
クラスAは、第1オクテットだけがネットワークアドレス部です。そのため、ネットワークアドレス部に8ビット、ホストアドレス部に24ビット使うことができます。

ただし、最上位のビットは「0」に決められています。これは、上位ビットのパターンでクラスを分類するためで、最上位ビットが「0」の場合は、クラスAになります。そのため、ネットワークアドレス部は実質7ビットになります。
仮に最上位ビットに「1」が入ると他のクラスと重複してしまうことになります。クラスBはクラスAと、クラスCはクラスA・クラスBとネットワークアドレス部のオクテットを共有するため、他のクラスの範囲を超えないように決められているルールになります。
したがって、クラスAでは2の7乗で「128通り」(0~127まで)がネットワークアドレス部となり、残り3オクテット「256通り」(0~255まで)の3乗がホストアドレス部になります。
具体的には「0.0.0.0」~「127.255.255.255」までがクラスAのアドレス空間になります。ホストには3オクテット使えるので、256の3乗で「16,777,216」台まで同一セグメントにホストを接続できる計算になります。
ただし、ネットワークアドレス部は、7ビットで「0~127」の128通りのセグメントを作成することができますが、「0」と「127」は用途が決まっていて利用できないことになっています。そのため、実質「1~126」の126通りになります。
つまり、ネットワークアドレス部が「0」と「127」のすべてのアドレス範囲がまるごと使えないことになります。これは、特殊な用途に使用するためで「0.0.0.0~0.255.255.255」と「127.0.0.0~127.255.255.255」の範囲が使用できません。 (こうした範囲全体の制約はクラスAだけです)
さらに、ホストアドレス部がすべて「0」とすべて「1」になるアドレスは使用できません。(この制約は全クラス対象です)
例えば、ネットワークアドレス部を「1」とすると、ホストアドレス部がすべて「0」のアドレスは「1.0.0.0」となり、ホストアドレス部がすべて「1」のアドレスは「1.255.255.255」となります。この2つのアドレスは使用できません。
ホストアドレス部がすべて「0」になるアドレスをネットワークアドレス、すべて「1」になるアドレスをブロードキャストアドレス
と言います。
正確には、そのセグメントの一番最初のアドレスがネットワークアドレスで、多くの場合が「0」になります。また、そのセグメントの一番最後のアドレスがブロードキャストアドレスで、多くの場合が「255」になります。(後述しますが、オクテットの途中で区切る場合は「0」や「255」にならない場合があります)
したがって、各セグメントでは総数から「-2」の「16,777,214」が割り当て可能なホスト数になります。
クラスAのすべてのアドレスを計算すると「126×16,777,214=2,113,928,964」となり、約21億通りのアドレスを表現することができる膨大なアドレス空間になります。これは、全アドレスの約半分になります。
どうしてこれほどの数のクラスが必要なのかと言うと、インターネットの初期に、LANではなくインターネット上で重複しないIPアドレスが必要だったからです。
インターネットはLANとは異なり、通信範囲に制限がないため、個人レベルではIPアドレスが重複しているかどうか、またそのIPアドレスを使っても良いのかどうかの判断ができません。
現在では、様々な技術によって個人がIPアドレスの重複を意識することはありませんが、IPアドレスを管理している国際機関「NIC:Network Information Center」(日本では「JPNIC」)によって、国や団体、組織、プロバイダなどにIPアドレスがクラスAで割り当てられました。つまり、国などの規模で多くのホストを抱える組織に割り当てるクラスになります。
しかし、逆にセグメント数が少ないため、126の国や組織にそのまま割り当てたというわけではなく、セグメントのなかでもさらに途中で分けて配分したようです。
こうした特徴から、膨大な無駄が生まれる(未使用のアドレスが生まれる)というデメリットがあり、限りあるアドレスを効率的に分配するという本来の目的には合致しないクラスと言えます。
クラスB
クラスBは、第2オクテットまでをネットワークアドレス部にします。

クラスBでは、上位2ビットが「10」に決められています。そのため、上位2ビットが「10」の場合はクラスBになります。
したがって、第1オクテットは実質6ビットで「10000000~10111111」まで使用することができます。10進数に変換すると「128~191」の64通り(2の6乗)になります。
クラスAが「127」まで使用するので、次の「128~191」がクラスBの範囲になります。そのため「128.0.0.0」~「191.255.255.255」がクラスBのアドレス空間になります。
クラスBでは第2オクテットまでがネットワークアドレス部になるため、第1オクテットの「64通り」、第2オクテットの「256通り」で「64×256=16,384」のセグメントを作成することができます。
ホストアドレス部は第3オクテットと第4オクテットで、「256通り」の2乗で「65,536」台まで同一セグメントにホストを接続できる計算になります。
ただし、クラスAと同様にネットワークアドレス部を「128.0」とすると、ホストアドレス部がすべて「0」のアドレスは「128.0.0.0」となり、ホストアドレス部がすべて「1」のアドレスは「128.0.255.255」となります。この2つのアドレスは使用できません。そのため「65,534」が割り当て可能なホスト数になります。
クラスBのすべてのアドレスを計算すると「16,384×65,534=1,073,709,056」となり、約10億通りのアドレスを表現することができます。
これは、全アドレスの4分の1に当たります。1つのセグメントで6万ものホストを必要とするネットワークはそうそうなく、クラスBもまだアドレスの無駄が大量に発生するクラスになっています。
クラスC
クラスCは、第3オクテットまでをネットワークアドレス部にします。
クラスCでは、上位3ビットが「110」に決められています。そのため、上位3ビットが「110」の場合はクラスCになります。(このようにクラスDでは「1110」になりますが、クラスD以降は一般的に使われているクラスではありません)
したがって、第1オクテットは実質5ビットで「11000000~11011111」まで使用することができます。10進数に変換すると「192~223」の32通り(2の5乗)になります。
クラスBが「191」まで使用するので、次の「192~223」がクラスCの範囲になります。そのため「192.0.0.0」~「223.255.255.255」がクラスCのアドレス空間になります。
クラスCでは第3オクテットまでがネットワークアドレス部になるため、第1オクテットの「32通り」、第2オクテットと第3オクテットで「32×256×256=2,097,152」のセグメントを作成することができます。
ホストアドレス部は第4オクテットのみなので、「256」台まで同一セグメントにホストを接続できる計算になります。
ただし、同様にネットワークアドレス部を「192.0.0」とすると、ホストアドレス部がすべて「0」のアドレスは「192.0.0.0」となり、ホストアドレス部がすべて「1」のアドレスは「192.0.0.255」となります。この2つのアドレスは使用できません。そのため「254」が割り当て可能なホスト数になります。
クラスCのすべてのアドレスを計算すると「2,097,152×254=536,676,608」となり、約5億通りのアドレスを表現することができます。
これは、全アドレスの8分の1に当たります。一般的なネットワークでは、254台のホストで十分なケースが多く、もっとも利用されるクラスですが、全体の8分の1程度の割り当てしかありません。
また、300台規模のネットワークでは使用できず、クラスBを選択することになり、膨大な無駄が発生するケースもあります。結果として、クラスAやクラスBのアドレスが大量に余り、逆にクラスCのアドレスが不足することになります。
そして、IPアドレスを無駄にしない方式を模索していくことになります。
CIDRとは
アドレスクラスによって、ネットワーク部とホスト部を強制的に分割する方式を、
クラスフルアドレッシング
と言います。
学習のとおり、クラスフルアドレッシングでは、IPアドレスの無駄が大量に発生します。クラスCのアドレスが不足し、また、300台規模のネットワークではクラスBを申請して取得する必要があります。すると6万ものアドレスが使われることなく無駄になってしまいます。
このようにクラスフルアドレッシングでは、クラスA、B、Cによってネットワークアドレス部が決められているため、どうしても効率的な運用はできない仕組みになっています。
そこで、クラスに縛られず柔軟にネットワークアドレス部を設定できる技術が開発されました。
この仕組みを、
クラスレスアドレッシング
と言います。
クラスレスアドレッシングでは、クラスフルのように決められた固定長のネットワークアドレス部を持たず、自由に区切りを設定することができます。
具体的には、スラッシュ「/」の表記でビットを区切ります。例えば「192.168.1.0/24」のように表記します。これは、24ビット分をネットワークアドレス部にするという意味になります。
そのため、この場合はクラスフルのクラスCと同様に第3オクテットまでをネットワークアドレス部にするという意味です。しかし、クラスのように最上位ビットが固定されているわけではありません。自由に設定することができます。
また、第4オクテットに「0」を表記しているのは、ホストアドレス部ではなく、ネットワークアドレスを示しているからです。
ネットワークアドレスは先述のとおり、そのネットワークに所属する最初のIPアドレスになります。すなわち、ホストアドレス部がすべて「0」になるアドレスです。
この場合では、第3オクテットまでネットワークアドレス部になるため、ホストアドレス部は第4オクテットのみです。したがって、第4オクテットが「00000000」(10進数も「0」)になるアドレスがネットワークアドレスになります。
つまり「192.168.1.0」がネットワークアドレスという意味で、ホストアドレスは「192.168.1.1~」になります。これを「192.168.1.1/24」とすると「192.168.1.0/24」のセグメントに所属する「1」のホストという意味になり、ネットワークアドレスではなくなります。
またホスト数は、総ビット数から「24」を引いた8ビット分となり、ネットワークアドレス「192.168.1.0」とブロードキャストアドレス「192.168.1.255」を除いた「254」になります。
では、もう少しホストを増やして、300台のアドレスを必要とする場合を考えてみましょう。
クラスフルではクラスBが必要になり、約6万ものアドレスが無駄になってしまいます。クラスレスでは、単純に300より少し多い程度のビット列を確保すればよいので、それが何ビットになるのかをまず計算します。
第4オクテットの8ビットだけでは足りません。では、第3オクテットにまたがって9ビット確保すると、2の9乗で「512」となり、実際には510個のアドレスを確保することができます。9ビットで十分まかなえます。
この場合、第3オクテットにまたがるため、ホストアドレス部は第3オクテットの最終ビット+第4オクテットになります。つまり、23ビットがネットワークアドレス部で、残りの9ビットがホストアドレス部になります。

ネットワークアドレスはホストアドレス部がすべて「0」になるため、残り9ビットの値がすべて「0」ということになります。
一般的にオクテットにまたがる場合は「192.168.0.0/23」のように「0」をアドレスにするケースが多いですが、下位9ビットがすべて「0」になる第3オクテットの値をネットワークアドレスに使用することができます。
第3オクテットだけで言えば、最終ビットは「0」に固定されるため「00000000」~「11111110」の範囲で「128通り」のネットワークアドレスを作成することができます。10進数にすると「0、2、4、6、8~254」となり「192.168.0.0/23、192.168.2.0/23、192.168.4.0/23~192.168.254.0/23」が有効なネットワークアドレスになります。
ただし、ホストアドレス部は9ビットであり、ホスト数は先述のように「510」となります。「192.168.0.0/23」をネットワークアドレスにすると、第3オクテットの1ビット分(「0~1」の2通り)をホストアドレスに使用できるため、ブロードキャストアドレスは「192.168.1.255」となり、ホストアドレスの範囲は「192.168.0.1~192.168.1.254」になります。
ネットワークアドレスを「192.168.2.0/23」にした場合は、ブロードキャストアドレスは「192.168.3.255」となり、ホストアドレスの範囲は「192.168.2.1~192.168.3.254」になります。
次に、600台のアドレスが必要になった場合は、10ビット確保して「1,022」のアドレス空間を確保することができます。
この場合のネットワークアドレスの表記は、一般的に「192.168.0.0/22」となります。第3オクテットだけで言えば最終2ビットが「0」に固定されるため「00000000~11111100」の範囲で「64」通りのネットワークアドレスを作成することができます。10進数にすると「0、4、8~252」となり「192.168.0.0/22、192.168.4.0/22~192.168.252.0/22」が有効なネットワークアドレスになります。
ネットワークアドレスを「192.168.0.0/22」とすると、第3オクテットの2ビット分(「00~11」の4通り)をホストアドレスに使えるため、ブロードキャストアドレスは「192.168.3.255」となり、ホストアドレスの範囲は「192.168.0.1~192.168.3.254」になります。
このように、クラスレスアドレッシングの概念を表記する方法を
CIDR(サイダー)
と言います。
CIDRは「Classless Inter-Domain Routing」の略で、実際にはクラスレスアドレッシングの同義語として使われていますが、クラスレスアドレッシングという考え方を実現する方法がCIDRです。
こうして、300台のアドレスを必要とする場合は「/23」のビット数(プレフィックス長)で申請することができます。プレフィックス長とは、ネットワークアドレス部の長さのことです。
少々難解ですが、非常に重要なポイントとなるところなので、しっかり理解しておく必要があります。
CIDRの登場によってクラスの制限がなくなり、クラスによる慣例的なIPアドレスの割り当てをセグメントによって使い分けるケースが多くなっています。例えば「10.74.0.0/16」をLAN1、「172.161.0.0/16」をLAN2、「192.168.1.0/24」をLAN3といった具合です。
これら「10.74.0.0」「172.16.0.0」「192.168.0.0」といったIPアドレスは、現在でも内部ネットワークでよく使われています。 これらはかつてのクラスA・B・Cの範囲に対応しており、クラス制の名残りとして、それぞれの用途に応じた規模で使い分けられてきた背景があります。
サブネットマスク
CIDRによって、ホストアドレス部の区切りが柔軟にできるようになりました。しかし、CIDRは近代に登場してきた仕組みであり、聞き覚えのない方も多かったと思います。
同じようにクラスを分割する仕組みとして、
サブネットマスク
という方法があります。
サブネットマスクとは、文字どおりネットワークをサブネットに分割する仕組みで、サブネットとはクラスをさらに分割したネットワークのことです。
例えば、クラスAやクラスBの巨大なアドレス空間をサブネットに分割します。わかりやすくクラスCで説明すると、第3オクテットまで固定のネットワークアドレス部になり、ホストアドレス部は「254」個のホスト数を持ちます。
サブネットマスクを使って、この「254」のアドレス空間をさらに分割します。つまり、セグメントの異なるクラスCを作成することができることになります。
例えば、CIDRの表記で「192.168.1.0/26」とします。
すると、ネットワークアドレス部は26ビットで、ホストアドレス部は6ビットになります。そのため、ホストに使えるアドレスは2の6乗-2で「62」となります。
ただし、ネットワークアドレスは第4オクテットの上位2ビットが使えるため、「192.168.1.0」だけでなく2ビット分(00~11)の4通りのセグメントを作成することができます。
1つ目のセグメントのネットワークアドレスは、第4オクテットの2ビット分が2進数で「00」となり、残りの6ビットは0に固定されるため「00000000」で「0」になります。2つ目は「01」となり「01000000」で「64」、3つ目は「10」となり「10000000」で「128」、4つ目は「11」となり「11000000」で「192」となります。
したがって、「192.168.1.0/26」、「192.168.1.64/26」、「192.168.1.128/26」、「192.168.1.192/26」のネットワークアドレスを作成することができます。(こうした場合は「0」にならないネットワークアドレスになります)
それぞれのセグメントで「64」ずつのホストアドレス空間を持ち、4つで「256」です。つまり、クラスCを4つのサブネットに分割したことになります。
ただし、サブネットに分割した場合は、サブネットの1番最初のアドレスがネットワークアドレスになり、1番最後のアドレスがブロードキャストアドレスになるため、それぞれ-2で「248」が実質のホスト数になります。
では、この「/26」をどのようにサブネットマスクで表現するのかというと、32ビットのうち、単純にネットワークアドレス部に当たるビットに「1」を立てるだけです。
この例では「11111111.11111111.11111111.11000000」となります。つまり、第4オクテットの上位2ビットまでの26ビットに「1」を立て、残りの6ビットは「0」とします。
これにより、ネットワークアドレス部は見せたままで、ホストアドレス部をマスク化して隠すという意味になります。10進数で表記すると「255.255.255.192」になります。
クラスA~Cをサブネットマスクで示すと下表のようになります。
| クラス | 2進数 | 10進数 |
|---|---|---|
| クラスA | 11111111.00000000.00000000.00000000 | 255.0.0.0 |
| クラスB | 11111111.11111111.00000000.00000000 | 255.255.0.0 |
| クラスC | 11111111.11111111.11111111.00000000 | 255.255.255.0 |
サブネットマスクでもクラスをCIDRのように分割することができます。
| 2進数 | 10進数 | ホスト数 |
|---|---|---|
| 11111111.00000000.00000000.00000000 | 255.0.0.0 | 16,777,214 |
| 11111111.10000000.00000000.00000000 | 255.128.0.0 | 8,388,606 |
| 11111111.11000000.00000000.00000000 | 255.192.0.0 | 4,194,302 |
| 途中省略 | 途中省略 | 途中省略 |
| 11111111.11111111.11111100.00000000 | 255.255.255.128 | 1,022 |
| 11111111.11111111.11111110.00000000 | 255.255.254.0 | 510 |
| 11111111.11111111.11111111.00000000 | 255.255.255.0 | 254 |
| 11111111.11111111.11111111.10000000 | 255.255.255.128 | 126 |
| 11111111.11111111.11111111.11000000 | 255.255.255.192 | 62 |
| 11111111.11111111.11111111.11100000 | 255.255.255.224 | 30 |
| 11111111.11111111.11111111.11110000 | 255.255.255.240 | 14 |
| 11111111.11111111.11111111.11111000 | 255.255.255.248 | 6 |
| 11111111.11111111.11111111.11111100 | 255.255.255.252 | 2 |
このように、CIDRと同じようにオクテットの途中で区切ることができます。
CIDR「/23」と、サブネットマスク「255.255.254.0」は同じ意味になります。ではなぜ、サブネットマスクとCIDRという2つの仕組みがあるのかと言うと、サブネットマスクはあくまでクラス制の中の仕組みで使われていたからです。
つまり、クラスを分割する目的で使われており、クラスを越えて柔軟に区切るという想定ではなかったということです。CIDRはそもそもクラスレスとなり、クラスそのものを無視していよい設計になっています。
また、サブネットマスクは基本的にネットワークを分けるだけになりますが、CIDRを使うと、複数のネットワークを1つのネットワークとしてまとめることができ、ルーティングにかかるルータの保存情報量を減らす効果があります。
例えば、ネットワークA「192.168.0.0/24」とネットワークB「192.168.1.0/24」をサブネットマスク「255.255.255.0」で分けると完全に別ネットワークとして扱われます。ルータは2つのアドレスを分けて登録しておく必要があります。
しかし、この2つは23ビット目までが同じであり、24ビット目以降が異なることを示しています。「共通ビット数で上位を丸める(マスクする)」というのがCIDRの考え方です。CIDRではこれを「192.168.0.0/23」として2つのネットワークをまとめることができます。
この例は先述のとおり、ネットワークアドレスが「192.168.0.0」、ブロードキャストアドレスが「192.168.1.255」となり、ホストアドレスの範囲は「192.168.0.1~192.168.1.254」になります。
ただし、実際にはセグメントを分離した異なるネットワークです。まとめることに問題はないのかと言うと、これだけではネットワークの分離に影響を与えません。ルータへの登録情報を削減する目的だけです。
簡単に言えば「市」単位のセグメントを「県」にまとめるイメージです。管理者が同じであれば同じネットワークとして登録情報をまとめ、セグメントの分離は管理者のルータに任せるということです。
インターネットの爆発的な普及によって、ルータが保持する経路表が肥大化していったため、アドレスを集約する標準的な表現法が必要だったわけです。CIDRによって情報量を大幅に削減することができるようになりました。
とは言え、ネットワークの分割においては、どちらも同じ区切り位置を表現することができます。現在でも、IPv4で通信を行う場合は、IPアドレスとサブネットマスクを設定する必要があります。

どちらも非常に重要な表記方法になるので、しっかり覚えておきましょう。
更新履歴
- 2008年7月27日
- ページを公開。
- 2009年5月12日
- ページをXHTML1.0とCSS2.1で、Web標準化。レイアウト変更。
- 2018年1月30日
- ページをSSL化によりHTTPSに対応。
- 2025年5月9日
- 内容修正。
著者プロフィール
YAMANJO(やまんじょ)
- 経歴
- 岡山県出身、1980年生まれ(申年)の♂です。現在、総合病院で電子カルテなどの情報システム担当SEとして勤務。医療情報学が専門ですが、ネットワーク保守からプリンタの紙詰まり、救急車の運転手までこなしています。
- 医療情報技師、日本DMAT隊員。ITパスポート、シスアドなど、資格もろもろ。
- 趣味は近所の大衆居酒屋で飲むこと、作曲(ボカロP)、ダイビング。
- 関連リンク
- 詳細なプロフィールはこちら
- 作成したボカロ曲などはYoutubeへ
- X(Twitter)
