2022/06/15

IPv6

IPv4からの主な変更点は次の3点。
  • アドレス空間の拡張
  • 近隣探索とアドレス自動設定機能
  • ヘッダー形式の簡略化
IPv4からIPv6に移行しても、下位のデータリンク層や上位のトランスポート層のプロトコルは継続利用が可能。しかし、ICMP、DHCP、ルーティングプロトコルなど管理用のプロトコルはIPv6用に規格化されており、IPv6への移行に合わせて使用しなければならない。さらにアドレス長の拡張、ソケットの構造体やAPIが変更されたりしているため、アプリケーション層のネットワークソフトウェアもIPv6対応のバージョンに変更する必要がある。

RFC8200 


アドレス空間の拡張


アドレススコープ

スコープの種類 アドレスの構造
グローバル
(IPv4のグローバルアドレスに相当)
グローバルユニキャストアドレスの構造
1~48ビット グローバルルーティングプレフィックス
49~64ビット サブネットID
65~128ビット インタフェースID
※RFC2374は、現在利用可能なものを先頭3ビットが「001」であるものと定めている。
ユニークローカル
(IPv4のプライベートアドレスに相当)
ユニークローカルユニキャストアドレスの構造
1~7ビット FC00::/7
(現在使用できるのは FD00::/8)
8~48ビット Global ID サイト内で自由に設定できるが、乱数を用いることが推奨されている。Global IDが一致する可能性は低いため、ほぼユニークなアドレスであるといえる。
49~64ビット サブネットID
65~128ビット インタフェースID
リンクローカル
(IPv4のリンクローカルアドレス(169.254/16)に相当)
リンクローカルユニキャストアドレスの構造
1~10ビット FE80::/10
(現在使用できるのは FD00::/8)
11~64ビット すべて0
65~128ビット インタフェースID

企業向けIPv6接続サービスに契約した場合、グローバルルーティングプレフィックス(先頭48ビット)がプロバイダから割り当てられる。

インタフェースID

インタフェースIDは、リンク層アドレス(MACアドレスなど)から生成する方法と、ランダム値から生成する方法(temporary address)が規定されている。
MACアドレスからインタフェースIDを生成する場合、「Modified EUI-64」形式に従う。
  1. 上位24ビット(OUI)と下位24ビットの間に、0xFFFEを挿入する(この時点でEUI-64形式になっている)。
  2. U/Lビット(Universal/Local: 先頭から7ビット目)を「1」(Local)にする。
例)MACアドレスが「00:11:22:33:44:55」の場合、インタフェースIDは次の通り。
  1. 「00:11:22:33:44:55」→「00:11:22:FF:FE:33:44:55」
  2. 「00:11:22:FF:FE:33:44:55」→「02:11:22:FF:FE:33:44:55」

宛先アドレスの種類

宛先アドレスは、到達範囲により次の3つに分類される。
  • ユニキャストアドレス
  • エニーキャストアドレス
  • マルチキャストアドレス
IPv6ではブロードキャストアドレスが廃止され、代わりにマルチキャストを使用する。マルチキャストアドレスは先頭が FF00::/8 から始まり、用途に応じてアドレス構造がきめ細かく定められている。

 

特別な用途のために割り当てられたアドレス

アドレス 名称 意味
:: 未指定アドレス アドレスがないことを示す
::1 ループバックアドレス 自分自身を意味する仮想インタフェースである
インタフェースIDがすべて0 サブネットルータエニーキャストアドレス サブネット上のルータを宛先とするエニーキャストアドレス
ff02:0:0:0:0:0:0:1 リンクローカル全ノードマルチキャストアドレス 近隣探索のルータ広告や近隣広告などに利用される。IPv6ノードが必ず参加するマルチキャストアドレスである
ff02:0:0:0:0:0:0:2 リンクローカル全ルータマルチキャストアドレス 近隣探索のルータ要請などに利用される。IPv6ルータが必ず参加するマルチキャストアドレスである
ff02:0:0:0:0:1:ff00/104 リンクローカル要請ノードマルチキャストアドレス 近隣探索の近隣要請などに使用される。下位24ビットには、用途に応じ、送信元又は宛先ホストのアドレスの下位24ビットが埋め込まれる

