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

4.2. Protocol Packet Processing (プロトコルパケット処理)

IPv6のOSPFは、IPv6のネットワーク層上で直接実行されます。そのため、直接カプセル化するIPv6ヘッダーの次ヘッダー (Next Header) フィールドが値89に設定された1つ以上のIPv6ヘッダーにカプセル化されます。

IPv4のOSPFと同様に、IPv6のOSPFルーティングプロトコルパケットは、隣接性に沿ってのみ送信されます (Helloパケットは例外で、これらは隣接性を発見するために使用されます)。OSPFパケットタイプと機能は、IPv4とIPv6の両方で同じであり、標準OSPFパケットヘッダーのタイプ (Type) フィールドによってエンコードされます。

4.2.1. Sending Protocol Packets (プロトコルパケットの送信)

IPv6ルータがOSPFルーティングプロトコルパケットを送信する場合、標準IPv6 OSPFパケットヘッダーのフィールドを次のように埋めます (付録A.3.1を参照):

Version # (バージョン番号)

本仕様で文書化されているプロトコルのバージョン番号である3に設定されます。

Type (タイプ)

リンク状態更新 (Link State Update) やHelloパケットなどのOSPFパケットのタイプ。

Packet length (パケット長)

標準OSPFパケットヘッダーを含む、OSPF パケット全体の長さ (バイト単位)。

Router ID (ルータID)

ルータ自体の識別 (誰がパケットを発信しているか)。

Area ID (エリアID)

パケットが送信されているインターフェースのOSPFエリア。

Instance ID (インスタンスID)

パケットが送信されているインターフェースに関連付けられたOSPFインスタンスID。

Checksum (チェックサム)

OSPF パケット全体と前置されたIPv6擬似ヘッダーをカバーする、標準IPv6上位層チェックサム ([IPV6] の第8.1節で説明されているとおり) (付録A.3.1を参照)。

OSPFルーティングプロトコルパケットのIPv6送信元アドレスと宛先アドレスの選択は、[OSPFV2] の第8.1節のIPv4ロジックと同じように実行されます。IPv6宛先アドレスは、AllSPFRouters、AllDRouters、および隣接性の他端に関連付けられたネイバーIPアドレス (IPv6では、仮想リンクを除くすべてのリンクについて、IPv6リンクローカルアドレスです) から選択されます。

リンク状態要求 (Link State Request) パケットおよびリンク状態確認応答 (Link State Acknowledgment) パケットの送信は、[OSPFV2] の第10.9節および第13.5節にそれぞれ文書化されているIPv4手順から変更されていません。Helloパケットの送信は第4.2.1.1節に文書化され、データベース記述 (Database Description) パケットの送信は第4.2.1.2節に文書化されています。リンク状態更新 (Link State Update) パケットの送信は第4.5.2節に文書化されています。

4.2.1.1. Sending Hello Packets (Helloパケットの送信)

IPv6は、OSPFHelloパケットの送信方法を次のように変更します ([OSPFV2] の第9.5節と比較):

  • Helloパケットがインターフェース上で送信される前に、インターフェースのインターフェースIDをHelloパケットにコピーする必要があります。

  • IPv6のOSPFはサブネット単位ではなくリンク単位で実行されるため、HelloパケットにはもはやIPネットワークマスクが含まれていません。

  • 指定ルータ (Designated Router) およびバックアップ指定ルータ (Backup Designated Router) の選択は、IPインターフェースアドレスではなく、ルータIDによってHello内で示されるようになりました。指定ルータ (またはバックアップ指定ルータ) を0.0.0.0としてアドバタイズすることは、指定ルータ (またはバックアップ指定ルータ) がまだ選択されていないことを示します。

  • Helloパケット内のオプション (Options) フィールドは移動し、その過程で大きくなりました。より多くのオプションビットが可能になりました。Helloパケットで正しく設定する必要があるものは次のとおりです。Eビットは、インターフェースが通常のエリア (つまり、スタブまたはNSSAエリアではない) に接続している場合にのみ設定されます。同様に、Nビットは、インターフェースがNSSAエリアに接続している場合にのみ設定されます ([NSSA] を参照)。最後に、DCビットは、ルータがインターフェース上での将来のHelloの送信を抑制したい場合にのみ設定されます ([DEMAND] を参照)。Helloパケットのオプションフィールドの認識されないビットはクリアする必要があります。

NBMAネットワーク上でのHelloパケットの送信は、IPv6の場合、[OSPFV2] の第9.5.1節に文書化されているIPv4とまったく同じ方法で進行します。

4.2.1.2. Sending Database Description Packets (データベース記述パケットの送信)

データベース記述パケットの送信は、[OSPFV2] の第10.8節と次の点で異なります:

  • データベース記述パケット内のオプション (Options) フィールドは移動し、その過程で大きくなりました。より多くのオプションビットが可能になりました。データベース記述パケットで正しく設定する必要があるものは次のとおりです。DCビットは、ルータがインターフェース上でのHelloの送信を抑制したい場合にのみ設定されます ([DEMAND] を参照)。データベース記述パケットのオプションフィールドの認識されないビットはクリアする必要があります。

4.2.2. Receiving Protocol Packets (プロトコルパケットの受信)

ルータがOSPFプロトコルパケットを受信すると、それが受信されたインターフェースでマークされます。仮想リンクが設定されているルータの場合、どのインターフェースにパケットを関連付けるかがすぐには明らかでない場合があります。たとえば、[OSPFV2] の図6に描かれているルータRT11を考えてみます。RT11がネットワークN8へのインターフェース上でOSPFプロトコルパケットを受信した場合、エリア2へのインターフェースまたはルータRT10への仮想リンク (これはバックボーンの一部です) にパケットを関連付けたい場合があります。以下では、パケットは最初に非仮想リンクに関連付けられていると仮定します。

