0

私の理解では、イーサネット NIC はその MAC アドレスを「認識」しています。パケットがワイヤに到着すると、NIC は宛先 MAC がその MAC と一致するかどうかを確認し、一致する場合は、パケットをネットワーク スタックに転送します。これにより、ネットワーク上に到着するすべてのパケットを検査するオペレーティング システムが軽減されます。

どの OS ドライバー関数がこれをサポートしているか知りたいです。私はNDIS 5.1リファレンスを見てきましたが、これを見つけました:http://msdn.microsoft.com/en-us/library/windows/hardware/ff557131%28v=vs.85%29.aspxと思います私は近いですが、まだ大当たりしていません。

クラスの教材を準備していて、NIC が MAC アドレスを知っていることをクラスに伝えたいのですが、それが正しいことを自分で確認できない限り、それを教えたくありません。これをサポートする OS ドライバー機能を見れば、私の疑問は解消されます。

コミュニティが提供できるヘルプ (およびコメント) に感謝します。

4

2 に答える 2

1

パケットフィルタリング

あなたの理解は正しいです。NIC はハードウェアでかなりの量のフィルタリングを行い、過度のフィルタリングから CPU を保護します。通常、一般的なイーサネット NIC には、次のような特定の基準を満たす場合にのみパケットを許可するプログラム可能なパケット フィルターがあります。

  • 宛先 MAC アドレスは、プログラム可能な宛先アドレスのセットの 1 つと一致します (通常、独自のユニキャスト アドレスといくつかのマルチキャスト アドレスをターゲット セットに入れます)。
  • 宛先アドレスはブロードキャスト アドレスです (イーサネットの場合は ですff-ff-ff-ff-ff-ff)。
  • 宛先アドレスは任意のマルチキャスト アドレスです (イーサネットの場合、最初のバイトに LSB が設定されます)。

通常の操作では、Windows は、NIC のユニキャスト アドレス、ブロードキャスト アドレス、および一部のマルチキャスト アドレス (IPv6 近隣探索や UPnP など) 宛てのトラフィックを受け入れるように NIC をプログラムします。

ハードウェア パケット フィルタの唯一の目的は、ホストの CPU 使用率を減らすことです。Windows は、機能の正しさをハードウェア パケット フィルターに依存しません。動作の悪い NIC が常にすべてのパケットがフィルター処理されていないことを示す場合、Windows は自動的にソフトウェアのフィルター処理に戻ります。

パケット フィルタの更新

Windows は、ハードウェア上のパケット フィルターを変更する場合があります。たとえば、Netmon または Wireshark を実行して「無差別モード」を有効にすると、宛先が非ローカル ユニキャスト アドレスであっても、NDIS は NIC にすべてのトラフィックを示すように指示します。

興味深いラボ実験が必要な場合は、PowerShell を開き、次のコマンドを実行して現在のパケット フィルターを照会します。

Get-WmiObject -Namespace root\wmi -Class MSNdis_CurrentPacketFilter |
    Format-List InstanceName, NdisCurrentPacketFilter

それを別のコマンドにパイプして、出力を読みやすくすることができます。

    % { @{ $_.InstanceName = "{0:X8}" -f $_.NdisCurrentPacketFilter } }

NDIS_PACKET_TYPE_XXXパケット フィルターは、SDK/WDK ヘッダー ファイル ntddndis.hの定数のビットマスクである整数として表されます。ここで、Netmon または Wireshark で無差別モードを有効にすると、パケット フィルターが変更され、NDIS_PACKET_TYPE_PROMISCUOUSフラグ (0x20) が含まれるようになります。Netmon または Wireshark を無効にすると、既存のパケット フィルターが復元されます。

その他のフィルタリング タイプ

ほぼすべてのイーサネット NIC がサポートする、最も基本的なレベルのパケット フィルタリングについて説明しました。(Microsoft は、"Device.Network.LAN.Base.PacketFiltering" ロゴ要件でこの最小限のサポート レベルを要求しています。) より洗練されたハードウェアは、優れた機能を実行できます。

たとえば、複数の受信キューをサポートするハードウェアには、複数の受信フィルターがあります。NIC は、ハイパーバイザーが仮想化されたゲスト オペレーティング システムにトラフィックを分散しやすくするために、個別の CPU で各フィルターに個別に一致するパケットを示します。

免責事項

あなたの質問は、OS X と Windows テクノロジである NDIS の両方に言及しています。私は Microsoft で働いているので、私の発言は NDIS と Windows にのみ適用されます。

于 2013-08-24T18:17:08.383 に答える