近隣探索とアドレス自動設定機能

IPv6ではARPが廃止され、代わりにICMPv6に規定された近隣探索の仕組みを用いて、リンク層のアドレス解決と重複アドレスの検出の他、ホストのグローバルアドレス自動設定を実現する。

近隣探索の機能


機能 内容
経路設定 リンク内に存在するデフォルトルータを自動的に発見する
アドレス自動設定 グローバルユニキャストアドレスのプレフィックスを発見し、グローバルユニキャストアドレスを自動的に設定する
通信パラメータ設定 リンクMTUは最大ホップ数など、各種パラメータを発見する
リンク層のアドレス解決 リンク層のアドレス解決を行う
(IPv4のARPに相当する)
アドレス解決の際、そのやり取りで得た情報に基づいて近隣キャッシュを更新する
(アドレス解決の要求側と応答側の双方で更新する)
自ノードのリンク層アドレスが変更された場合、自発的に全ノードに通知する
到達不能検出 通信が途絶えて一定期間経過した近隣ノードに対し、通信できるかを確認する
(上位層プロトコルが通信している場合、その状態に基づいて到達不能を検出する)
重複アドレス検出 アドレス自動設定により設定したアドレスがリンク内で重複していないか検出する
リダイレクト 自分より適したネクストホップを通知する

近隣探索で使用されるメッセージ

近隣探索を実現するのはICMPv6の5種類のメッセージ。
  • ルータ要請とルータ広告のメッセージは、経路設定、アドレス自動設定、通信パラメータ設定の機能を実現。
  • 近隣要請と近隣広告のメッセージは、リンク層のアドレス解決、到達不能検出、重複アドレス検出の機能を実現
  • リダイレクトメッセージは、リダイレクト機能を実現
メッセージ 内容 送信元→宛先
ルータ要請
Router Sokicitation
リンク内のデフォルトルータを探索するため、ホストから全ルータに送信する ホストの送信元インタフェースのアドレス → 全ルータマルチキャストアドレス
ルータ広告
Router Advertisement
ルータが自分の存在を通知する。
このメッセージで以下の設定が行われる。
  • 経路設定(送信元アドレスをデフォルトルータとする)
  • アドレス自動設定(プレフィックスを取得する)
  • 通信パラメータ設定(MTUなどを取得する)
ルータ要請の応答:
る他の送信元インタフェースのリンクローカルアドレス → ルータ要請の送信元アドレス
定期的な通知:
ルータの送信元インタフェースのリンクローカルアドレス → 全ノードマルチキャストアドレス

メッセージ 内容 送信元→宛先
機能 ターゲットアドレス 送信元リンク層アドレス
近隣要請
Neighbor Solicitation
リンク層のアドレス解決 対象ホストのアドレス 自ホストのリンク層アドレス ホストの送信元インタフェースのアドレス → 対象ホストに応じた要請ノードマルチキャストアドレス
到達不能検出 対象ホストのアドレス ホストの送信元インタフェースのアドレス → 対象ホストのアドレス
重複アドレス検出 自ホストのアドレス なし 未指定アドレス → 自ホストに応じた要請ノードマルチキャストアドレス

メッセージ 内容 送信元→宛先
機能 ターゲットアドレス ターゲットリンク層アドレス
近隣広告
Neighbor Advertisement
リンク層のアドレス解決 近隣要請のターゲットアドレス 自ホストのリンク層アドレス ホストの送信元インタフェースのアドレス → 近隣要請の送信元アドレス
到達不能検出
重複アドレス検出 ホストの送信元インタフェースのアドレス → 全ノードマルチキャストアドレス
自ノードのリンク層アドレス通知 自ホストのアドレス

