IPv6アドレスの表記方法

IPv6アドレスは128ビットという長いアドレスとなるため省略化する記載方法が決められています。省略化のルールを記載する前に、IPv6アドレスの構成を見てみます。

例として、2408 : 0010 : 2ba5 : b200 : b487 : c4aa : c39a : db36 というアドレスの場合です。

コロンで区切られた1つのフィールドは16進数で記載された16ビット分の数値です。これらが8個あるので全体の長さは128ビットとなります。ユニキャストアドレスの場合、前半の64ビットをプレフィックス、後半の64ビットをインターフェイスIDと呼びます。プレフィックスはIPv4のネットワーク部に、インターフェイスIDはホスト部に該当します。

先頭のフィールド「2408」ですが、2進数に変換すると「0010 0100 0000 1000」となります。

128ビット中の先頭3ビットが「001」で始まるアドレスはインターネットで通信が可能なアドレスで、グローバルアドレスと言われています。

それではIPv6の省略化のルールについてです。

ルールとしては以下のようになります。

  • 各フィールドの先頭の 0 は省略する。
  • 0 のフィールドが連続する場合は「::」で表現する。
  • 0 のフィールドが1つだけの場合は「::」の表現はできない。
  • 0 が連続するフィールドが複数ある場合、最も多く省略できる部分で「::」を使用する。
  • 0 が連続するフィールドが複数あり、同じフィールド数の場合は前方の方を省略する。
  • 「::」の表現は1つのアドレスにつき1回だけ使用ができる。
  • アルファベットは小文字を使用する。

例として出したIPv6アドレスですが、2番目のフィールドが「0010」であるため「10」に省略することができます。ですので省略した場合のアドレスは、2408 : 10 : 2ba5 : b200 : b487 : c4aa : c39a : db36 となります。

他の例として、2408 : 0010 : 0000 : 0000 : b487 : 0000 : 0000 : 0123 を考えてみます。

先頭の 0 を省略すると、2408 : 10 : 0 : 0 : b487 : 0 : 0 : 123 となります。

0 が連続するフィールドが2箇所あるため前の方を「::」に置き換えると、2408 : 10 :: b487 : 0 : 0 : 123 となります。これが省略された形のIPv6アドレスとなります。

プレフィックスについて、もう少し記載しておきます。

プレフックスは先に書いたとおりIPv4のネットワーク部に該当する部分のことを言います。これとは別にIPv6アドレスの一部の固定のビット部を指してプレフィックスと呼ぶこともあります。

この場合はIPv4のCIDR表記と同じようにスラッシュを用いてプレフィックス(どこまでが固定ビットか)を表現します。

例:
2408 : 10 : 2ba5 : b200 : b487 : c4aa : c39a : db36 / 64 のときのネットワークアドレスは、2408 : 10 : 2ba5 : b200 :: / 64 となります。「/ 64」はプレフックスの長さ(どこまでが固定部分なのか、つまりどこまでがネットワークアドレスに該当する部分なのか)を示しています。

先頭3ビットが「001」で始まるアドレス(つまり、プレフィックスが 001 であるアドレス)をグローバルアドレスと言いますが、グローバルアドレスの定義としては 2000::/3 と記載することができます。

リンクローカルアドレスは FE80::/10 と定義されますが、これはプレフィックスが 1111 1110 10 であるということです。

IPv6のループバックアドレスは 0:0:0:0:0:0:0:1 とされており、通常 ::1 と表記されます。また、すべてが 0 のアドレス 0:0:0:0:0:0:0:0 は未指定アドレスで、IPアドレスがまだない状態です。未指定アドレスは通常 ::(コロン2つ)で表記されます。

tcpdumpの使い方メモ

tcpdumpを使ってみました。OSはLinux(ubuntu)です。

まずはキャプチャするインターフェイスを「nmcli device」で確認します。

無線LANインターフェースの「wlp1s0」をキャプチャ対象にします。

tcpdumpコマンドに出力ファイル名と対象インターフェイスを指定してキャプチャします。出力ファイルは「-w」オプション、対象インターフェイスは「-i」オプションで指定します。管理者権限がないとtcpdumpは実行できないので sudo で実行します。

$ sudo tcpdump -w cap01 -i wlp1s0

tcpdumpを実行するとキャプチャが始まります。止めるときは「Ctrl+C」を押下します。実行時のログです。

カレントディレクトリに「cap01」というファイルが出来ます。

キャプチャしたファイルの所有者は tcpdump になっていました。

「cap01」は、そのままWiresharkで読み込めます。