4.

IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック

編集
この記事の要点
  • IPv6 はアドレス長 128 ビット。約 3.4×10^38 個と事実上枯渇しない空間を持つ。
  • IPv4 アドレス枯渇への抜本対策として策定され、NAT に依存しないエンドツーエンド通信を志向する。
  • 表記は 16 ビットごとにコロン区切りの 16 進数。連続する 0 のブロックは「::」で 1 回だけ省略できる。
  • グローバルユニキャスト(2000::/3)・リンクローカル(fe80::/10)・ULA(fc00::/7)など用途別のアドレス範囲がある。
  • SLAAC によりルータ広告(RA)を受けて端末が自動でアドレスを生成できる。
  • 移行期は IPv4 と IPv6 を同時に動かすデュアルスタックが現実的な構成。

概要

IPv6(Internet Protocol version 6)は、現在広く使われている IPv4 の後継となるインターネットプロトコルです。最大の特徴はアドレス長で、IPv4 の 32 ビット(約 43 億個)に対し、IPv6 は128 ビットを持ち、表現できるアドレス数は約 3.4×1038 個に達します。これは事実上枯渇しない規模であり、IPv4 アドレス枯渇問題への抜本的な解決策として策定されました。

IPv6 はアドレス空間の拡大だけでなく、ヘッダの簡素化、アドレス自動設定(SLAAC)、IPsec の標準サポートなど、設計を見直した点が多くあります。一方で IPv4 とは互換性がなく、両者は直接通信できないため、移行期には IPv4 と IPv6 を同時に扱う「デュアルスタック」構成が広く用いられています。

仕組み

IPv6 アドレスは 128 ビットを 16 ビットずつ 8 ブロックに区切り、各ブロックを 16 進数で表してコロンでつなぎます。冗長になりがちなため、次の 2 つの省略ルールがあります。

完全表記:
2001:0db8:0000:0000:0000:ff00:0042:8329

(1) 各ブロックの先頭の 0 は省略可
2001:db8:0:0:0:ff00:42:8329

(2) 連続する 0 のブロックは「::」で 1 回だけ省略可
2001:db8::ff00:42:8329     ← これが標準的な表記

::」は 1 つのアドレス内で1 回しか使えません。2 回使うと、どこに何ブロック分の 0 が入るか復元できなくなるためです。アドレスは前半 64 ビットを「ネットワークプレフィックス」、後半 64 ビットを「インターフェース ID」とする /64 構成が基本です。

主なアドレスの種類は次の通りです。

2000::/3     グローバルユニキャスト  インターネット上で一意。IPv4 のグローバルIPに相当
fe80::/10    リンクローカル          同一リンク内のみ有効。自動で必ず付与される
fc00::/7     ULA(ユニークローカル)   組織内専用。IPv4 のプライベートIPに相当
ff00::/8     マルチキャスト       IPv6 にブロードキャストは無く、これで代替
::1          ループバック            IPv4 の 127.0.0.1 に相当

具体例・計算

SLAAC(ステートレスアドレス自動設定)の流れの例です。ルータが広告するプレフィックスと、端末が生成するインターフェース ID を結合してアドレスが決まります。

ルータ広告 (RA) のプレフィックス : 2001:db8:1234:5678::/64

端末のインターフェース ID 生成 (例: EUI-64 方式)
  MAC アドレス      00:1a:2b:3c:4d:5e
  → 中央に ff:fe   00:1a:2b:ff:fe:3c:4d:5e
  → 7bit目を反転    021a:2bff:fe3c:4d5e

生成される IPv6 アドレス:
  2001:db8:1234:5678:021a:2bff:fe3c:4d5e/64

HTML や URL の中で IPv6 アドレスを書くときは、ポート番号との区切りと混同しないよう角括弧で囲みます。設定ファイルや fetch の例を示します。

URL での記述 (角括弧で囲む):
http://[2001:db8::1]:8080/index.html

curl の例:
curl -g "http://[2001:db8::1]:8080/"

リンクローカル宛てはインターフェースを付ける:
ping6 fe80::1%eth0

プログラムでアドレスを正規化する例です。PHP の inet_pton/inet_ntop は省略形を統一的に扱えます。

// PHP: IPv6 アドレスを正規化
$packed = inet_pton('2001:db8:0:0:0:0:0:1');
echo inet_ntop($packed);  // 2001:db8::1

主な用途

  • モバイル・IoT の大量端末収容 — 携帯網やセンサーネットワークなど、膨大な数の端末に一意のアドレスを割り当てます。
  • エンドツーエンド通信 — NAT を介さず端末同士が直接通信でき、P2P や VoIP の構成が単純になります。
  • アドレス自動設定 — SLAAC により DHCP サーバを用意せずとも端末が自律的にアドレスを取得できます。
  • 大規模クラウド/データセンター — サブネットを潤沢に切れるため、アドレス枯渇を気にせず設計できます。

関連技術との比較

項目IPv6IPv4
アドレス長128 ビット32 ビット
アドレス数約 3.4×10^38約 43 億
表記コロン区切り 16 進(:: 省略)ドット区切り 10 進
アドレス自動設定SLAAC / DHCPv6DHCP のみ
ブロードキャスト無し(マルチキャストで代替)有り
NAT の必要性原則不要枯渇対策で必須

注意点・落とし穴

  • 「::」は 1 回だけ — 複数回使うと曖昧になり不正なアドレスとなります。
  • URL では角括弧が必須[2001:db8::1]:80 のように囲まないと、ポート番号のコロンと区別できません。
  • リンクローカルにはゾーン ID — fe80:: 宛てはどのインターフェースから送るか(%eth0 など)を指定しないと届きません。
  • デュアルスタックの優先順位 — 端末は IPv6 を優先しがちで、IPv6 経路に問題があると IPv4 へフォールバックするまで遅延が出ることがあります(Happy Eyeballs で緩和)。
  • ファイアウォールの設定漏れ — IPv4 だけ遮断して IPv6 を素通しにする設定ミスは、セキュリティホールになります。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. IPアドレス
  2. サブネットとサブネットマスク
  3. CIDR表記
  4. IPv6
  5. NAT・NAPT
  6. ポート番号
  7. MACアドレス

最近更新/作成されたページ