Classless Inter-Domain Routing

Classless Inter-Domain RoutingCIDRサイダー[1])は、インターネット上のルーターにおけるルーティングテーブルの肥大化速度を低減させるための機構であり、ISPや組織にクラスA、B、Cを全部ではなく部分的に割り当てることでIPアドレスの浪費を防ぐ機構である。CIDR記法でアドレスを記述でき、アドレスの集約的表現が可能で、アドレスブロックの委譲も容易である。

概要

Domain Name System (DNS) が考案されてから約10年間、IPアドレスをクラス分けして割り当て、ルーティングする方式はスケーラブルでないことが明らかとなってきた(RFC 1517 参照)。この問題に対処するため、Internet Engineering Task Force は1993年、新たな規格として RFC 1518RFC 1519 を発表した。これらは新たなIPアドレスブロックの割り当て法を定義したもので、同時にIPv4のパケットの新たなルーティング方法を定義していた。RFC 1519 は2006年、RFC 4632 に置換された。

IPアドレスは、ネットワーク上ではプレフィックスホストアドレスに分けて認識される。かつては、32ビットのIPアドレスをオクテット(8ビット)ずつに分け、プレフィックスに8ビット、16ビット、24ビットのいずれかを割り当てていた。したがって、割り当てとルーティングの最小ブロック(クラスC)では、256個のアドレスしかなく、多くの企業では少なすぎた。また、その次の大きさのブロック(クラスB)では65,536個のアドレスがあり、比較的大きな組織でもこれを全部活用するのは困難である。このことから、アドレスの使用と同時にルーティングにおいても効率低下を招いた。というのは、膨大な数のクラスCネットワークがそれぞれルート情報を発行し、しかもルーティングを集約しようにも対象となるブロックが地理的に分散していたため、ルーティング処理の増大を招いたのである。

Classless Inter-Domain Routing(CIDR) は「可変長サブネットマスク (variable-length subnet masking; VLSM)」に基づき、プレフィックスを可変長で割り当て可能にした。可変長サブネットマスクは RFC 950 (1985年)で言及されている。

CIDR は

  • VLSMを使って、任意の長さのプレフィックスを指定できる。CIDR記法では、IPアドレスの後ろにプレフィックスのビット数を記述する。例えば 192.168.0.0/16 などとする。これにより「IPアドレス枯渇問題」を緩和する。
  • 複数の連続するプレフィックスを集約してスーパーネット化し、インターネット上のグローバルなルーティングテーブルのエントリ数を削減する。集約はサブネットの複数階層を隠蔽するもので、VLSMによる「サブネットのサブネット化」とは逆のプロセスである。
  • 組織内でのアドレスブロックの割り当てが、クラスに縛られずに柔軟に行えるようになる。

IPv6では、IPv4 の CIDR 方式を踏襲しており、クラスの概念は存在しない。

CIDRブロック

CIDRは原則としてビット単位のプレフィックスに基づいてIPアドレスを解釈する規格である。これによりルーティングではルーティングテーブル上の1エントリにアドレスをグループ化して格納できる。このようなアドレスのグループをCIDRブロックと呼び、IPアドレスを二進法で表したときの先頭の何ビットかが共通になっている。IPv4のCIDRブロックは、IPv4アドレスの記法と似た文法で指定される。すなわち、アドレスをドットで4つに分け、それぞれを十進で書き、その後にスラッシュ記号をつけ、さらに0から32の数を付ける。A.B.C.D/N のような形式である。ドットで4分割された部分はIPv4アドレスと同様、32ビットの数値をオクテット単位に分けたものである。スラッシュ記号の後の数値はプレフィックス長であり、アドレスで共通となる先頭のビット数を表している。特定のCIDRブロックではなく、抽象的にCIDRを話題にする場合、/20 のように後半部分だけでCIDRブロックを表すことがある。

1つのIPアドレスはCIDRブロックの一部であり、先頭のNビットがそのCIDRブロックのプレフィックスと一致している。したがって、CIDRを理解するにはIPアドレスを二進法で表す必要がある。IPv4のアドレスは32ビットと決まっているので、NビットのCIDRプレフィックスでは ビットが一致せず、その部分で のビットの組み合わせが存在する。すなわち、 個のIPv4アドレスが1つのNビットCIDRプレフィックスと一致する。CIDRプレフィックスが短いほど一致するアドレスは増え、長いほど一致するアドレスは少なくなる。1つのアドレスが長さの異なる複数のCIDRプレフィックスと一致する場合もある。

CIDRはIPv6アドレスでも使われるが、アドレスが長いためプレフィックス長は0から128の範囲になる。記法はほぼ同じで、IPv6アドレスの後にスラッシュとプレフィックス長を書く。

CIDRブロックの割り当て

Internet Assigned Numbers Authority (IANA) は、地域インターネットレジストリ (RIR) に対して大きなCIDRブロック(つまり短いCIDRプレフィックス)を発行する。例えば、62.0.0.0/8 には1600万以上のアドレスが含まれ、ヨーロッパのRIRである RIPE NCC が管理している。RIRはそれぞれ1つの大きな地理的領域(ヨーロッパ、北米など)を管轄しており、割り当てられたブロックを細かく分割して一般に発行している。この分割は階層的に何度か行われる。大規模なインターネットサービスプロバイダ (ISP) はRIRからCIDRブロックの割り当てを受け、それを小さいCIDRブロックに分割して加入者に割り当てる。このとき、分割する大きさは加入者のネットワーク規模によって調整する。単一のISPでインターネットと繋がっているネットワークについてIETFは、そのISPからIPアドレスのブロックをもらうことを推奨している。一方複数のISPと繋がっているネットワークの場合、適当なRIRから直接CIDRブロックをもらう。

例えば、1990年代後半に 208.130.29.33 というIPアドレスは www.freesoft.org で使っていた(既に再割り当て済み)。このアドレスには3つのCIDRプレフィックスが対応していた。208.128.0.0/11 は200万以上のアドレスをカバーする大きなCIDRブロックで、ARIN(北米のRIR)がMCIに割り当てていた。そして、バージニア州VARである Automation Research Systems (ARS) がMCIからインターネット接続をリースしていて、208.130.28.0/22 というブロックが割り当てられていた。1000以上のデバイスにアドレスを割り当てられるブロックである。ARS は /24 ブロックを1つ、同社の一般開放しているサーバ群に割り当てていて、208.130.29.33 はそのうちの1つだった。

これらのCIDRプレフィックスはいずれもネットワークのどこかで同時に使われていた。例えば、MCIのネットワークの外では、208.128.0.0/11 というプレフィックスがMCIへのトラフィックをMCIに向けるのに使われていた。そのトラフィックには 208.130.29.33 向けだけでなく、11ビットのプレフィックスを共有する約200万のIPアドレス向けのトラフィックが含まれている。MCIのネットワーク内では 208.130.28.0/22 が見えるようになり、ARS のリースしている線へのトラフィックに対応していた。208.130.29.0/24 というプレフィックスはARSのネットワーク内でのみ使われた。

CIDRとマスク

サブネットマスクは一種のビットマスクであり、プレフィックス長をIPアドレスのような形式にしたものである。すなわち、32ビットの二進数で先頭からプレフィックス長に対応したビット列を全て1とし、残りを0とする。そしてそれをドットで4分割した十進の形式にする。サブネットマスクとプレフィックス長は同じ情報を異なる形式で表したものだが、CIDRが考案される前から存在する。

CIDRは「可変長サブネットマスク (VLSM)」を使い、必要に応じてIPアドレスをサブネットに割り当てるのであって、何らかの汎用規則があるわけではない。したがって、どのビット位置でアドレスを分割するかは任意である。このプロセスは再帰的に繰り返すことができ、マスクでカバーするビット数を増やすことで、アドレス空間を順次小さく分割していくことができる。

この方式はインターネットで使われているが、同時に大規模なプライベートネットワークでも使われている。平均的な個人のLANでは、特殊なプライベートネットワーク用アドレスを使っており、CIDRを見かけることはない。

プレフィックス集約

もう1つのCIDRの利点は「ルーティングプレフィックスの集約」が可能という点である。例えば、アドレスが連続しているクラスC (/24) のネットワークが16個あれば、これらを集約でき、外部に対して /20 の単一のネットワークとして見せることができる(それらのアドレスの先頭20ビットが共通の場合)。同様に/20 のネットワークが2つ連続していたら /19 に集約できる。これによってインターネット上でのルーティングの処理に必要な計算量が軽減できる。

