Открыть сервис

NDIS

NDIS (Network Driver Interface Specification) — это спецификация интерфейса сетевого драйвера, разработанная компания Microsoft и 3Com. Она определяет стандартный программный интерфейс (API) для взаимодействия между сетевыми адаптерами (физическими или виртуальными) и протоколами транспортного уровня (например, TCP/IP, IPX/SPX) в операционных системах семейства Windows. NDIS обеспечивает абстракцию аппаратного обеспечения, позволяя одному сетевому адаптеру поддерживать множество протоколов, а одному протоколу — работать с различными сетевыми картами, без необходимости переписывания драйверов.

История

Предпосылки создания

В ранних версиях Windows (до Windows 95) и в MS-DOS поддержка сетевых протоколов была жёстко привязана к конкретным моделям сетевых карт. Каждый производитель поставлял собственный драйвер, который напрямую реализовывал стек протоколов, что приводило к несовместимости и усложняло разработку. Для решения этой проблемы в 1989 году Microsoft совместно с компанией 3Com начала разработку универсального интерфейса.

Версии NDIS

Первая версия, NDIS 3.0, была выпущена в 1990 году для Windows 3.0. Она поддерживала 16-битные драйверы и работу с протоколами NetBEUI и IPX/SPX. NDIS 3.1 (1992) добавила поддержку 32-битных драйверов и улучшила производительность.

NDIS 4.0 (1996) вышла вместе с Windows 95 и представила модель «минипорт-протокол», где драйверы разделялись на два уровня: минипорт-драйвер (управляющий аппаратурой) и протокол-драйвер (реализующий стек протоколов). Эта версия также ввела поддержку Plug and Play и Power Management.

NDIS 5.0 (1999) была включена в Windows 98 и Windows 2000. Она добавила поддержку виртуальных локальных сетей (VLAN), фильтрацию пакетов и улучшенную обработку прерываний. NDIS 5.1 (2001) стала стандартом для Windows XP и Windows Server 2003, добавив поддержку беспроводных сетей (Wi-Fi) и инфраструктуру для драйверов WLAN.

NDIS 6.0 (2006) — значительное обновление, выпущенное с Windows Vista и Windows Server 2008. Оно включало:

  • Новую модель драйверов с поддержкой NetBuffer (улучшенная работа с пакетами).
  • Масштабируемость на многоядерных процессорах (Receive Side Scaling, RSS).
  • Поддержку виртуализации (Hyper-V).
  • Упрощённую модель программирования для минипорт-драйверов.

NDIS 6.1 (2008) — обновление для Windows 7, добавившее поддержку Virtual Machine Queue (VMQ) и Single Root I/O Virtualization (SR-IOV). NDIS 6.2 (2012) — для Windows 8 и Windows Server 2012, улучшила работу с облачными средами и добавила поддержку Network Virtualization using Generic Routing Encapsulation (NVGRE). NDIS 6.3 (2013) — для Windows 8.1 и Windows Server 2012 R2, оптимизировала производительность для SSD-накопителей и улучшила поддержку RDMA (Remote Direct Memory Access). NDIS 6.4 (2015) — для Windows 10 и Windows Server 2016, добавила поддержку Software Defined Networking (SDN) и улучшила работу с контейнерами. NDIS 6.5 (2018) — для Windows 10 версии 1803, включила поддержка Network Performance Monitor (NPM) и улучшенную диагностику. NDIS 6.6 (2021) — для Windows 11 и Windows Server 2022, добавила поддержку QUIC-протокола и улучшенную безопасность.

Архитектура

Уровни NDIS

NDIS организует сетевые драйверы в иерархическую структуру, состоящую из трёх основных уровней:

  1. Минипорт-драйверы (Miniport Drivers) — самый нижний уровень. Они взаимодействуют непосредственно с сетевым адаптером (через PCI, USB, PCIe и т.д.) и реализуют функции отправки/приёма пакетов, управления состоянием адаптера и обработки прерываний. Минипорт-драйверы не зависят от протоколов.
  2. Протокол-драйверы (Protocol Drivers) — верхний уровень. Они реализуют стек протоколов (например, TCP/IP, IPv6, IPX) и предоставляют интерфейс для приложений (через Winsock). Протокол-драйверы не зависят от аппаратуры.
  3. Промежуточные драйверы (Intermediate Drivers) — опциональный уровень между минипорт- и протокол-драйверами. Они могут выполнять фильтрацию, модификацию, шифрование или балансировку трафика. Примеры: драйверы файрволов, VPN-клиентов, драйверы для виртуальных сетей (например, OpenVPN, WireGuard).

Модель взаимодействия

NDIS предоставляет библиотеку функций (NDIS Library), которая управляет регистрацией драйверов, передачей пакетов, синхронизацией и обработкой прерываний. Все драйверы общаются через NDIS, а не напрямую друг с другом. Пакет данных представляется структурой NET_BUFFER_LIST (NBL), которая может содержать несколько NET_BUFFER (каждый — один пакет). Это позволяет эффективно обрабатывать большие объёмы трафика.

Виртуализация

