はじめに
IPv6は、IPv4に続くIPのバージョンとして設計された通信プロトコルです。名前は聞いたことがあっても、「IPv4と何が違うのか」「128ビットのアドレスをどう読むのか」が分かりにくいと感じる人は少なくありません。
この記事では、IPv6の役割をIPv4との違いから整理し、128ビットのアドレス表記、主なユニキャストアドレス、SLAACによる自動設定までを解説します。読み終えると、IPv6がどのようなプロトコルで、IPv6アドレスをどのように表し使うのかを説明できるようになります。
IPv6とは
IPv6(Internet Protocol Version 6)は、ネットワーク間でパケットを届けるために使うIPのバージョンの一つです。IPv4が32ビットのアドレスを使うのに対し、IPv6では128ビットのアドレスを使用します。
アドレス空間を大きくしたことが大きな特徴ですが、変更点はアドレスの長さだけではありません。IPv6では基本ヘッダーの構造が整理され、拡張ヘッダーによって追加機能を扱う仕組みや、端末が自動的にアドレスを設定する仕組みなども用意されています。
IPそのものがパケットをどのように届けるかは「IPとは?ネットワーク層の役割やルーティングを初心者向けに分かりやすく解説」、IPv6ヘッダーの詳しい構造は「IPv6ヘッダーとは?構造と8つのフィールドの役割を解説」で説明しています。
IPv4とIPv6の主な違い
IPv4とIPv6はどちらもIPですが、アドレス長や表記方法だけでなく、パケットを扱う仕組みにも違いがあります。
| 項目 | IPv4 | IPv6 |
|---|---|---|
| アドレス長 | 32ビット | 128ビット |
| 主な表記 | 10進数をピリオドで区切る | 16進数をコロンで区切る |
| ブロードキャスト | あり | 使用しない |
| 基本ヘッダー | 可変長 | 40バイト固定 |
| ルーターでのフラグメンテーション | 条件によって行う | 行わない |
IPv6ではブロードキャストアドレスを使わず、必要な複数宛先への通信にはマルチキャストなどを利用します。また、経路途中のルーターはIPv6パケットをフラグメントへ分割しません。パケットが大きすぎる場合は送信元へ通知し、送信側がサイズを調整します。
フラグメンテーションの違いは「IPフラグメンテーションとは?MTUとの関係・IPv4とIPv6の違いを解説」で詳しく説明しています。
IPv6アドレスは128ビットで表す
IPv6アドレスは128ビットを16ビットずつ8つのグループに分け、それぞれを16進数で表します。グループの区切りにはコロン(:)を使います。
説明用として予約されている2001:db8::/32の範囲を使うと、次のように表記できます。
2001:0db8:0000:0000:0000:ff00:0042:8329
IPv4の192.168.1.10のような10進数表記と比べると長く見えますが、IPv6にはゼロを省略して短く書くルールがあります。
IPv6アドレスを短く表記する方法
IPv6アドレスでは、各16ビット部分の先頭にあるゼロを省略できます。また、ゼロだけで構成されたグループが連続する部分は、一つのアドレス内で一度だけ::へまとめられます。
先ほどの例は、次のように短縮できます。
2001:db8::ff00:42:8329
0db8はdb8、0042は42と書けます。さらに連続する0000のグループを::へ置き換えています。::を一つのアドレスで二度使うと、何個のゼログループを省略したのか判断できなくなるため、一度だけ使用します。
IPv6でよく使う3つのユニキャストアドレス
IPv6では用途に応じて複数の種類のアドレスを使います。ここでは、基本を理解するうえで重要なグローバルユニキャスト、リンクローカル、ユニークローカルの3種類を整理します。
グローバルユニキャストアドレス
グローバルユニキャストアドレスは、グローバルな範囲で一意に割り当てて利用するIPv6アドレスです。インターネットを経由する通常のIPv6通信では、この種類のアドレスが使われます。
一般的なIPv6ユニキャストアドレスでは、ネットワークを示すプレフィックスとインターフェース識別子(IID)を組み合わせて扱います。ただし、IIDを常にMACアドレスから作るわけではありません。現在は、MACアドレスをそのまま推測できるような固定的な識別子をデフォルトで使うことは推奨されていません。
リンクローカルアドレス
リンクローカルアドレスは、同じリンク内だけで使用するIPv6アドレスです。fe80::/10の範囲が予約されており、ルーターを越えてグローバルに転送するためのアドレスではありません。
IPv6では、近隣ノードとの通信やルーターとの情報交換などにリンクローカルアドレスを利用します。そのため、インターネット向けのグローバルアドレスとは役割が異なります。
ユニークローカルアドレス
ユニークローカルアドレス(ULA)は、組織やサイトなど限定された範囲の通信に使うIPv6ユニキャストアドレスです。fc00::/7がこの用途に定義されており、グローバルなインターネットでルーティングされることは想定されていません。
ULAは高い確率で他のネットワークと重複しないよう設計されているため、組織内ネットワークを統合する場合などにもアドレス衝突を起こしにくい特徴があります。「IPv6のプライベートアドレスだからNATを使ってインターネットへ出るためのもの」と考えるのではなく、ローカル通信のための独立したアドレスとして理解するのが適切です。
SLAACでIPv6アドレスを自動設定できる
IPv6では、SLAAC(Stateless Address Autoconfiguration)によって端末がIPv6アドレスを自動設定できます。端末はまずリンクローカルアドレスを用意し、ルーターから通知されるプレフィックスなどの情報を利用して、グローバルアドレスを自動生成できます。
SLAACでは、生成したアドレスが同じリンク上で重複していないか確認するDuplicate Address Detection(DAD)も行います。DHCPサーバーがなければ何でも自動設定できるという意味ではなく、IPv6にはDHCPv6を使わずにアドレスを構成できる仕組みがある、と理解すると整理しやすくなります。
まとめ
IPv6は、128ビットのアドレスを使用するIPのバージョンです。IPv4より広いアドレス空間を持つだけでなく、基本ヘッダーの整理、ルーターによるフラグメンテーションの廃止、SLAACによるアドレス自動設定など、通信の仕組みにも変更があります。
IPv6アドレスは16進数をコロンで区切って表し、先頭ゼロや連続するゼログループを省略できます。利用範囲によってグローバルユニキャスト、リンクローカル、ユニークローカルなどを使い分けます。まずは「128ビットのアドレスを、用途に応じた種類と表記ルールで扱うIP」と理解すると、IPv6の基本を整理しやすくなります。