パケットをOSPFに処理のために渡すには、カプセル化するIPv6ヘッダーに対して次のテストを実行する必要があります:

  • パケットのIP宛先アドレスは、受信インターフェースに関連付けられたIPv6ユニキャストアドレスの1つ (これにはリンクローカルアドレスが含まれます)、IPv6マルチキャストアドレスAllSPFRoutersまたはAllDRoutersの1つ、またはIPv6グローバルアドレス (仮想リンクの場合) である必要があります。

  • 直接カプセル化するIPv6ヘッダーの次ヘッダー (Next Header) フィールドは、OSPFプロトコル (89) を指定する必要があります。

  • カプセル化するIP認証ヘッダー ([IPAUTH] を参照) およびIPカプセル化セキュリティペイロード ([IPESP] を参照) は、OSPFルーティング交換の整合性および認証/機密性を保証するために処理および/または検証される必要があります。これは [OSPFV3-AUTH] で説明されています。

カプセル化するIPv6ヘッダーを処理した後、OSPFパケットヘッダーが処理されます。ヘッダーで指定されたフィールドは、受信OSPFv3インターフェースに設定されたフィールドと一致する必要があります。一致しない場合、パケットは破棄されるべきです:

  • バージョン番号 (Version Number) フィールドは、プロトコルバージョン3を指定する必要があります。

  • OSPFパケット全体と前置されたIPv6擬似ヘッダーをカバーする、IPv6上位層チェックサム ([IPV6] の第8.1節で説明されているとおり) を検証する必要があります (付録A.3.1を参照)。

  • OSPFヘッダーにあるエリアID (Area ID) およびインスタンスID (Instance ID) を検証する必要があります。以下の2つのケースの両方が失敗した場合、パケットは破棄されるべきです。ヘッダーで指定されたエリアIDおよびインスタンスIDは、次のいずれかである必要があります:

    1. 受信リンクのエリアIDおよびインターフェースインスタンスIDの1つと一致します。IPv4とは異なり、IPv6送信元アドレスは、受信リンクと同じIPv6サブネット内にある必要はありません。IPv6 OSPFは、IPサブネット単位ではなくリンク単位で実行されます。

    2. バックボーンエリアおよび設定された仮想リンクの他の基準と一致します。受信ルータはABR (エリア境界ルータ) である必要があり、パケットで指定されたルータID (送信元ルータ) は、設定された仮想リンクの他端である必要があります。さらに、受信リンクには、仮想リンクの設定されたトランジットエリアに接続するOSPFv3インターフェースが必要であり、インスタンスIDは仮想リンクのインスタンスIDと一致する必要があります。これらのチェックがすべて成功した場合、パケットは受け入れられ、仮想リンク (およびバックボーンエリア) に関連付けられます。

  • ローカルで発信されたパケットは、第4.9節で説明されている同じリンクに接続された複数のインターフェースのサポートを除き、OSPFによって処理されるべきではありません。ローカルで発信されたパケットは、ルータのローカルアドレスの1つと等しい送信元アドレスを持っています。

  • IPv6宛先がAllDRoutersであるパケットは、受信OSPFv3インターフェースの状態がDRまたはバックアップである場合にのみ受け入れられるべきです ([OSPFV2] の第9.1節を参照)。

ヘッダー処理の後、パケットはそのOSPFパケットタイプに応じてさらに処理されます。OSPFパケットタイプと機能は、IPv4とIPv6の両方で同じです。

パケットタイプがHelloの場合、第4.2.2.1節で説明されているHelloパケット処理によってさらに処理される必要があります。他のすべてのパケットタイプは、隣接性上でのみ送受信されます。これは、パケットがルータのアクティブなネイバーの1つによって送信されたことを意味します。ネイバーは、受信したパケットのOSPFヘッダーに表示されるルータIDによって識別されます。アクティブなネイバーと一致しないパケットは破棄されます。

データベース記述パケット、リンク状態要求パケット、およびリンク状態確認応答パケットの受信処理は、[OSPFV2] の第10.6、10.7、および13.7節にそれぞれ文書化されているIPv4手順とほぼ同じですが、以下に記載されている例外があります。

  • 許容可能なフラッディングスコープを持つデータベース記述パケット内の未知のLSタイプを持つLSAは、既知のLSタイプを持つLSAと同じように処理されます。OSPFv2 [OSPFV2] では、これらはSequenceMismatchイベントで隣接性を停止させる結果になります。

Helloパケットの受信は第4.2.2.1節に文書化され、リンク状態更新パケットの受信は第4.5.1節に文書化されています。

4.2.2.1. Receiving Hello Packets (Helloパケットの受信)

Helloパケットの受信処理は、[OSPFV2] の第10.5節と次の点で異なります:

  • すべてのリンクタイプ (例: ブロードキャスト、NBMA、ポイントツーポイントなど) で、ネイバーはそのOSPFルータIDのみによって識別されます。仮想リンクを除くすべてのリンクタイプについて、ネイバーIPアドレスは、受信したOSPF HelloパケットのIPv6ヘッダー内のIPv6送信元アドレスに設定されます。

  • Helloパケットにはもはやネットワークマスク (Network Mask) フィールドがありません。

  • 指定ルータおよびバックアップ指定ルータに対するネイバーの選択は、IPインターフェースアドレスではなく、OSPFルータIDとしてエンコードされるようになりました。