ネットワークドライバインターフェイス仕様(NDIS)は、ネットワークインターフェイスコントローラ(NIC)用のアプリケーションプログラミングインターフェイス(API)です。
これはマイクロソフトと3Com Corporationが共同開発したもので、主にMicrosoft Windowsで使用されています。しかし、オープンソースのNDISwrapperおよびProject Evilドライバラッパープロジェクトにより、多くのNDIS準拠NICをLinux、FreeBSD、NetBSDで使用できるようになりました。BeOS の派生OSであるmagnussoft ZETAは、多数のNDISドライバをサポートしています。
NDISは、 OSI参照モデルのデータリンク層(レイヤ2)の上位サブレイヤである論理リンク制御(LLC)サブレイヤを構成します。したがって、NDISは、データリンク層の下位サブレイヤであるメディアアクセス制御(MAC)サブレイヤとネットワーク層(レイヤ3)との間のインターフェースとして機能します。
NDISは、NICハードウェアの複雑な内部構造を隠蔽し、レベル3ネットワークプロトコルドライバおよびハードウェアレベルのMACドライバのための標準インターフェースとして機能する、いわゆる「ラッパー」と呼ばれる関数ライブラリです。
さまざまな Windows バージョンでサポートされている NDIS バージョンは次のとおりです。[ 1 ]
NIC が受け入れるトラフィックは NDISミニポートドライバ[ 17 ]によって制御され、 TCP/IPなどのさまざまなプロトコルは NDIS プロトコル ドライバ[ 18 ]によって実装されます。1 つのミニポートは、 1 つ以上のプロトコルに関連付けられる場合があります。 これは、ミニポートに入ってくるトラフィックが複数のプロトコル ドライバによって並行して受信される可能性があることを意味します。たとえば、Winpcap は、受信パケットをキャプチャするために、選択されたミニポートに 2 番目のプロトコル ドライバを追加します。 さらに、単一の物理 NIC からトラフィックを送受信する仮想ミニポート ドライバを実装することで、複数の仮想 NIC をシミュレートできます。 仮想ミニポート ドライバの使用例の 1 つは、それぞれ異なるVLANを持つ仮想 NIC を追加することです。 実装では、他のドライバが同じバッファを受信したと想定できないため、受信バッファを読み取り専用として扱い、パケットの内容を変更するドライバは独自のバッファを割り当てる必要があります。 NDIS ミニポート ドライバは、Windows ドライバ モデルインターフェイスを使用してネットワーク ハードウェアを制御することもできます。[ 19 ]
もう1つのドライバの種類は、NDIS中間ドライバです。中間ドライバはMAC層とIP層の間に位置し、NICが受け入れるすべてのトラフィックを制御できます。実際には、中間ドライバはミニポートインターフェイスとプロトコルインターフェイスの両方を実装します。ミニポートドライバとプロトコルドライバは、中間ドライバに存在する対応するミニポートインターフェイスとプロトコルインターフェイスと実際に通信します。この設計により、ミニポートドライバとプロトコルドライバの間に複数の中間ドライバを連結して追加できます。そのため、ドライバベンダーは、トラフィックを送信するインターフェイスがチェーン内の最後のドライバによって実装されていると想定することはできません。NDISを使用してアプリケーションを作成するには、MicrosoftのWindowsドライバキット(WDK)に付属するサンプルを使用できます。「PassThru」サンプルは、このドライバタイプに必要なすべての詳細を実装し、トラフィックをチェーン内の次のドライバに渡すだけなので、中間ドライバの出発点として最適です。
NDIS 4.1 ではWDM機能が実装されています。NDIS 5.0 では TCP/IP オフロード機能が実装されています。[ 20 ]
Windows 10 バージョン 2004 以降、ネットワーク アダプタ用の新しいドライバ フレームワークである Network Adapter WDF Class Extension ( NetAdapterCx ) が作成され、ドライバ開発プロセスを簡素化することを目的としています。[ 21 ] Windows 11 では WiFiCx フレームワークが導入されました。