ハイブリッド転送
NDIS 6.40 (Windows Server 2012 R2) 以降、Hyper-V 拡張可能スイッチ アーキテクチャでは、拡張可能スイッチの Hyper-V ネットワーク仮想化 (HNV) コンポーネントによるハイブリッド転送と拡張機能の転送がサポートされています。
注: このページでは、汎用ルーティング カプセル化 (NVGRE) タスク オフロード と Hyper-V 拡張可能スイッチの概要 を使用したネットワーク仮想化について理解していることを前提としています。
NVGRE パケットと NVGRE 以外のパケット
ハイブリッド転送環境では、Hyper-V 拡張可能スイッチに出入りするパケットには、NVGRE パケットと非 NVGRE パケットの 2 種類があります。
- NVGRE パケットは、汎用ルーティング カプセル化インターネット ドラフトを使用した NVGRE: ネットワーク仮想化 で指定されているカプセル化された形式があります。 NVGRE パケットは、Hyper-V 拡張可能スイッチの HNV コンポーネントによって転送されます。
- NVGRE 以外のパケットは、通常のネットワーク パケットにすぎません。 NVGRE 以外のパケットは、転送拡張機能によって転送されます (または、転送拡張機能がない場合は、拡張可能スイッチ自体)。
スイッチを介した NVGRE および NVGRE 以外のパケットのフロー
イングレス データ パスでは、キャプチャとフィルター処理の拡張機能の後、転送拡張機能の前に、パケットが NVGRE パケットの場合、拡張可能スイッチは、パケットの NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 構造体に NativeForwardingRequired フラグを設定します。 この構造体は、パケットの NET_BUFFER_LIST 構造体の NetBufferListInfo メンバーに含まれています。
注:NET_BUFFER_LIST の NetBufferListInfo メンバーは、パケットの "帯域外 (OOB) データ" と呼ばれることがよくあります。
NativeForwardingRequired フラグがパケットの OOB データに設定されている場合、パケットは NVGRE パケットです。 設定されていない場合、パケットは NVGRE 以外のパケットです。
拡張機能では、 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL マクロを使用して NativeForwardingRequired フラグの値をチェックする必要があります。
NVGRE パケットと非 NVGRE パケットは、次のように扱われます。
- Hyper-V 拡張可能スイッチの HNV コンポーネントは、すべての NVGRE パケットを転送 (つまり、宛先テーブルを決定します)
- HNV コンポーネントは、必要に応じて NVGRE カプセル化とカプセル化解除を実行します。
- 転送拡張機能は、NVGRE 以外のすべてのパケットを転送します。
- 転送拡張機能は NVGRE パケットを転送できませんが、宛先ポートの追加や除外、パケットのドロップなど、フィルター拡張機能と同じフィルター処理アクションを実行できます。
- 転送拡張機能がない場合、Hyper-V 拡張可能スイッチはすべてのパケットを転送します。
詳細については、 拡張可能スイッチのデータパスを通るパケットフローを参照してください 。
サード パーティのネットワーク仮想化のサポート
VirtualSubnetId は、VM ネットワーク アダプター ポートで外部仮想サブネットとして構成できます。 この機能は、サードパーティのネットワーク仮想化ソリューションを提供する転送拡張機能を有効にするために追加されました。 イングレスでは、Hyper-V 拡張可能スイッチは、これらのパケットの NET_BUFFER_LIST 構造で NativeForwardingRequired フラグを設定しません。 転送拡張機能は、必要に応じて、転送中にパケット ヘッダーを変更できます。 変更するパケットは複製し、 ParentNetBufferList ポインターを元の NET_BUFFER_LIST に設定する必要があります。 (パケット トラフィックのクローニングを参照してください。)