CIDR
IP/CIDR 最後のIPアドレスとの差 マスク ホスト数 (*) クラス 備考
a.b.c.d/32 +0.0.0.0 255.255.255.255 1 1/256 C
a.b.c.d/31 +0.0.0.1 255.255.255.254 2 1/128 C d = 0 ... (2n) ... 254
a.b.c.d/30 +0.0.0.3 255.255.255.252 4 1/64 C d = 0 ... (4n) ... 252
a.b.c.d/29 +0.0.0.7 255.255.255.248 8 1/32 C d = 0 ... (8n) ... 248
a.b.c.d/28 +0.0.0.15 255.255.255.240 16 1/16 C d = 0 ... (16n) ... 240
a.b.c.d/27 +0.0.0.31 255.255.255.224 32 1/8 C d = 0 ... (32n) ... 224
a.b.c.d/26 +0.0.0.63 255.255.255.192 64 1/4 C d = 0, 64, 128, 192
a.b.c.d/25 +0.0.0.127 255.255.255.128 128 1/2 C d = 0, 128
a.b.c.0/24 +0.0.0.255 255.255.255.000 256 1 C
a.b.c.0/23 +0.0.1.255 255.255.254.000 512 2 C c = 0 ... (2n) ... 254
a.b.c.0/22 +0.0.3.255 255.255.252.000 1,024 4 C c = 0 ... (4n) ... 252
a.b.c.0/21 +0.0.7.255 255.255.248.000 2,048 8 C c = 0 ... (8n) ... 248
a.b.c.0/20 +0.0.15.255 255.255.240.000 4,096 16 C c = 0 ... (16n) ... 240
a.b.c.0/19 +0.0.31.255 255.255.224.000 8,192 32 C c = 0 ... (32n) ... 224
a.b.c.0/18 +0.0.63.255 255.255.192.000 16,384 64 C c = 0, 64, 128, 192
a.b.c.0/17 +0.0.127.255 255.255.128.000 32,768 128 C c = 0, 128
a.b.0.0/16 +0.0.255.255 255.255.000.000 65,536 256 C = 1 B
a.b.0.0/15 +0.1.255.255 255.254.000.000 131,072 2 B b = 0 ... (2n) ... 254
a.b.0.0/14 +0.3.255.255 255.252.000.000 262,144 4 B b = 0 ... (4n) ... 252
a.b.0.0/13 +0.7.255.255 255.248.000.000 524,288 8 B b = 0 ... (8n) ... 248
a.b.0.0/12 +0.15.255.255 255.240.000.000 1,048,576 16 B b = 0 ... (16n) ... 240
a.b.0.0/11 +0.31.255.255 255.224.000.000 2,097,152 32 B b = 0 ... (32n) ... 224
a.b.0.0/10 +0.63.255.255 255.192.000.000 4,194,304 64 B b = 0, 64, 128, 192
a.b.0.0/9 +0.127.255.255 255.128.000.000 8,388,608 128 B b = 0, 128
a.0.0.0/8 +0.255.255.255 255.000.000.000 16,777,216 256 B = 1 A
a.0.0.0/7 +1.255.255.255 254.000.000.000 33,554,432 2 A a = 0 ... (2n) ... 254
a.0.0.0/6 +3.255.255.255 252.000.000.000 67,108,864 4 A a = 0 ... (4n) ... 252
a.0.0.0/5 +7.255.255.255 248.000.000.000 134,217,728 8 A a = 0 ... (8n) ... 248
a.0.0.0/4 +15.255.255.255 240.000.000.000 268,435,456 16 A a = 0 ... (16n) ... 240
a.0.0.0/3 +31.255.255.255 224.000.000.000 536,870,912 32 A a = 0 ... (32n) ... 224
a.0.0.0/2 +63.255.255.255 192.000.000.000 1,073,741,824 64 A a = 0, 64, 128, 192
a.0.0.0/1 +127.255.255.255 128.000.000.000 2,147,483,648 128 A a = 0, 128
0.0.0.0/0 +255.255.255.255 000.000.000.000 4,294,967,296 256 A

(*) /31 または /32 より大きなサブネットでは、利用可能なアドレス数から2を引く必要がある。最大のアドレスと最小のアドレスは、ブロードキャスト用とネットワークの識別用に割り当てられる。詳細は RFC 1812 を参照。また、一般にゲートウェイにIPアドレスを1つ必要とするので、1つのサブネットに配置できる(ゲートウェイ以外の)ホスト数は全アドレス数から3を引く必要がある。

歴史的背景

IPアドレスは本来、「ネットワークアドレス」(サブネットまたはネットワーク全体を識別する)と「ホストアドレス」(ネットワーク上の特定のマシンまたはインタフェース)で構成されていた。この分割はIPネットワーク間でのルーティングに使われていた。

かつて、IPアドレス空間は3種類のクラスのネットワークに分割されていて、個々のクラスは固定サイズのネットワークアドレスを持っていた。このクラスとネットワークアドレスの長さ、ひいてはそのネットワークでのホスト台数は、IPアドレスの先頭の数ビットでわかるようになっていた。プレフィックス長やサブネットマスクを指定する方法がなかったため、RIP V1IGRPなどのルーティングプロトコルでは、ルーティングプレフィックスのサイズはIPアドレス先頭で示されるクラスで決めていて、それをルーティングテーブルに設定していた。

実験的なTCP/IPネットワークは1980年代にインターネットへと拡張されていき、より柔軟なアドレッシング体系が必要だということが明らかになってきた。そこでサブネットマスクとCIDRが開発された。古いクラス体系は使われなくなったため、これを classless routing と呼んだ。RIP V2EIGRPIS-ISOSPF といった新たなルーティングプロトコルがこれをサポートした。その後、以前の方式を classful routing と呼ぶようになった。

可変長サブネットマスク (Variable-Length Subnet Masking, VLSM) はCIDRと同じ概念だが、最近では使われない用語である。

RFC 1338 は新たなアドレス割り当て方式とプレフィックス集約を定めたもので、大きな変革の第一歩となった。これによって階層的なアドレス空間の分割が可能になり、ほとんどの階層をインターネットサービスプロバイダが管理することになった。またプロバイダ間では新たにBGP4が使われることになった。この過程で新たなIPアドレス空間の分割/集約方法が必要となり、CIDRが策定された。なお、RFC 1338RFC 4632 に置換されている。

脚注

外部リンク

  • RFC 1518 - An Architecture for IP Address Allocation with CIDR
  • RFC 4632 - Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan
  • RFC 2317 - Classless IN-ADDR.ARPA delegation
  • RFC 4291 - IP Version 6 Addressing Architecture
  • RFC 3021 - Using 31-Bit Prefixes on IPv4 Point-to-Point Links
  • CIDR Report