Спецификация интерфейса сетевого драйвера ( NDIS ) — это интерфейс прикладного программирования (API) для контроллеров сетевых интерфейсов (NIC).
Он был совместно разработан Microsoft и 3Com Corporation и в основном используется в Microsoft Windows . Однако проекты с открытым исходным кодом NDISwrapper и Project Evil driver wrapper позволяют использовать многие совместимые с NDIS сетевые карты с Linux , FreeBSD и NetBSD . magnussoft ZETA , производная от BeOS , поддерживает ряд драйверов NDIS.
NDIS формирует подуровень управления логическим каналом (LLC), который является верхним подуровнем уровня канала передачи данных OSI (уровень 2). Таким образом, NDIS действует как интерфейс между подуровнем управления доступом к среде (MAC), который является нижним подуровнем уровня канала передачи данных, и сетевым уровнем (уровень 3).
NDIS — это библиотека функций, часто называемая « оболочкой », которая скрывает сложность аппаратного обеспечения сетевого адаптера и служит стандартным интерфейсом для драйверов сетевых протоколов 3-го уровня и драйверов MAC-адресов аппаратного уровня.
Версии NDIS, поддерживаемые различными версиями Windows, следующие: [1]
Трафик, принимаемый сетевой картой, контролируется драйвером мини-порта NDIS [17], в то время как различные протоколы, такие как TCP/IP , реализуются драйверами протоколов NDIS. [18] Один мини-порт может быть связан с одним или несколькими протоколами. Это означает, что трафик, поступающий в мини-порт, может быть получен параллельно несколькими драйверами протоколов. Например, Winpcap добавляет второй драйвер протокола на выбранный мини-порт для захвата входящих пакетов. Кроме того, можно имитировать несколько виртуальных сетевых карт, реализуя драйверы виртуальных мини-портов, которые отправляют и получают трафик с одного физического сетевого адаптера. Одним из примеров использования драйвера виртуального мини-порта является добавление виртуальных сетевых карт, каждая с разной VLAN . Поскольку реализации не могут предполагать, что другие драйверы получили те же буферы, необходимо рассматривать входящие буферы как доступные только для чтения, а драйвер, который изменяет содержимое пакета, должен выделять свои собственные буферы. Драйверы мини-порта NDIS также могут использовать интерфейсы модели драйверов Windows для управления сетевым оборудованием. [19]
Другой тип драйвера — промежуточный драйвер NDIS. Промежуточные драйверы находятся между уровнями MAC и IP и могут контролировать весь трафик, принимаемый сетевой картой. На практике промежуточные драйверы реализуют интерфейсы минипорта и протокола. Драйвер минипорта и драйвер протокола фактически взаимодействуют с соответствующими интерфейсами минипорта и протокола, которые находятся в промежуточном драйвере. Такая конструкция позволяет добавлять несколько связанных промежуточных драйверов между драйверами минипорта и протокола. Поэтому поставщики драйверов не могут предполагать, что интерфейс, на который они отправляют трафик, реализован последним драйвером в цепочке. Чтобы писать приложения с использованием NDIS, можно использовать образцы, которые прилагаются к комплекту драйверов Windows Driver Kit (WDK) от Microsoft. Образец «PassThru» является хорошей отправной точкой для промежуточных драйверов, поскольку он реализует все необходимые детали, требуемые в этом типе драйвера, но просто передает трафик следующему драйверу в цепочке.