Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
NDIS (Network Driver Interface Specification)
Спецификация интерфейса сетевого драйвера (в англоязычной среде NDIS — англ. Network Driver Interface Specification) [1] – это интерфейс прикладного программирования (API) для сетевых интерфейсных плат (NIC).
Он был совместно разработан Microsoft и 3Com Corporation и в основном используется в Microsoft Windows. Однако проекты оболочки NDISwrapper с открытым исходным кодом и Project Evil с открытым исходным кодом позволяют использовать многие совместимые с NDIS сетевые адаптеры для Linux, FreeBSD и NetBSD, а Magnussoft ZETA, производная от BeOS, поддерживает несколько драйверов NDIS.
NDIS формирует подуровень управления логическим каналом (LLC), который является верхним подуровнем уровня канала передачи данных OSI (уровень 2). Таким образом, NDIS выступает в качестве интерфейса между подуровнем управления доступом к среде передачи (MAC), который является нижним подуровнем уровня канала передачи данных, и сетевым уровнем (уровень 3).
NDIS представляет собой библиотеку функций, часто называемую «оболочкой», которая скрывает базовую сложность аппаратного обеспечения NIC и служит стандартным интерфейсом для драйверов сетевого уровня 3 и драйверов MAC уровня оборудования. Другим распространенным LLC является Open Data-Link Interface (ODI).
Содержание
Версии
Список версий NDIS, поддерживаемых различными версиями Windows, выглядит следующим образом:
Сетевые драйверы
NDIS-драйверы бывают трёх типов [2] :
- Минипорт-драйверы
- Промежуточные драйверы
- Драйверы протокола
Минипорт-драйверы
У каждой сетевой железки есть свой минипорт-драйвер. Через NDIS минипорт-драйвер получает некоторые команды. Функции минипорт-драйвера можно описать следующим образом:
- производит инициализацию своего устройства (адаптера)
- создание/включение/выключение/удаление сетевых подключений
- выдача клиенту или изменение параметров адаптера
- отправка пакетов
- получение пакетов
- оповещение ОС о состоянии адаптера
- перезагрузка и остановка адаптера
Минипорт-драйвер содержит 22 стандартные callback-функции, с помощью которых он оповещает о различных событиях (некоторые из этих функций могут быть NULL, тогда драйвер о соответствующих событиях не оповещается). NDIS экспортирует около 150 функций для использования минипорт-драйверами.
Минипорт-драйверы бывают «Connectionless» (например, драйвер Ethernet-адаптера) и «Сonnection-oriented» (например, драйвер модема). У Сonnection-oriented драйверов система callback’ов чуть сложнее, в нее входят обработчики событий, связанных с подключением к каналу связи, отключением от канала, выбором канала (для беспроводных адаптеров) и т.п. Для некоторых операций Сonnection-oriented драйверы вызывают специальные функции NDIS, отличающиеся префиксом «Со» в имени (например, вместо NdisMIndicateReceivePacket Сonnection-oriented драйвер должен вызывать NdisMColndicateReceivePacket). Каждый callback выполняет свою задачу: выдача информации, отправка данных, прием данных и т.п. Подробнее можно посмотреть в help’е к WDK (DDK). Там можно получить полную информацию о callback’ах.
Драйверы протоколов могут передоверять минипорт-драйверу (при условии, что минипорт-драйвер это умеет — либо сам, либо адаптер умеет это делать на аппаратном уровне) некоторые свои функции (например, разграничить контрольную сумму или цифровую подпись IP-пакета или принять решение, как фрагментировать большой TCP-пакет). Это значительно повышает производительность сети.
Один минипорт может быть связан с одним или несколькими протоколами. Это означает, что трафик, поступающий в минипорт, может быть принят параллельно несколькими драйверами протоколов. Например, Winpcap добавляет второй драйвер протокола в выбранный минипорт, чтобы захватить входящие пакеты. Кроме того, можно смоделировать несколько виртуальных сетевых адаптеров, реализуя виртуальные драйверы минипорта, которые отправляют и получают трафик от одного физического сетевого адаптера. Одним из примеров использования виртуальных мини-портов является добавление виртуальных сетевых адаптеров, каждый из которых имеет свою виртуальную локальную сеть. Поскольку реализации не могут предположить, что другие драйверы получили одни и те же буферы, необходимо обрабатывать входящие буферы только для чтения, а драйвер, который изменяет содержимое пакета, должен выделять свои собственные буферы.
Промежуточные драйверы
Промежуточные драйверы располагаются между слоями MAC и IP и могут контролировать весь трафик, принимаемый NIC. На практике промежуточные драйверы реализуют как минипорт-драйвер, так и драйвер протокола. Драйвер минипорта и драйвер протокола фактически взаимодействуют с соответствующими минипортами и протокольными интерфейсами, которые находятся в промежуточном драйвере. Эта конструкция позволяет добавлять несколько промежуточных драйверов между драйверами минипорта и протокола. Поэтому поставщики драйверов не могут предположить, что интерфейс, на который они отправляют трафик, реализуется последним драйвером в цепочке. Для написания приложений с использованием NDIS можно использовать образцы, которые входят в комплект Windows Driver Kit (WDK) Microsoft. Образец «PassThru» является хорошей отправной точкой для промежуточных драйверов, поскольку он реализует все необходимые детали, требуемые в этом типе драйверов, но просто передает трафик к следующему драйверу в цепочке.
Драйверы протоколов
Драйверы протокола — это самый верхний уровень спецификации NDIS. Эти драйверы занимаются тем, что выделяют ресурсы для соответствующих пакетов, копируют данные приложений в пакеты и передают их драйверам нижнего уровня. Также драйверы протоколов обеспечивают интерфейс для получения пакетов от нижележащих драйверов. К драйверам протоколов относятся и драйверы транспорта, реализующие стек сетевых протоколов, такой как например TCP/IP.
Navigating the Network Driver Design Guide
Microsoft Windows-based operating systems support several types of kernel-mode network drivers. The Network section of the Windows Driver Kit (WDK) documentation describes how to write these network drivers. This topic briefly describes the supported types of network drivers and explains which sections of the Network section you should read before writing each type of network driver.
This network driver design guide documents the following Network Driver Interface Specification (NDIS) interfaces:
NDIS 6.40, which is supported on WindowsВ 8.1, Windows ServerВ 2012В R2, and later versions of Windows. NDIS 6.30 includes support for Network Direct Kernel Provider Interface (NDKPI) 1.12.
For more information about NDIS 6.30, see Introduction to NDIS 6.40.
NDIS 6.30, which is supported on WindowsВ 8, Windows ServerВ 2012, and later versions of Windows. NDIS 6.30 includes support for single root/I/O virtualization (SR-IOV), Hyper-V extensible switch, Network Direct Kernel Provider Interface (NDKPI) 1.1, and other services.
For more information about NDIS 6.30, see Introduction to NDIS 6.30.
NDIS 6.20, which is supported on WindowsВ 7, Windows ServerВ 2008В R2, and later versions of Windows. NDIS 6.20 includes support for Virtual Machine Queue (VMQ), receive side throttle, and other services.
For more information about NDIS 6.20, see Introduction to NDIS 6.20.
NDIS 6.1, which is supported on WindowsВ Vista with Service PackВ 1 (SP1), Windows ServerВ 2008, and later versions of Windows. NDIS 6.1 includes support for header-data split, direct OID requests, and other services.
For more information about NDIS 6.1, see Introduction to NDIS 6.1.
NDIS 6.0, which is supported on WindowsВ Vista and later versions of Windows. NDIS 6.0 includes support for filter drivers and many additional services that were not provided by earlier NDIS versions. NDIS 6.0 includes major updates to driver initialization and network data management including required support for driver reconfiguration at runtime and the NET_BUFFER architecture for handling network packet data. For more information about supporting runtime reconfiguration, see Driver Stack Management. For more information about how to handle network packet data in NDIS 6.0 see NET_BUFFER Architecture.
For more information about NDIS 6.0, see Introduction to NDIS 6.0.
WindowsВ Vista and later operating system versions support the following types of kernel-mode NDIS-based network drivers:
Miniport Drivers
A miniport driver manages miniport adapters and provides an interface to the adapters for higher-level drivers. A miniport adapter is a conceptual entity that can represent either a physical device or a virtual device. For example, a miniport adapter can represent a network interface card (NIC) or a virtual device that is associated with an intermediate driver.
There are many variations of miniport drivers, such as a connection-oriented miniport call manager (MCM), a Windows Driver Model (WDM) miniport driver, and the upper edge of an intermediate driver.
Protocol Drivers
A protocol driver provides high-level services in a driver stack. A protocol driver binds to underlying miniport adapters. An upper-level protocol driver implements an interface, possibly an application-specific interface, at its upper edge to provide services to users of the network. At its lower edge, a protocol driver provides a protocol interface to pass network data to and receive incoming data from the next-lower driver.
There are many variations of protocol drivers, such as a connection-oriented call manager (MCM), a connection-oriented client, and the lower edge of an intermediate driver.
Filter Drivers
A filter driver filters information on the interface between protocol drivers and miniport drivers. Filter modules are attached in the binding between the protocol driver and the miniport adapter and are generally transparent to the other drivers. Filter drivers can implement modifying or monitoring filters. For example, a filter driver can enhance the services that the underlying miniport adapter provides or simply collect statistics.
Intermediate Drivers
An intermediate driver interfaces between upper-level protocol drivers and miniport drivers. Intermediate drivers provide a miniport driver interface at their upper-edge to bind to overlying protocol drivers. Intermediate drivers provide a protocol driver interface at their lower edge to bind to underlying miniport adapters. Intermediate drivers are typically used to implement n to m multiplexer services. For example, an intermediate driver can implement load balance and failover solutions.
Intermediate drivers can also manage hardware when they are configured as a miniport-intermediate driver.
For more information about the Windows network architecture and programming considerations, see Network Architecture for Kernel-Mode Drivers and Network Driver Programming Considerations.
For more information about network INF files, which are used to install network components, see Installing Network Components. If your network driver requires a notify object—for example, to control bindings—also see Notify Objects for Network Components.
The following additional driver models are available to use particular hardware technologies and architectures.
Technology | Description |
---|---|