Начиная с NDIS 6.0, поддерживается виртуализация сетевых адаптеров. В среде Hyper-V NDIS позволяет создавать виртуальные сетевые адаптеры (Virtual Machine Bus, VMBus), которые могут быть привязаны к физическим адаптерам или к виртуальным коммутаторам. Технологии VMQ и SR-IOV позволяют напрямую передавать трафик виртуальным машинам, минуя гипервизор, что снижает задержки и повышает пропускную способность.

Применение

Операционные системы

NDIS является стандартом для всех версий Windows, начиная с Windows 95. Он также используется в Windows Embedded, Windows IoT и некоторых версиях Windows Server. Драйверы, написанные для NDIS, совместимы с разными версиями Windows (с учётом версии NDIS). Например, драйвер NDIS 6.0 может работать на Windows Vista, 7, 8, 10 и 11, но не на Windows XP (NDIS 5.1).

Сетевые технологии

NDIS используется для реализации:

  • Беспроводных сетей (Wi-Fi, Bluetooth) — через драйверы WLAN и Bluetooth.
  • Виртуальных частных сетей (VPN) — через промежуточные драйверы, которые шифруют трафик.
  • Файрволов и систем обнаружения вторжений (IDS) — через драйверы фильтрации пакетов.
  • Балансировки нагрузки — через драйверы, распределяющие трафик между несколькими адаптерами.
  • Виртуализации сетей — в облачных средах (Azure, Hyper-V) для создания виртуальных коммутаторов и сетей.

Разработка драйверов

Разработчики пишут драйверы NDIS на языке C с использованием Windows Driver Kit (WDK). Microsoft предоставляет шаблоны и примеры (например, драйверы для эмуляции сетевых адаптеров). Драйверы NDIS должны быть подписаны цифровой подписью Microsoft для установки на 64-битных версиях Windows.

Критика и ограничения

Сложность разработки

NDIS считается сложным интерфейсом для разработки драйверов. Требуется глубокое знание архитектуры Windows, управления памятью, синхронизации и обработки прерываний. Ошибки в драйверах NDIS могут приводить к синим экранам смерти (BSOD) и нестабильности системы.

Производительность

Хотя NDIS 6.0 значительно улучшил производительность, в некоторых сценариях (например, при высокой нагрузке на маломощных устройствах) накладные расходы на работу с NBL могут быть значительными. Для высокопроизводительных сетей (10 Гбит/с и выше) рекомендуется использовать технологии RDMA или DPDK (Data Plane Development Kit), которые обходят NDIS.

Совместимость

Драйверы, написанные для одной версии NDIS, могут не работать на более старых версиях Windows. Например, драйвер NDIS 6.0 не будет работать на Windows 2000 (NDIS 5.0). Это создаёт проблемы для пользователей устаревших систем.

Зависимость от Windows

NDIS является проприетарной технологией Microsoft и не поддерживается в других операционных системах (Linux, macOS). Для кроссплатформенной разработки используются альтернативы, такие как Netmap, DPDK или libpcap.

Альтернативы

Linux: NAPI и Netmap

В Linux аналогом NDIS является NAPI (New API) — механизм, позволяющий драйверам сетевых адаптеров эффективно обрабатывать прерывания и пакеты. NAPI интегрирован в ядро Linux и используется большинством драйверов. Для высокопроизводительных приложений применяется Netmap — фреймворк, обеспечивающий прямой доступ к сетевым пакетам без копирования.

DPDK

Data Plane Development Kit (DPDK) — набор библиотек и драйверов для ускорения обработки пакетов на многоядерных процессорах. DPDK работает в пользовательском пространстве, минуя ядро ОС, что позволяет достичь пропускной способности до 40 Гбит/с и выше. DPDK поддерживается в Windows (через проект DPDK for Windows) и Linux.

WinPcap / Npcap

WinPcap и его преемник Npcap — библиотеки для захвата и анализа сетевых пакетов в Windows. Они работают поверх NDIS, используя промежуточные драйверы для перехвата трафика. Npcap является стандартом для инструментов вроде Wireshark.

Интересные факты

  • NDIS изначально разрабатывался как часть проекта OS/2, но после разрыва Microsoft и IBM был адаптирован для Windows.
  • В Windows 10 и 11 NDIS используется для реализации виртуальных сетевых адаптеров Hyper-V, которые могут быть подключены к внешним, внутренним или частным виртуальным коммутаторам.
  • Драйверы NDIS могут быть написаны на C++ с использованием объектно-ориентированных подходов, но Microsoft рекомендует использовать C для совместимости с WDK.
  • В 2023 году Microsoft выпустила NDIS 6.7 для Windows 11 версии 22H2, добавив поддержку протокола QUIC и улучшенную диагностику.

Источники

  • Microsoft Docs: «Network Driver Design Guide» (Windows Driver Kit).
  • «Windows Internals, Part 1» (7th edition) — Pavel Yosifovich, Mark Russinovich, David Solomon.
  • «Network Programming for Microsoft Windows» — Anthony Jones, Jim Ohlund.
  • Спецификация NDIS 6.0 (Microsoft Corporation, 2006).
  • Статья «NDIS: Architecture and Implementation» (MSDN Magazine, 2008).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →