拡張可能スイッチ データ パス経由のパケット フロー

このトピックでは、Hyper-V 拡張可能スイッチのデータ パスを介して拡張可能スイッチ ポート間のパケットの移動方法について説明します。

注: 拡張可能スイッチ インターフェイスで、NDIS フィルター ドライバーは 拡張可能スイッチ拡張機能 と呼ばれ、ドライバー スタックは 拡張可能スイッチ ドライバー スタック と呼ばれます。 拡張機能の詳細については、「Hyper-V 拡張可能スイッチ拡張機能」を参照してください。

注: このページは、 Hyper-V 拡張可能スイッチの概要ハイブリッド転送 に関する情報を理解していることを前提とします。

そのポートから拡張可能スイッチに到着するすべてのパケット トラフィックは、拡張可能スイッチ ドライバー スタックを経由して同じパスを進みます。 たとえば、外部ネットワーク アダプター接続から受信したパケット トラフィックや、仮想マシン (VM) ネットワーク アダプター接続から送信されたパケット トラフィックは、同じデータ パスを通過します。

次の図は、NDIS 6.40 (Windows Server 2012 R2) 以降の拡張可能スイッチのデータ パスを示しています。

Diagram showing Hyper-V extensible switch architecture for NDIS 6.40 and later versions.

次の図は、NDIS 6.30 (Windows Server 2012) の拡張可能スイッチのデータ パスを示しています。

Diagram showing Hyper-V extensible switch architecture for NDIS 6.30.

拡張可能スイッチ インターフェイスのコンポーネントの詳細については、「Hyper-V 拡張可能スイッチ アーキテクチャ」を参照してください。

拡張可能スイッチのデータ パスには、パケットがそれらのパスを通過する順序で一覧表示される次の部分があります。

上にあるプロトコル エッジ

  1. パケットは、スイッチ ポートに接続されているネットワーク アダプターから拡張可能スイッチに到着します。 これらのパケットは、まず、拡張可能スイッチのプロトコル エッジから拡張可能スイッチのイングレス データ パスまでの送信要求として発行されます。

    拡張可能スイッチのプロトコル エッジは、イングレス データ パスのパケットを準備します。 プロトコル エッジは、帯域外 (OOB) 拡張可能スイッチ転送コンテキストを含むこれらのパケットにコンテキスト領域を割り当てます。 OOB データに、パケットが拡張可能スイッチに配信されたソース ポートとネットワーク アダプター接続に関する情報が設定されます。

    転送コンテキストの詳細については、「Hyper-V 拡張可能スイッチ転送コンテキスト」を参照してください。

  2. NDIS 6.40 (Windows Server 2012 R2) 以降では、パケットが外部ネットワーク アダプターからの NVGRE パケットである場合、拡張可能スイッチは、パケットの帯域外 (OOB) 情報に NativeForwardingRequired フラグを設定します。 詳細については、「ハイブリッド転送」を参照してください。

  3. トラフィックに仮想サブネットがあるポートにパケットが到着した場合、拡張可能スイッチはそのパケットの NDIS_NET_BUFFER_LIST_VIRTUAL_SUBNET_INFO 構造体の VirtualSubnetId メンバーを設定します。

    注: 仮想サブネットは、HNV サブネットまたはサード パーティの仮想サブネットである可能性があります。

イングレス データ パス

  1. 拡張機能は、FilterSendNetBufferLists 関数が呼び出されたときに、イングレス データ パスからパケットを取得します。 拡張機能は、NdisFSendNetBufferLists を呼び出すことによって、イングレス データ パス上の基になる拡張機能にパケットを転送します。 拡張機能のフィルター処理と転送は、NdisFSendNetBufferListsComplete を呼び出すことによって、イングレス データ パスからパケットをドロップすることもできます。

  2. キャプチャ拡張機能でイングレス データ パス上のパケットを取得すると、パケット データを検査できます。 ただし、キャプチャ拡張機能は、イングレス データ パス上のパケットの送信要求を完了してはなりません。 これらの拡張機能は、拡張可能スイッチ ドライバー スタック内の基になる拡張機能に常にパケットを転送する必要があります。

    キャプチャ拡張機能は、イングレス データ パス上のパケットを発信することもできます。 たとえば、この拡張機能は、トラフィックの状態をリモート監視アプリケーションに報告するためにパケットを発信する場合があります。

    拡張機能による発信パケットの詳細については、「発信パケット トラフィック」を参照してください。

  3. フィルター処理拡張機能がイングレス データ パスのパケットを取得する場合、次の操作を実行できます。

    • カスタム拡張可能スイッチまたはポート ポリシーに基づいてパケットをドロップします。

      これらのポリシーの詳細については、「Hyper-V 拡張機能スイッチ ポリシー」を参照してください。

      注: イングレス データ パスで取得されたパケットには、パケットの OOB データで定義されている宛先ポートがありません。 その結果、フィルター処理拡張機能では、パケット データまたはパケットのソース ポートまたはネットワーク アダプター接続に基づいてカスタム ポリシーのみを適用する必要があります。

  • イングレス データ パスから取得したパケットを複製または変更します。

  • イングレス データ パスに新しいパケットを挿入します。

  1. NDIS 6.40 以降では、キャプチャとフィルター処理の拡張機能の後、イングレス データ パスの転送拡張機能の前に、拡張可能スイッチは次の処理を行います。

    • パケットが外部ネットワーク アダプターからの NVGRE パケットの場合、パケット ヘッダー内のアドレスはプロバイダー アドレス (PA) 空間アドレスです。 拡張可能スイッチは、パケットの帯域外 (OOB) 情報で NativeForwardingRequired フラグを設定することによってこれを示します。 詳細については、「ハイブリッド転送」を参照してください。

    • 拡張可能スイッチは、組み込みのイングレス ポリシーをパケットに適用します。 これらのポリシーには、イングレス アクセス制御リスト (ACL)、DHCP ガード、ルーター ガードが含まれる場合があります。

  2. 拡張可能スイッチ ドライバー スタックで転送拡張機能が有効になっていない場合、パケットの宛先ポート配列は拡張可能スイッチによって決定されます。

  3. 転送拡張機能が有効になっている場合は、イングレス データ パスでパケットを取得するときに、次の操作を行う必要があります。

    • NDIS 6.40 以降では、パケットが NVGRE パケットの場合 (ハイブリッド転送を参照)、転送拡張機能は、イングレス データ パス内のパケットの OOB データ内の宛先ポート配列を変更できません。 ただし、パケットを破棄できます。

    • パケットが NVGRE パケットでない場合、転送拡張機能はパケットの OOB データの宛先ポート 配列に宛先ポートを追加する必要があります。

    • 転送拡張機能では、標準またはカスタムの拡張可能スイッチまたはポート ポリシーに基づいてパケットを破棄する必要があります。 標準のスイッチまたはポート ポリシーには、セキュリティと仮想 LAN (VLAN) のプロパティが含まれます。 拡張可能スイッチ ドライバー スタックで転送拡張機能が有効になっていない場合、これらのポリシーは拡張可能スイッチによって適用されます。

      注: 転送拡張機能は、イングレス データ パス内のパケットをフィルター処理するときに、拡張機能がパケットに割り当てる送信元ポートと宛先ポートに基づいてフィルター処理規則を適用します。

さらに、転送拡張機能では、次の操作を行うことができます。

  • イングレス データ パスから取得したパケットを複製または変更します。

  • イングレス データ パスに新しいパケットを挿入します。

基になるミニポート エッジ

  1. パケットが拡張可能スイッチの基になるミニポート エッジに到着すると、拡張可能スイッチは、その組み込みのポリシーをパケットに適用します。 これらのポリシーには、アクセス制御リスト (ACL) とサービス品質 (QoS) プロパティが含まれます。 これらのポリシーが原因でパケットが破棄されない場合、拡張可能スイッチはパケットの受信指示を発信し、パケットをエグレス データ パスに転送します。

    注: パケットが配信されるポートでポート ミラーが有効になっている場合、ミニポート エッジは、ミラー ポートのパケットの OOB データに宛先ポートを追加します。 ミニポート エッジは、転送拡張機能がインストールされ、拡張可能スイッチ ドライバー スタックで有効になっているかどうかに関係なくこれを行います。 ミニポート エッジは、パケットの宛先ポートの配列でまだ指定されていない場合にのみ、ミラー ポートを追加します。

  2. 転送拡張機能が有効になっていない場合、拡張可能スイッチはパケットの宛先ポートを決定し、これらの宛先ポートをパケットの OOB データに追加してから、パケットをエグレス データ パスに転送します。

  3. NDIS 6.40 以降では、HNV コンポーネントは、イングレス後とエグレス前に必要な NVGRE カプセル化またはカプセル化解除を実行し、転送拡張機能がカプセル化およびカプセル化解除された形式でパケットを確認できるようにします。 たとえば、パケットが外部ネットワーク アダプターから到着し、内部 VM 宛ての場合、転送拡張機能はイングレスでカプセル化されたパケットを取得し、エグレスではカプセル化解除されたパケットを取得します。

    注: カプセル化されたパケットでは、パケット ヘッダー内のアドレスはプロバイダー アドレス (PA) 空間アドレスです。 カプセル化解除されたパケットでは、顧客アドレス (CA) 空間アドレスです。

    1. パケットが外部ネットワーク アダプターから到着した NVGRE パケットの場合、拡張可能スイッチの Hyper-V ネットワーク仮想化 (HNV) コンポーネントは、パケットに対して NVGRE カプセル化解除を実行します。 HNV コンポーネントは、HNV ポリシーに従ってパケットの宛先を決定し、拡張可能スイッチはパケットをエグレス データ パスに転送します。

    2. パケットが内部 VM から到着した場合、HNV ポリシーがパケットに設定されている場合、HNV コンポーネントはパケットに対して NVGRE カプセル化を実行します。 HNV コンポーネントは、HNV ポリシーに従ってパケットの宛先を決定し、拡張可能スイッチはパケットをエグレス データ パスに転送します。

    3. それ以外の場合、転送拡張機能はパケットをエグレス データ パスの上に転送します。

  4. NDIS 6.30 では、転送拡張機能が有効になっている場合は、パケットをエグレス データ パスに転送する必要があります。

