IPv4は32ビットでしたが、IPv4アドレスがいつか枯渇してしまうとしたら、どう解決すればいいでしょうか?
32ビットで表現できるアドレスは約43億個。世界中の機器がインターネットにつながる時代には、実は全然足りません。この課題を解決するために生まれたのがIPv6です。
IPv6は「桁違いに広い」住所システム
IPv6は、IPv4の32ビットに代わる次世代のIPアドレス体系で、128ビットという桁違いに広いアドレス空間を持ちます。IPv4を「市内の番地」だとすると、IPv6は「宇宙規模の住所」と言えるほどの余裕があり、今後アドレスが枯渇する心配はほぼありません。
表記方法:16進数・コロン区切り・8つのグループ
IPv6アドレスは128ビットを16ビットごとに8つのグループに分け、それぞれを16進数で表し、コロン(:)で区切って表記します。
2001:0db8:0000:0000:0000:0000:1234:5678
IPv4がドット(.)で4つのオクテット(10進数)を区切るのに対し、IPv6はコロン(:)で8つのグループ(16進数)を区切る、と対比して覚えると混乱しません。1グループは16ビット=4桁の16進数(0000〜ffff)です。
省略ルール1:グループ内の先頭の0は省略できる
各グループの中で、先頭に連続する0は省略できます。たとえば 0db8 は db8 に、0000 は 0 に書き換えられます。先ほどの例に適用すると、次のようになります。
2001:db8:0:0:0:0:1234:5678
省略ルール2:連続する「0だけのグループ」は「::」に1回だけ置き換えられる
さらに、連続する0のグループは ::(コロン2つ)でまとめて省略できます。上の例では 0:0:0:0 という4グループ連続の0があるので、これを :: に置き換えられます。
2001:db8::1234:5678
ここで最も重要な試験ポイントは、:: はアドレス中に1回しか使えないということです。もし2箇所で :: を使ってしまうと、それぞれの :: が何個の0グループを表しているのか一意に決まらず、アドレスが曖昧になってしまいます。連続する0のグループが複数箇所にある場合は、最も長い連続箇所を1回だけ :: に置き換え、他の箇所は省略ルール1(先頭0の省略)だけを適用します。
復元の考え方:8グループになるように0を補う
:: を含むアドレスを元に戻すときは、「全体で8グループになるように、:: の位置に0のグループを補う」と考えます。2001:db8::1234:5678 は、2001 db8 の2グループと 1234 5678 の2グループ、合わせて4グループが見えているので、8グループにするには残り4グループ分の0(0:0:0:0)を :: の位置に補えばよい、と逆算できます。
2001:0db8:0000:0000:0000:ff00:0042:8329 を省略ルールに従って書き換えるとどうなるでしょう?
答えを見る
まず各グループの先頭0を省略: 2001:db8:0:0:0:ff00:42:8329。次に連続する0グループ(3グループ連続)を::にまとめると 2001:db8::ff00:42:8329 になります。
試験でのポイント
CCNA試験では、IPv6アドレスの省略・復元の両方向で出題されます。最も狙われやすいのは「:: を1つのアドレス中で2回使ってしまっている、明らかに誤った表記」を見抜かせる問題です。:: は連続する0のグループをまとめて1回だけしか使えない、という原則を必ず覚えておきましょう。また、先頭の0を省略できるのは各グループの先頭のみであり、途中や末尾の0(例: ff00 の00)は省略できない点も引っかけとして狙われます。逆に「省略された :: を展開して元の128ビットに戻す」問題も出るため、8グループになるよう不足分を0で補う練習もしておきましょう。
IPv6アドレスの表記で、:: を1つのアドレスの中で2回使うことは許されるでしょうか?
答えを見る
許されません。 :: は連続する0のグループをまとめる省略表記ですが、2回使うと各::が何個の0グループを表すか一意に決まらなくなり、アドレスが曖昧になってしまいます。1つのアドレス中で使えるのは1回だけです。
IPv6は128ビットの16進コロン区切り、そして省略ルールは「先頭0の省略」と「連続0グループの::(1回だけ!)」の2段構え。IPv4のドット10進とはガラッと見た目が変わるけど、慣れれば読めるようになるよ。次はIPv6アドレスの種類、GUAやリンクローカル、そしてSLAACを見ていくよ。