メッセージ 内容 送信元→宛先
ターゲットアドレス ターゲット
リンク層アドレス
リダイレクト
Redirect
ルータが自分を経由するパケットを受信した際、ホップ数がより少なくなるネクストホップ(パケットの送信元から見た第1ホップ)のリンクローカルアドレス ターゲットアドレスのリンク層アドレス(知っていた場合) ルータの送信元インタフェースのリンクローカルアドレス → いダイレクト通知先のアドレス

アドレス自動設定機能

ノードのIPアドレスを設定する方法は3通り。
  • 手動設定
  • ステートレスアドレス自動設定
  • ステートフルアドレス自動設定


ステートレスアドレス自動設定

ルータ要請/ルータ広告のやり取りを通して、ホストのグローバルアドレスを自動設定する方法のこと。
  1. 開始
    インタフェースが起動すると、ステートレスアドレス自動設定が開始される。
  2. リンクローカルアドレスの割り当て
    1. インタフェースIDからリンクローカルアドレスを生成する
    2. 重複アドレス検出を行う
    3. 重複していない場合、当該アドレスを割り当てる
  3. グローバルアドレスの割り当て
    1. インタフェースIDからリンクローカルアドレスを生成する
    2. ルータ要請メッセージを送信する
    3. ルータ広告メッセージを受信する
    4. ルータ広告メッセージからプレフィックスを取り出す。プレフィックス及びインタフェースIDからグローバルアドレスを生成する
    5. 重複アドレス検出を行う
    6. 重複していない場合、当該アドレスを割り当てる

ステートフルアドレス自動設定

DHCPv6サーバを用いてアドレスなどの情報を自動的に取得する方法のこと。
ルータ広告メッセージのOther configurationフラグがONになっていた場合、ステートレスアドレス自動設定を用いてアドレスとデフォルトルートを設定し、それ以外の情報(DNSサーバのIPアドレスなど)をDHCPv6サーバから取得する。つまり、ステートレスアドレス自動設定とDHCPv6サーバによる設定を組み合わせることができる。
なお、DNSサーバの設定は、従来どおりTCP/IP(IPv4)の手動設定、又はDHCPv4による自動設定でも構わない。AAAAレコードの問合せによりサーバのIPv6アドレスを取得できるため。

パケットフォーマットの簡略化

IPv6のヘッダはIPv4より簡略化されている。
  • チェックサムフィールドが廃止されルータのチェックサム計算負荷が軽減
  • フラグメンテーションが拡張ヘッダへ移動
  • ヘッダ長が固定長(40オクテット)となりヘッダ長フィールドを廃止
オプション機能は、IPv4ではフィールドを追加することで実現していたが、IPv6では必要に応じて拡張ヘッダを追加することによって実現される。拡張ヘッダは宛先ノードでのみ処理される。つまり、拡張ヘッダはルーティング処理では扱われないため(ホップバイホップオプションを除く)、ルータから見れば拡張ヘッダの存否にかかわらずIPv6ヘッダ長は固定である。

IPv6のヘッダ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Traffic Class |           Flow Label                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Payload Length        |  Next Header  |   Hop Limit   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         Source Address                        +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Destination Address                      +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Version:  4 bits

バージョン6を表す「0x06」が格納される。

Traffic Class:  8 bits

リアルタイムトラフィックを転送するときに使用する。トラフィッククラスを用いることで、他のトラフィックとの差別化を図ることができる。(IPv4のサービスタイプに該当)

Flow Labels:  20 bits

リアルタイムトラフィックを転送するときに使用する。フローラベルを用いることでフローを識別でき、途中経路のノードが同一フローのパケットを同じように扱うことができる。トラフィッククラスと一緒に用いることで、リアルタイムトラフィックのフローの優先制御が実現される。

Payload Length:  16 bits

ペイロード長(パケットの中でヘッダに続く部分)が格納される。IPv4ではヘッダを含むパケット長が格納されるのに対し、IPv6ではペイロード長が格納される。拡張ヘッダはペイロードの一部とみなされる。

Next Header:  8 bits

