メインコンテンツまでスキップ

6. Zone Indices (ゾーンインデックス)

同じ非グローバルアドレスが、同じスコープの複数のゾーンで使用されている可能性があり (例えば、2つの別々の物理リンクでのリンクローカルアドレスfe80::1の使用)、ノードが同じスコープの異なるゾーンに接続されたインターフェースを持つ場合があるため (例えば、ルータは通常、異なるリンクに接続された複数のインターフェースを持つ)、ノードは非グローバルアドレスがどのゾーンに属するかを識別するための内部的な手段を必要とします。これは、ノード内で、そのノードが接続されている同じスコープの各ゾーンに個別の「ゾーンインデックス (zone index)」を割り当て、アドレスのすべての内部使用をゾーンインデックスで修飾できるようにすることによって達成されます。

ゾーンインデックスの割り当ては、以下の図の例で示されています:

---------------------------------------------------------------
| a node |
| |
| /--link1--\ /--------link2--------\ /--link3--\ /--link4--\ |
| |
| /--intf1--\ /--intf2--\ /--intf3--\ /--intf4--\ /--intf5--\ |
---------------------------------------------------------------
: | | | |
: | | | |
: | | | |
(imaginary ================= a point- a
loopback an Ethernet to-point tunnel
link) link

図1: ゾーンインデックスの例

この例のノードには5つのインターフェースがあります:

  • 仮想的なループバックリンクへのループバックインターフェース (どこにも接続しないファントムリンク)。

  • 同じイーサネットリンクへの2つのインターフェース。

  • ポイントツーポイントリンクへのインターフェース。

  • トンネルインターフェース (例えば、IPv6-over-IPv6トンネル [8] の抽象的なエンドポイント、おそらくイーサネットまたはポイントツーポイントリンク上に確立されています)。

したがって、このノードは、インターフェースインデックス1から5で識別される5つのインターフェースローカルゾーンに接続されています。

2つのイーサネットインターフェースは同じリンクに接続されているため、ノードは4つのリンクローカルゾーンにのみ接続されており、リンクインデックス1から4で識別されます。また、トンネルインターフェースがイーサネット上に確立されている場合でも、トンネルリンクは独自のリンクインデックスを取得し、これはイーサネットリンクゾーンのインデックスとは異なることに注意してください。

特定のスコープの各ゾーンインデックスには、スコープを示すのに十分な情報が含まれている必要があります。これにより、ノード内のすべてのスコープのすべてのインデックスが一意になり、ゾーンインデックス自体を専用の目的に使用できるようになります。管理情報ベース (MIB) のエントリを識別するためにインデックスを使用することは、専用目的の一例です。スコープをエンコードするための実際の表現は実装依存であり、この文書の範囲外です。この文書内では、読みやすさのために、インデックスは「link index 2」などの形式で単純に表されます。

ゾーンインデックスは、ノードに厳密にローカルです。例えば、ポイントツーポイントリンクのもう一方の端にあるノードは、そのリンクに対して全く異なるインターフェースおよびリンクインデックス値を使用する場合があります。

実装は、各スコープの「デフォルト (default)」ゾーンの概念もサポートすべきです (SHOULD)。そして、サポートされている場合、各スコープでのインデックス値ゼロは「デフォルトゾーンを使用する」ことを意味するために予約されるべきです (SHOULD)。他のゾーンインデックスとは異なり、デフォルトインデックスにはスコープが含まれておらず、スコープはデフォルトインデックスが伴うアドレスによって決定されます。実装は、各スコープに個別のデフォルトゾーンを追加で定義する場合があります。これらのデフォルトインデックスは、ノードが1つのゾーンにのみ接続されているアドレスのゾーン修飾子としても使用できます。例えば、グローバルアドレスを使用する場合などです。

現在、ノードがどのインターフェースが同じゾーンに属しているかを自動的に決定する方法はありません。例えば、同じリンクや、インターフェースよりも大きい同じマルチキャストスコープゾーンなどです。将来、その情報を決定するプロトコルが開発される可能性があります。そのようなプロトコルがない場合、実装はゾーンインデックスの手動割り当てや再割り当てのための手段を提供しなければなりません (MUST)。さらに、ほとんどの場合、手動設定を実行しなくても済むようにするために、実装は、デフォルトで、最初に次のようにのみゾーンインデックスを割り当てるべきです (SHOULD):

  • 各インターフェースに一意なインターフェースインデックス。

  • 各インターフェースに一意なリンクインデックス。

その後、手動設定は、単一のリンクに複数のインターフェースを持つノードや、異なる (マルチキャストのみの) スコープのゾーンにインターフェースを持つノードの、より一般的でないケースにのみ必要になります。

