CIDRとは

2021.06.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

新卒研修の課題でVPCを扱いました。その中でも難しかったCIDR(サイダー)についてまとめてみようと思います。

IPアドレスの構成

CIDRについて正しく理解するには、IPアドレスの構成が重要です。IPアドレスはネットワーク部とホスト部からなります。この構成はグローバルIPもローカルIPも同じです。

ネットワーク部

例えば複数のVPCがある場合、各VPCに番号を振り、どのVPCかを識別しなければなりません。ネットワーク部はどのネットワーク(今回はVPC)かを識別するための部分です。

ホスト部

一つのネットワーク内(今回はVPC内)にも複数の端末が存在します。ホスト部は各端末を識別するための部分です。

IPアドレスは二進数で表すと32桁の数字になります。

このIPアドレスを表す32桁の数字に含まれる、ネットワーク部・ホスト部のそれぞれの桁数は「サブネットマスク」を見ると分かります。サブネットマスクもIPアドレスと同様に二進数や十進数で表記します。

このサブネットマスクに記されている、ネットワーク部・ホスト部の桁数というのは作りたいネットワークの構成によっては重要になってきます。例えば、ネットワーク部に多くの桁数を割り当てると、より多くのネットワークを作ることができます。その反面、ホスト部の桁数が減るので一つのネットワークに接続できる端末の数は少なくなります。

今度はネットワーク部の桁数を少なくし、ホスト部の桁数を多く設定した場合を考えます。あまり多くのネットワークは作成できません。その一方で一つのネットワークに接続できる端末の数が多くなります。

個人では大量のVPCを作成する機会も、大量の端末を一つのローカルネットワークに接続する機会も特にありません。ですが、企業レベルになると1000個以上のVPCや、一つのVPCに1000台以上の端末を接続する場合があります。もしも、ネットワーク部やホスト部の桁数を適当に設定すると、後になってVPCを増やそうとしても出来なかったり、一つのVPCへの接続端末の数が制限されたりしてしまいます。そのためIPアドレスのネットワーク部、ホスト部の桁数を決めるのは慎重に行わなければなりません。

IPアドレスのクラスとは

次にIPアドレスのクラスについての話です。IPアドレスはどの値でも設定できるわけではなく、設定できる値の範囲が決まっています。その範囲は大きく三つに分かれており、それぞれクラスA,B,Cと呼ばれています。

「プライベートIPアドレスのクラス範囲」
クラスA 10.0.0.0~10.255.255.255(10.0.0.0/8)
クラスB 172.16.0.0~172.31.255.255(172.16.0.0/12)
クラスC 192.168.0.0~192.168.255.255(192.168.0.0/16)

 

このA,B,Cの三つのクラスは、各クラスごとにネットワーク部の桁数が最初から決まっています。クラスAは8桁,クラスBは12桁,クラスCは16桁となっています。一つ前の見出しで説明した通り、ネットワーク部・ホスト部の桁数は慎重に決める必要があります。にも関わらず、以前はその桁数をクラスA,B,C(8桁,12桁,16桁)のいずれかから選ぶしかありませんでした。クラスAやBでは、そこまで多くの端末を接続しないのにホスト部が大きすぎ、無駄にIPアドレスを消費してしまう。しかし、クラスCでは一つのネットワークに接続可能な端末の数が少なすぎる。など、クラスに縛られて柔軟な設定が行えませんでした。そこでCIDRが登場します。

CIDR(Classless Inter-Domain Routing)とは

CIDRは、クラスに縛られずIPアドレスのネットワーク部・ホスト部の桁数を自由に決めることができるようにした仕組みです。これまでIPアドレスとサブネットマスクの二つに分けて表記されていた情報を、CIDRでは一つに合わせて表記します。「/」の後に、ネットワーク部・ホスト部の区切りの桁数がきます。IPアドレスは十進数で表記されていますが、この区切りの桁数は、IPアドレスを二進数表記にした際の区切りの桁数です。

このCIDRのおかげで、ネットワークの数や接続端末に合わせたIPアドレスの割り振りが可能になり、無駄なくIPアドレスを設定できるようになりました。

VPCにおけるCIDR

先ほどの図に示したCIDRは、一つのIPアドレスとサブネットマスクの情報を表しています。ですがVPCではIPアドレスの範囲を表す際にもCIDRを使用します。

VPCではローカルなネットワーク環境が作成されます。その際にVPC内のみのプライベートな環境で使われる、IPアドレスの範囲を指定しなければなりません。そこでCIDRを使用します。またVPC内にサブネットを作成する場合にもCIDRを使用します。

IPアドレスは二進数表記の場合8桁ごとにドットで区切られています。「/16」の場合、二つ目のドットがちょうど境目になります。上の図のCIDRではネットワーク部は「10.0」になっています。例えばVPCピアリングを行うため、二つ目のVPCを作成するならネットワーク部が重複しないよう「10.2」などに設定します。「10.1」でも良いのですが、もし後でVPCを連番で追加する必要が出た場合に備えて、最初は一桁飛ばして設定したりします。ここではCIDRは一つのIPアドレスでなく、IPアドレスの範囲を表します。そのためホスト部は全て0になります。

VPCにおけるCIDRではローカルIPアドレスの範囲を表します。「192.168.x.x」というIPはよく見るので、すぐにプライベートなIPだと分かります。ですが自分は「10.0.0.0」は見たことがなかったのでプライベートかグローバルか分かりませんでしたが、これもプライベートなIPです。グローバルではないので、二つ目のVPCを作成する際も一つ目と同じCIDRで被って設定することもできます。しかし、その二つのVPCでピアリング接続を行う場合はネットワーク部が重複してはいけません。