エグレス データ パス

  1. 拡張機能は、FilterReceiveNetBufferLists 関数が呼び出されたときに 、出力データ パスからパケットを取得します。 拡張機能は、NdisFIndicateReceiveNetBufferLists を呼び出すことによって、エグレス データ パスの上にある拡張機能にパケットを転送します。 フィルター処理と転送の拡張機能は、NdisFReturnNetBufferLists を呼び出すことによって、エグレス データ パスからパケットを破棄することもできます。

  2. 転送拡張機能は、エグレス データ パスでパケットを取得するときに、OOB データ内のパケットの宛先ポート情報を検査することができます。

    注: 拡張機能は、GetNetBufferListDestinations を呼び出すことによって OOB データからこの情報を取得します。

標準またはカスタムのスイッチまたはポート ポリシーに基づいて、拡張機能は OOB データに含まれる 1 つ以上の宛先ポートへのパケットの配信を除外できます。

  1. NDIS 6.40 (Windows Server 2012 R2) 以降では、転送拡張機能の後、エグレス データ パスでのフィルター処理とキャプチャ拡張機能の前に、拡張可能スイッチは組み込みのエグレス ポリシーをパケットに適用します。 これらのポリシーには、トランク モード、監視モード、エグレス ACL、サービス品質 (QoS) プロパティが含まれる場合があります。

  2. フィルター処理拡張機能は、エグレス データ パスでパケットを取得するときに、OOB データ内のパケットの宛先ポート情報を検査できます。 カスタムのスイッチまたはポート ポリシーに基づいて、拡張機能は OOB データに含まれる 1 つ以上の宛先ポートへのパケットの配信を除外できます。

    フィルター処理拡張機能がパケット内のデータを変更する必要がある場合は、まずポート宛先を保持せずにパケットを複製する必要があります。 その後、拡張機能は、変更されたパケットをイングレス データ パスに挿入する必要があります。 これにより、基になる拡張機能は変更されたパケットにポリシーを適用でき、転送拡張機能はポート宛先を追加できます。

    詳細については、「パケット トラフィックの複製」を参照してください。

  3. キャプチャ拡張機能でエグレス データ パス上のパケットを取得すると、パケット データを検査できます。 ただし、キャプチャ拡張機能がトラフィック状態をリモート監視アプリケーションに報告するためにパケットを発信する必要がある場合は、NdisFSendNetBufferLists を呼び出してイングレス データ パスに対する送信操作を開始することで、このパケット トラフィックを発信する必要があります。

  4. パケットが拡張可能スイッチの上にあるプロトコル エッジに到着すると、拡張可能スイッチ インターフェイスは、指定されたすべての宛先ポートにパケットを転送します。

  5. パケットが転送されると、インターフェイスは逆に同じパスを介してパケットを完了します。 最初に、インターフェイスは拡張機能の FilterReturnNetBufferLists 関数を呼び出して、エグレス データ パスで転送されたパケットを完了します。 次に、インターフェイスは拡張機能の FilterSendNetBufferListsComplete 関数を呼び出して、イングレス データ パスで転送されたパケットを完了します。

    エグレス データ パスとイングレス データ パスの両方でパケットが完了すると、拡張機能は必要なパケット クリーンアップと後処理を実行します。