したがって、図1の例のノードのデフォルトゾーンインデックス割り当ては、以下の図2に示すようになります。その後、例えば、図1に示すように、2つのイーサネットインターフェースに同じリンクインデックスを割り当てるには、手動設定が必要になります。

---------------------------------------------------------------
| a node |
| |
| /--link1--\ /--link2--\ /--link3--\ /--link4--\ /--link5--\ |
| |
| /--intf1--\ /--intf2--\ /--intf3--\ /--intf4--\ /--intf5--\ |
---------------------------------------------------------------
: | | | |
: | | | |
: | | | |
(imaginary ================= a point- a
loopback an Ethernet to-point tunnel
link) link

図2: デフォルトゾーンインデックスの例

上記で指定されているように、ゾーンインデックスを最初に割り当てるだけでなく、実装は、選択肢が複数ある各スコープのデフォルトゾーンを自動的に選択すべきです (SHOULD)。これは、アドレスがゾーンインデックスなし (またはゾーンインデックス0) で指定されたときに使用されます。例えば、図2に示す例では、実装は、これら2つのスコープのそれぞれのデフォルトとして、intf2とlink2を自動的に選択する場合があります。(可能な選択アルゴリズムの1つは、各スコープのデフォルトとして、ループバックインターフェース以外のインターフェースを含む最初のゾーンを選択することです。) スコープのデフォルトゾーンを手動で割り当て、自動割り当てを上書きする手段も提供されなければなりません (MUST)。

ユニキャストループバックアドレス (::1) は、ループバックインターフェース以外のインターフェースに割り当てられてはなりません (MAY NOT)。したがって、::1がゾーンインデックスなしまたはデフォルトゾーンインデックスで指定された場合は常に、どのリンクローカルゾーンがデフォルトとして選択されているかに関係なく、ループバックリンクローカルゾーンに属するものとして解釈されることが推奨されます。これが行われる場合、単一の非ループバックインターフェース (例えば、単一のイーサネットインターフェース) のみを持つノード、つまり一般的なケースでは、リンクローカルアドレスをゾーンインデックスで修飾する必要はありません。修飾されていないアドレス::1は常に、ループバックインターフェースを含むリンクローカルゾーンを参照します。他のすべての修飾されていないリンクローカルアドレスは、非ループバックインターフェースを含むリンクローカルゾーンを参照します (デフォルトリンクローカルゾーンが非ループバックインターフェースを含むゾーンに設定されている限り)。

特定のスコープのゾーンが、より大きいスコープのゾーン内に完全に収まるという要件 (上記のセクション5を参照) があるため、スコープSの異なるゾーンに割り当てられた2つのインターフェースは、Sよりも小さいすべてのスコープの異なるゾーンにも割り当てられなければなりません (MUST)。したがって、1つのスコープに対する個別のゾーンインデックスの手動割り当ては、より小さいスコープに対する個別のゾーンインデックスの自動割り当てを必要とする場合があります。例えば、図1で個別のマルチキャストサイトローカルインデックス1と2が手動で割り当てられ、サイト1がリンク1、2、3を含み、サイト2がリンク4のみを含むと仮定します。この構成により、対応するadmin-local (つまり、マルチキャスト "scop" 値4) インデックス1と2が自動的に作成されます。これは、admin-localスコープがサイトローカルスコープよりも小さいためです。

上記の考慮事項により、ここでの追加設定を含む図1の例のノードの完全なゾーンインデックスのセットは、以下の図3に示されています。

---------------------------------------------------------------
| a node |
| |
| /--------------------site1--------------------\ /--site2--\ |
| |
| /-------------------admin1--------------------\ /-admin2--\ |
| |
| /--link1--\ /--------link2--------\ /--link3--\ /--link4--\ |
| |
| /--intf1--\ /--intf2--\ /--intf3--\ /--intf4--\ /--intf5--\ |
---------------------------------------------------------------
: | | | |
: | | | |
: | | | |
(imaginary ================= a point- a
loopback an Ethernet to-point tunnel
link) link

図3: 完全なゾーンインデックスの例

上記の例では、ゾーンが各スコープに対して1から順次にインデックス値を割り当てられていますが、ゾーンインデックス値は任意です。実装は、ノード内のすべてのスコープの各ゾーンのインデックス値が一意である限り、選択した任意の値でゾーンにラベルを付けることができます (MAY)。ゼロは、デフォルトゾーンを表すために予約されるべきです (SHOULD)。推奨される基本API [10] に従うことを選択する実装は、sockaddr_in6構造体のsin6_scope_idフィールドで表現できるインデックス値に制限する必要があります。