IPアドレスの割り当て方法には,クラスルフルアドレッシングとクラスレスアドレッシングがあります。現在ではクラスレスアドレッシングが主流になり,ルーティングプロトコルもクラスフルルーティング(RIPバージョン1やIGRP)は使われなくなっています。そこで今回はクラスレスアドレッシングを確認し,VLSMと経路集約について学んでいきましょう。

CIDR

 あるサブネットで使うIPアドレスの範囲は,IPアドレスとサブネット・マスクの組み合わせで決まります。例えば,192.168.0.0/24(サブネットが255.255.255.0のこと)のときは,コンピュータに割り当てられるのは192.168.0.1~192.168.0.254までです。クラスフルアドレッシングというのは,利用するIPアドレスによって最初からサブネット・マスクの値も決まっているという方式です。クラスAなら255.0.0.0,クラスBなら255.255.0.0,クラスCなら255.255.255.0といった具合です。

 クラスによるアドレッシング(クラスフルアドレッシング)の場合,クラスCでは最大254台という制限があり数が足りない場合が出てきます。でも,クラスAやBでは大きすぎる場合があります。このため,クラスの境界をなくしたアドレッシング(クラスレスアドレッシング)が主流になっています。このクラスレスの技術がCIDR(Classless InterDomain Routing)です。

 CIDRはクラスの境界を廃したため,デフォルトマスク(255.0.0.0,255.255.0.0,255.255.255.0のことで,「ナチュラルマスク」ともいう)を考慮する必要がなく,ネットワークを構成できます。なお,一般によく見られる「192.168.1.0/24」などの「/24」のような記述方式は「CIDR表記」「(ネットワーク)プレフィックス長」などと呼ばれます。

 CIDRに対応したルーティングプロトコルは「クラスレスルーティングプロトコル」と呼ばれ,一方CIDR非対応のデフォルトマスクをベースにしたルーティングプロトコルは「クラスフルルーティングプロトコル」と呼ばれます。

  • クラスフルルーティングプロトコル
    • RIPバージョン1(RIP1またはRIPv1と表記)
    • IGRP
  • クラスレスルーティングプロトコル
    • RIPバージョン2(RIP2またはRIPv2と表記)
    • OSPF
    • IS-IS
    • EIGRP
    • BGP

 クラスフルルーティングプロトコルはルート情報のアップデートの際にサブネットマスクの値を他のルータに通知しません。一方のクラスレスルーティングプロトコルはサブネットマスクの値も通知します。

VLSM

 VLSM(Variable-Length Subnet Mask:可変長サブネットマスク)はクラスレスアドレッシングの1つで,同一ネットワーク内でさまざまな長さのサブネットマスクを使用できます。これにより,IPアドレスの効率的な使用が可能です。

 通常,サブネットマスクは同一のネットワークでは同じ長さを使うことが一般的です(図1)。

 図1 同じサブネットマスクを使ってネットワークを構築した場合
同じサブネットマスクを使ってネットワークを構築した場合

 例えば図1ではサブネットマスクとして255.255.255.224(/27)を使い,クラスCのネットワークを,ホストが存在する3つのサブネット(使用可能IPアドレス30個)と,ルータ間の3つのサブネットの合計6個に分割しています(このサブネットマスクでは最大8つのサブネットに分割可能です)。

 クラスCのネットワークは最大254個のIPアドレスが使用可能なのに対し,図1のように同じサブネットマスクを使用すると,実際に使用できるIPアドレスの個数が大幅に減ってしまいます。例えばルータ間のサブネットは,双方のルータに割り当てる2つのIPアドレスしか使用していません。こんな無駄な割り当てでは,コンピュータに割り当てられるIPアドレスの個数が足りなくなってしまいます。そこで,利用するIPアドレスの個数に合わせてサブネットマスクの値を変更するという方法があります。それがVLSMです。

 例えば,図1のネットワークにルータ1台を追加し,2台のルータに接続し,さらにホストのネットワークを1個追加したいと考えたとしても,サブネット数が9個になってしまうので不可能です。しかし,VLSMを使えば可能です(図2)。

 図2 VLSMを使用したネットワーク
VLSMを使用したネットワーク

 イメージ的には/27で分割したサブネットのうち,192.168.128.0/27をさらに小さく/30で分割した感じになります。この分割方法ならば,192.168.1.160/27,192.168.1.192/27,192.168.1.224/27の3つの/27サブネットが未使用であり,まだルータやホストのネットワークを追加できます。特に/30(255.255.255.252)というプレフィックス長のサブネットは2個のIPアドレスだけが使用可能なサブネットで,ルータ間サブネットによく利用されます。

 ただし,VSLMはクラスレスルーティングプロトコルを運用しているネットワークでのみ使用可能になります。

経路集約

 現在のネットワークが抱える悩みの1つとして,ルーティングテーブルの増大があります。ルーティングテーブルにはあて先ネットワーク1つごとに1つエントリが作成されています。このため,ネットワーク数が増えるにつれ,ルーティングテーブルにエントリ数が増えることになります。それにより,ルーティングテーブルからあて先ネットワークを見つけるための時間が長くなったり,ルーティングテーブルを保存するためのメモリ量が大量に必要になったりします。実際,インターネット上には数万~数百万のネットワークが存在しており,インターネットの基幹ルータともなると,それらすべてのエントリを扱う必要があるため,膨大なリソースが必要になっています。

 このルーティングテーブル増大の解決策の1つが経路集約です。それは複数のエントリを1つにまとめ,ルーティングテーブルを圧縮させる方法です。まず経路集約をしていない場合を見てみましょう(図3)。

 図3 集約していない場合
集約していない場合

 図3のルータXはルータAの先の8つのネットワークの情報をルーティングテーブルに記載しています。この場合,8つのエントリが存在します。これを集約すると図4のようになります。

 図4 経路集約した場合
経路集約した場合

 172.16.40.0/24~172.16.47.0/24では上位21ビットが「10101100.00010000.00101」で共通なため,プレフィックス長/21の1つのエントリにまとめることができます。これにより8つのエントリを1つのエントリにまとめることができ,ルーティングテーブルの圧縮が可能になるわけです。

 経路集約の方法はまとめたいネットワークで共通のビットを見つけ出すことにあります。ただし,アドレッシングによっては上手く経路集約できない場合があります(図5)。

 図5 経路集約が上手くできない場合
経路集約が上手くできない場合

 172.16.0.0/24~172.16.3.0/24,172.16.100.0/24~172.16.101.0/24は経路集約できますが,他の部分は不連続なため経路集約できません。このような場合,上位16ビットが共通なことは確かなので,172.16.0.0/16という形に集約することも可能ですが,図6のような点で不備が発生することがあります。

 図6 経路集約で起こるループ

 このような事態を避けるため,経路集約には注意が必要です。またアドレッシングの際にもなるべく経路集約できるようにアドレスを割り振る必要があります。

 経路集約はクラスフルルーティングプロトコル,クラスレスルーティングプロトコルの双方で可能ですが,クラスフルルーティングプロトコルの場合,デフォルトマスクよりも小さいビットでは経路集約できません(図7)。

 図7 クラスフルとクラスレスの経路集約
クラスフルとクラスレスの経路集約

 図7の構成では,クラスレスの場合は192.168.0.0/24~192.168.3.0/24の上位22ビットが共通なため192.168.0.0/22に集約可能です。ところが,クラスフルの場合はクラスCのネットワークになるのでサブネットマスク(プレフィックス長)を24ビット以下にできません。したがって,経路集約できないことになります。

 経路集約は現在では必須の機能の1つです。このため,多くのルーティングプロトコルに実装されています。