ネットワーキングのためのIPアドレス、サブネット、およびCIDR表記の理解
紹介
ネットワーキングを理解することは、インターネット上の複雑な環境を構成する上で基本的な部分です。これは、サーバー間の効率的なコミュニケーションを試みる際、セキュアなネットワークポリシーを開発する際、そしてノードを整理された状態に保つ際に影響があります。
以前のガイドでは、基本的なネットワーキング用語について説明しました。そのガイドを確認して、そこで提示された概念に慣れていることを確認してください。
この記事では、ネットワークコンピュータの設計や相互作用に関わるいくつかの具体的な概念について議論します。具体的には、ネットワーククラス、サブネット、およびIPアドレスをグループ化するためのCIDR表記について取り上げます。
IPアドレスの理解
ネットワーク上のすべての場所またはデバイスは、アドレス指定可能でなければなりません。これは、事前に定義されたアドレスシステムの下でその識別子を参照することによって、到達可能であることを意味します。通常のTCP/IPモデルのネットワーク層では、いくつかの異なる層でこれが処理されますが、ネットワーク上のアドレスに言及する場合は、通常IPアドレスのことを指します。
IPアドレスはネットワークインターフェースを通じてネットワークリソースにアクセスできるようにします。あるコンピュータが別のコンピュータと通信したい場合、その情報をリモートコンピュータのIPアドレスに向けることができます。2台のコンピュータが同じネットワークにあるか、異なるコンピュータやデバイスが間のネットワークを越えてリクエストを変換できる場合、コンピュータ同士は互いに到達し、情報を送信できるはずです。
各IPアドレスは自分自身のネットワーク内でユニークでなければなりません。ネットワークは他のネットワークから孤立することができ、異なるネットワーク間のアクセスを提供するためにブリッジ接続や翻訳を行うことができます。ネットワークアドレス変換と呼ばれるシステムでは、パケットがネットワーク境界を越える際にアドレスを書き換えることができ、正しい宛先に到達させることができます。これにより、同じIPアドレスを複数の孤立したネットワークで使用しながら、正しく設定すれば通信を行うことができます。
IPv4とIPv6の違い
現在、広く実装されているIPプロトコルの改訂版は2つあります:IPv4とIPv6です。IPv6はプロトコルの改善とIPv4アドレス空間の制限により、徐々にIPv4に取って代わっています。簡単に言えば、現在の世界にはIPv4を通じて利用可能なアドレスの数に対して、インターネットに接続されたデバイスが多すぎるのです。
IPv4アドレスは32ビットのアドレスです。各バイト、つまりアドレスの8ビットのセグメントはピリオドで区切られ、通常は0〜255の数値で表されます。これらの数値は人間が理解しやすくするために通常10進法で表現されますが、各セグメントは通常8ビットの表現であることを示すためにオクテットと呼ばれます。
典型的なIPv4アドレスは次のようになります:
192.168.0.5
各オクテットの最小値は0で、最大値は255です。
これをバイナリで表現することもでき、4つのオクテットがどのように見えるかをより良く理解できます。可読性のために、各4ビットをスペースで区切り、ドットをダッシュに置き換えます:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0101
これらの2つの形式が同じ数字を表していることを認識することは、後での概念理解にとって重要です。
IPv4とIPv6のプロトコルや背景機能にはいくつかの他の違いがありますが、最も目立つ違いはアドレス空間です。IPv6はアドレスを128ビットの数として表現します。これを具体的に言うと、IPv6はIPv4のアドレス数の7.9×1028倍以上の空間を持っています。
この拡張アドレス範囲を表現するために、IPv6は一般的に8セグメントの4桁の16進数で記述されます。16進数は、0から15までの数字を0から9の数字と、さらに高い値を表現するためにaからfの数字を使用して表します。一般的なIPv6アドレスは以下のようになります:
1203:8fe0:fe80:b897:8990:8a7c:99bf:323d
これらのアドレスは、コンパクトな形式で表記されることもあります。IPv6のルールでは、各オクテットから先頭のゼロを削除することができ、ゼロのグループの単一の連続を二重コロン(::)で置き換えることができます。
たとえば、次のようなIPv6アドレスの1つのグループがある場合:
...:00bc:...
代わりに、ただ入力することができます:
...:bc:...
2番目のケースを示すために、次のようなゼロのグループが複数あるIPv6アドレスの範囲がある場合:
...:18bc:0000:0000:0000:00ff:...
これを次のように圧縮できます(また、上で行ったようにグループの先頭のゼロを削除することもできます):
...:18bc::ff...
この操作はアドレスごとに一度だけ行うことができ、それ以外の場合は完全なアドレスを再構築することができなくなります。
IPv6が日々普及している中、本ガイドでは、より小さなアドレス空間での議論がしやすいため、IPv4アドレスを用いて残りの概念を探ります。
IPv4アドレスのクラスと予約された範囲
IPアドレスは通常、2つの別々の要素で構成されています。アドレスの最初の部分は、そのアドレスが属するネットワークを識別するために使用されます。その後の部分は、そのネットワーク内の特定のホストを指定するために使用されます。
ネットワーク仕様が終了しホスト仕様が始まる場所は、ネットワークの設定方法によって異なります。このことについては、後ほど詳しく説明します。
IPv4アドレスは伝統的にAからEまでの5つの異なる「クラス」に分けられ、利用可能なアドレス指定可能なIPv4空間のセグメントを区別するためのものでした。これらは各アドレスの最初の4ビットによって定義されます。IPアドレスがどのクラスに属しているかは、これらのビットを見て判断できます。
ここに、先頭ビットに基づいてアドレスを定義する翻訳テーブルがあります:
クラスA
0---: IPv4アドレスの最初のビットが「0」の場合、これはアドレスがクラスAの一部であることを意味します。これは、0.0.0.0から127.255.255.255までの任意のアドレスがクラスAに属することを意味します。
クラスB
10--: クラスBには128.0.0.0から191.255.255.255までの任意のアドレスが含まれます。これは、最初のビットが「1」であり、2番目のビットに「1」がないアドレスを示しています。
クラスC
110-: クラスCは192.0.0.0から223.255.255.255までのアドレスを定義します。これは、最初の二つのビットが「1」であり、しかし三つ目のビットが「1」でないすべてのアドレスを表しています。
クラスD
1110: このクラスには、最初の3ビットが「111」で、次のビットが「0」であるアドレスが含まれています。このアドレス範囲には、224.0.0.0から239.255.255.255までのアドレスが含まれます。
クラスE
1111: このクラスは240.0.0.0から255.255.255.255の間のアドレスを定義します。「1」ビットが4つで始まるアドレスは、このクラスに含まれます。
クラスDアドレスはマルチキャストプロトコル用に予約されており、これによりパケットを一度の送信で複数のホストに送ることができます。クラスEアドレスは将来のための実験的使用のために予約されており、ほとんど使用されていません。
従来、標準クラス(A〜C)は、異なるサイズのネットワークに対応するために、アドレスのネットワーク部分とホスト部分を異なる方法で分割していました。クラスAのアドレスは、最初のオクテットの残りの部分をネットワークを表すために使用し、残りのアドレスをホストを定義するために使用しました。これは、多くのホストを持つ少数のネットワークを定義するのに適していました。
クラスBアドレスは、最初の二つのオクテット(最初のオクテットの残りと全ての第二オクテット)を使用してネットワークを定義し、残りを各ネットワーク内のホストを定義するために使用しました。クラスCアドレスは、最初の三つのオクテットを使用してネットワークを定義し、最後のオクテットをそのネットワーク内のホストを定義するために使用しました。
IP空間の大部分をクラスに分けるという概念は、今やほとんどレガシーな概念となっています。もともとこれは、急速に枯渇するIPv4アドレスの問題に対する一時的な対策として実装されました(別のネットワークにある場合、同じホストを持つ複数のコンピュータを持つことができます)。これは、以下で議論する後のスキームに大部分が置き換えられました。
予約されたプライベートレンジ
IPv4空間には特定の用途のために予約されている部分もあります。
予約された範囲の中で最も便利なものの一つは、アドレスの範囲 127.0.0.0 から 127.255.255.255 で指定されるループバック範囲です。この範囲は、各ホストが自身へのネットワーク接続をテストするために使用します。通常、これはこの範囲の最初のアドレス、つまり 127.0.0.1 で表されます。
通常のクラスのそれぞれには、プライベートネットワークアドレスを指定するために使用される範囲があります。たとえば、クラスAアドレスの場合、10.0.0.0から10.255.255.255までのアドレスがプライベートネットワークの割り当てのために予約されています。クラスBの場合、この範囲は172.16.0.0から172.31.255.255です。クラスCでは、192.168.0.0から192.168.255.255までの範囲がプライベート使用のために予約されています。
インターネットに直接接続されていないコンピュータ(ルーターやその他のNATシステムを経由するコンピュータ)は、これらのアドレスを自由に使用できます。
特定の使用ケースのために予約された追加のアドレス範囲があります。予約されたアドレスの概要はここにあります。
ネットマスクとサブネット
ネットワークを小さなネットワークセクションに分割するプロセスは、サブネット化と呼ばれます。これは多くの異なる目的に役立ち、ホストのグループを互いに分離して、より簡単に管理できるようにします。
上で議論したように、各アドレス空間はネットワーク部分とホスト部分に分かれています。これらのそれぞれが占めるアドレスの量は、アドレスが属するクラスによって異なります。たとえば、クラスCアドレスの場合、最初の3オクテットがネットワークを示すために使用されます。アドレス192.168.0.15の場合、192.168.0の部分がネットワークを示し、15がホストを示します。
デフォルトでは、各ネットワークには1つのサブネットしかなく、それには定義されたすべてのホストアドレスが含まれています。ネットマスクとは、ネットワーク部分に使用されるアドレスビットの量を仕様したものです。サブネットマスクは、ネットワークをさらに細分化するために使用される別のネットマスクです。
ネットワークを説明するために重要と見なされるアドレスの各ビットは、ネットマスクで「1」として表される必要があります。
例えば、上で議論したアドレス192.168.0.15は、バイナリではこのように表現できます:
1100 0000 - 1010 1000 - 0000 0000 - 0000 1111
上で説明したように、クラスCアドレスのネットワーク部分は最初の3オクテット、つまり最初の24ビットです。これらは私たちが保持したい重要なビットであるため、ネットマスクは次のようになります:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
これは通常のIPv4形式として255.255.255.0で書くことができます。ネットマスクの2進数表現において「0」であるビットはアドレスのホスト部分の一部と見なされ、可変です。しかし、「1」であるビットは、議論されているネットワークまたはサブネットワークに対して静的です。
アドレスのネットワーク部分は、アドレスとネットマスクの間にビットワイズ AND 演算を適用することで決定されます。ビットワイズ AND 演算は、アドレスのネットワーク部分を保存し、ホスト部分を破棄します。上記の例が私たちのネットワークを表す結果は次の通りです:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
これは192.168.0.0として表現することができます。ホストの仕様は、これらの元の値とホスト部分との違いです。この場合、ホストは0000 1111または15です。
サブネット化のアイデアは、アドレスのホストスペースの一部を取り、それを追加のネットワーク仕様として使用し、アドレススペースを再度分割することです。
例えば、上に示したように、255.255.255.0というネットマスクは、ネットワーク内に254のホストを残します(0または255では終了できません。これらは予約されています)。これを2つのサブネットワークに分割したい場合、アドレスの従来のホスト部分の1ビットをサブネットマスクとして使用することができます。
では、例を続けると、ネットワーキング部分は次のとおりです:
1100 0000 - 1010 1000 - 0000 0000
ホスト部分は:
0000 1111
私たちはホストの最初のビットを使ってサブネットワークを指定することができます。これは、次のようにサブネットマスクを調整することで行うことができます:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
これに対して:
1111 1111 - 1111 1111 - 1111 1111 - 1000 0000
従来のIPv4表記では、これは192.168.0.128として表現されます。ここで私たちが行ったことは、ネットワークアドレスを指定する際に、最後のオクテットの最初のビットを重要と見なすことです。これにより、実質的に2つのサブネットワークが生成されます。最初のサブネットワークは192.168.0.1から192.168.0.127までです。2番目のサブネットワークは、ホスト192.168.0.129から192.168.0.255を含みます。従来、サブネット自体はアドレスとして使用されるべきではありません。
ホストスペースのビットをネットワーキングに多く使用すれば、より多くのサブネットワークを得ることができます。
CIDR表記
クラスレス・インタードメイン・ルーティング、またはCIDRと呼ばれるシステムは、従来のサブネットティングの代替として開発されました。このアイデアは、ルーティングまたはネットワーキングの部分を構成する重要なビットの数に関する仕様をIPアドレス自体に追加できるというものです。
たとえば、IPアドレス192.168.0.15がネットマスク255.255.255.0に関連付けられているというアイデアを、192.168.0.15/24のCIDR表記を使用して表現することができます。これは、指定されたIPアドレスの最初の24ビットがネットワークルーティングにおいて重要であることを意味します。
これにより、いくつかの興味深い可能性があります。これらを使用して「スーパーネット」を参照することができます。この場合、従来のサブネットマスクでは不可能な、より包括的なアドレス範囲を意味します。たとえば、上記のようなクラスCネットワークでは、クラスCアドレスのネットマスクが255.255.255.0であるため、ネットワーク192.168.0.0と192.168.1.0のアドレスを組み合わせることはできません。
しかし、CIDR表記を使用することで、このブロックを192.168.0.0/23として参照することで統合することができます。これにより、私たちが参照しているネットワーク部分に23ビットが使用されていることが指定されています。
最初のネットワーク(192.168.0.0)は、バイナリでこのように表現できます。
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
第二のネットワーク(192.168.1.0)はこのようになります:
1100 0000 - 1010 1000 - 0000 0001 - 0000 0000
指定したCIDRアドレスは、参照しているネットワークブロックに最初の23ビットが使用されていることを示しています。これは、255.255.254.0のネットマスクに相当します。
1111 1111 - 1111 1111 - 1111 1110 - 0000 0000
ご覧のように、このブロックでは24ビットは0または1のどちらでも一致します。なぜなら、ネットワークブロックは最初の23桁だけを気にするからです。
CIDRは、連続したIPアドレスのブロックに対するアドレス指定の制御をより強化します。これは、元々話していたサブネット化よりもはるかに便利です。
結論
今頃、あなたはIPプロトコルのネットワークに関するいくつかの影響を理解できているはずです。このようなネットワーキングを扱うことは必ずしも直感的ではなく、時には扱いづらいこともありますが、ソフトウェアやコンポーネントを正しく構成するために何が起こっているのかを理解することが重要です。
さまざまなオンラインの計算機やツールがあり、これらの概念を理解し、特定の情報を入力することで必要な正しいアドレスや範囲を得る手助けをしてくれます。CIDR.xyzは、10進数ベースのIPアドレスをオクテットに変換し、異なるCIDRネットマスクを視覚化することができます。