IPv6ヘッダに続くヘッダの種類が格納される。(次ヘッダに格納される値は、IPv4のプロトコル番号と同じ)
拡張ヘッダが使用される場合、IPv6ヘッダと上位層の間に挿入される。つまり、ヘッダの順序は、IPv6ヘッダ、拡張ヘッダ、上位層の順となる。

主要な次ヘッダ
内容 拡張ヘッダ
0 ホップバイホップオプションヘッダ
4 IPv4
6 TCP
17 UDP
41 IPv6
43 経路制御ヘッダ
44 フラグメントヘッダ
47 GRE
50 ESP
51 AH
58 ICMPv6
59 次ヘッダなし
60 宛先オプションヘッダ
89 OSPF

Hop Limit:  8 bits

ルータをホップできる回数の上限が格納される。IPv4のTTLと同じであり、ルータを経由するごとに値が一つずつ減っていく。この値が「0」になるとパケットは廃棄され、ICMPv6パケットが送信元ノードへ送信される。

IPv6拡張ヘッダ

IPv6パケットは、0個以上の拡張ヘッダをもつことができる。拡張ヘッダはIPv6ヘッダと上位層プロトコルヘッダの間に挿入される。

拡張ヘッダの構造

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Next Header  |  Hdr Ext Len  |                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
    |                                                               |
    .                                                               .
    .                            Options                            .
    .                                                               .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Next Header:  8 bits

IPv6ヘッダの次ヘッダフィールドと同じく、自ヘッダに後続するヘッダの種類が格納される。拡張ヘッダが複数ある場合、次のようになる。

IPv6ヘッダ
次ヘッダ:拡張ヘッダ1
拡張ヘッダ1
次ヘッダ:拡張ヘッダ2
拡張ヘッダ2
次ヘッダ:TCP
TCP     

Hdr Ext Len:  8 bits

単位は8オクテット。拡張ヘッダの長さは8オクテットの倍数になっている。このフィールドには、拡張ヘッダ長から8オクテットを引いたサイズが格納される。拡張ヘッダ長が8オクテットの場合は「0」となる。

拡張ヘッダは次の6種類ある。

ホップバイホップオプションヘッダ(Hop-by Hop Option Header)

経路上の全てのノードが処理する必要のあるオプションが格納される。IPv6ヘッダのすぐ後に置かれる仕様になっている。ほかの拡張ヘッダと異なり、ルータはこれを処理する必要がある。

経路制御ヘッダ(Routing Header)

経由する必要がある中継ノードのリストが格納される。

フラグメントヘッダ(Fragment Header)

IPv6はIPv4と同様にフラグメンテーションの機能を持つ。しかし、IPv4とは異なり、IPv6では途中経路のルータはパケットをフラグメント化しない。IPv6は、送信元ノードがパケットをフラグメント化する仕様になっている。ルータは、
転送先リンクのMTUがパケットサイズより小さいとき、送信元ホストにICMPv6エラーメッセージ(Packet Too Big)を通知する。このメッセージには、
当該リンクのMTU値が格納されているので、この値に基づいて、送信元ホストはパケットをフラグメント化して再送する。フラグメント化されたパケットを再構成するのは、IPv4と同じく宛先ノードである。
このヘッダには、IPv4ヘッダと同じフィールド(フラグメントオフセット、フラグ、識別子)がある。
フラグメント化する可能性のあるノードの数は、IPv4では途中経路の複数のルータであるのに対し、IPv6では多くとも送信元ノード1つになっている。また、フラグメント化が発生する箇所は、IPv4ではMTUの小さいリンクを収容しているルータに集中する傾向があるのに対し、IPv6では全ての送信元ノードに分散されている。

宛先オプションヘッダ(Destination Option Header)

宛先ノードが処理する必要のあるオプションが格納される。

AH(Authentication Header)

ESP(ESP Header)

AHとESPはIPv6ヘッダの拡張ヘッダとして規定されているが、事実上はIPsecのセキュリティプロトコルであるAHとESPがそれぞれ格納されている。格納される位置は、5オクテット目以降である。

0 件のコメント:

コメントを投稿

人気の投稿