パケット結合の概要
特定の IP バージョン 4 (IPv4) および IP バージョン 6 (IPv6) ネットワーク プロトコルには、ブロードキャスト アドレスまたはマルチキャスト アドレスへのパケットの送信が含まれます。 これらのパケットは、IPv4/IPv6 サブネット内の複数のホストによって受信されます。 ほとんどの場合、これらのパケットを受信するホストはこれらのパケットを処理しません。 したがって、これらの不要なマルチキャストまたはブロードキャスト パケットを受信すると、受信ホスト内で不要な処理と電力消費が発生します。
たとえば、ホスト A は、ホスト B の名前を解決するために、IPv6 サブネットにマルチキャスト リンクローカル マルチキャスト名前解決 (LLMNR) 要求を送信します。 ホスト A を除き、この LLMNR 要求はサブネット上のすべてのホストによって受信されます。 ホスト B を除き、他のホストで実行される TCP/IP プロトコル スタックはパケットを検査し、そのパケットが目的とされていないと判断します。 そのため、プロトコル スタックはパケットを拒否し、NdisReturnNetBufferLists を呼び出してパケットをミニポート ドライバーに返します。
NDIS 6.30 以降では、ネットワーク アダプターは NDIS パケット結合をサポートできます。 ランダム ブロードキャストまたはマルチキャスト パケットの結合によって受信割り込みの数を減らすことで、システムの処理オーバーヘッドと電力消費量が大幅に削減されます。
パケット結合には、次の手順が含まれます。
TCP/IP プロトコル スタックなど、上にあるドライバーは、ブロードキャストおよびマルチキャスト パケットのスクリーンに使用される NDIS 受信フィルターを定義します。 上にあるドライバーは、パケット結合をサポートする基になるミニポート ドライバーにこれらのフィルターをダウンロードします。 ダウンロード後、ミニポート ドライバーは、パケット結合受信フィルターを使用してネットワーク アダプターを構成します。
これらのフィルターの詳細については、「パケット結合受信フィルター」を参照してください。
受信フィルターに一致する受信パケットは、ネットワーク アダプターでキャッシュまたは 結合されます。 アダプターは、結合されたパケットの受信割り込みを生成しません。 代わりに、アダプターは、別のハードウェア イベントが発生したときにホストを中断します。
この割り込みが生成されると、アダプターは割り込みを伴う受信イベントを示す必要があります。 これにより、ネットワーク アダプターは、ネットワーク アダプターによって受信された結合パケットを処理できます。
たとえば、パケット結合をサポートするネットワーク アダプターは、次のいずれかのイベントが発生したときに受信割り込みを生成できます。
一致する受信フィルターの最大結合遅延値に有効期限が設定されているハードウェア タイマーの有効期限。
ハードウェア結合バッファー内の使用可能な領域は、アダプター指定の低ウォーター マークに達します。
結合フィルターと一致しないパケットが受信されます。
送信完了イベントなどの別の割り込みイベントが発生しました。
このプロセスの詳細については、「パケット結合受信フィルターの処理」を参照してください。
NDIS によるパケット結合のサポートには、次の点が適用されます。
NDIS は、物理ネットワーク アダプターに割り当てられている既定の NDIS ポート (ポート 0) で受信したパケットのパケット結合をサポートします。 NDIS は、仮想ネットワーク アダプターに割り当てられている NDIS ポートでのパケット結合をサポートしていません。 詳細については、「NDIS ポート」を参照してください。
NDIS は、ネットワーク アダプターの既定の受信キューで受信したパケットのパケット結合をサポートします。 この受信キューには、NDIS_DEFAULT_RECEIVE_QUEUE_IDの識別子があります。