前回は、IPv6アドレスを表記する際に使用する、短縮表記のルールについて解説した。今週は、IPv6が個々のネットワークを識別する仕組みについて解説しよう。

ネットワークプレフィックスは64ビット

IPv6もIPv4と同様に、所属するネットワークそのものを意味するアドレスと、そのネットワークの中で個々のホストを識別するためのアドレスを組み合わせることで機能している。前者のことをIPv4では「ネットワークアドレス」と呼んでいたが、IPv6では「ネットワークプレフィックス」と呼ぶ。名称は異なるが、意味や機能は同じだ。

そして、ルータやレイヤー3スイッチで区切った個々のネットワークでは、そこに接続するすべてのホストが同一のネットワークプレフィックスとサブネットマスクを使わなければならない。ホストアドレスからネットワークアドレスを得るために、ホストアドレスとサブネットマスクをAND演算する考え方も含めて、IPv4とIPv6の間に違いはない。

AND演算とは論理演算の一種で、2つの2進数の入力とも「1」なら「1」、それ以外の場合は「0」を出力する。論理積演算ともいう。

以下に、IPv4アドレス「192.168.0.2」とサブネットマスク「255.255.255.0」をAND演算して、ネットワークアドレス「192.168.0.0」を算出する例について示す。IPv4を例にとっているが、やっていることはIPv6でも同じだ。

IPアドレス「192.168.0.2」 11000000 10101000 00000000 00000010
サブネットマスク「255.255.255.0」 11111111 11111111 11111111 00000000
ネットワークアドレス「192.168.0.0」 11000000 10101000 00000000 00000000

ホストアドレスとサブネットマスクをAND演算すると、ネットワークアドレスを算出できる。これはIPv4の例だが、IPv6でも考え方は同じだ。

ただし、IPv4ではクラスA/B/Cでそれぞれネットワークアドレスの長さが異なり、クラスAが8ビット、クラスBが16ビット、クラスCが24ビットとなっていた。それに対してIPv6では、通常はネットワークプレフィックス長を64ビットに固定している。IPv4と同様、「<ネットワークプレフィックス>/<ネットワークプレフィックスのビット長>」という表記を用いる場合もあるが、特記がなければ64ビット固定と考えてよい。

IPv6ではCIDRは使わない

IPv4ではサブネットマスクを可変長として、クラスにとらわれないネットワークアドレス長を利用できるようにしていた。いわゆるCIDR(Classless Inter-Domain Routing)で、インターネットにおけるグローバルIPv4アドレスの割り当て、あるいはLANのサブネット分割など、さまざまな場面でこの方法を利用している。また、CIDRを逆に利用して経路情報を集約する使い方、いわゆるスーパーネット化という手法もある。

CIDRは、IPアドレスの配分をできるだけ細かくして無駄を減らし、少しでもIPアドレスの枯渇を先送りしようとする目的で導入する場合が多い。しかし、利用可能なアドレス空間が巨大になったIPv6では、わざわざこうした複雑な工夫をする必然性が薄い。そのため、IPv6ではCIDRのようなことはせず、上位64ビットをネットワークプレフィックス、下位64ビットをホストアドレスと、単純に区切るのが基本だ。

ネットワークプレフィックスの中身はどうなっている?

ネットワークプレフィックスとして利用する上位64ビットの内訳については、RFC2374で規定しており、内訳は以下のようになっている。

・FP(Format Prefix) : 3ビット
・TLA(Top-Level Aggregation) ID : 13ビット
・RES(Reserved for future use) : 8ビット
・NLA(Next-Level Aggregation) ID : 24ビット
・SLA(Site-Level Aggregation) ID : 16ビット

この方法では、最大で8,192の最上位ISPに対してTLAを割り当てて、そこから下位ISP、さらにエンドユーザーに対してアドレスを配分する形になる。しかし、 IPv6の普及が始まったばかりの段階で特定のISPに大きなアドレス空間を割り当てるのは問題があるとして、上記の内容は以下の内容に変更された。

・FP(Format Prefix) : 3ビット
・TLA(Top-Level Aggregation) ID : 13ビット
・subTLA(sub Top-Level Aggregation) ID : 13ビット
・RES(Reserved for future use) : 6ビット
・NLA(Next-Level Aggregation) ID : 13ビット
・SLA(Site-Level Aggregation) ID : 16ビット

これらのうち、実際にISPに対して割り当てるのはRESまでの35ビットとなる。実際には、TLAの部分をTLAとSub-TLAの二本立てにしており、大手ISPなどはTLA単位、中小のISPはTLAを分割したSub-TLAを単位とする割り当てを行う。これは、過大なサイズのアドレスブロックを割り当てて、アドレス空間を無駄使いする事態を回避するためだ。