Спецификация интерфейса сетевых устройств.

07.11.2019 20:00
    Драйверы NDIS-совместимых (Network Device Interface Specification — спецификация интерфейса сетевых устройств) сетевых устройств обеспечивают взаимодействие сетевого адаптера и программного, аппаратного и микропрограммного обеспечения компьютера. Сетевые устройства являются физическим интерфейсом между компьютером и сетевым кабелем.
    Каждая сетевая плата может иметь один или несколько драйверов. Чтобы работать и надежно функционировать в ОС, они должны быть совместимы с данной спецификацией. Эта спецификация обеспечивает независимую привязку одного или более протоколов к одному или более драйверу сетевой платы.
    Так как сетевые устройства и их драйверы не зависят от протоколов, смена протокола не требует реконфигурации сетевых устройств.
    NDIS определяет программный интерфейс, используемый протоколами для взаимодействия с драйверами сетевых плат. Любой протокол, совместимый с данной спецификацией, может взаимодействовать с любым NDIS-совместимым драйвером сетевой платы. Поэтому нет необходимости включать в сам протокол код для работы со специфическими драйверами сетевых адаптеров.
    Канал связи между драйвером протокола и драйвером сетевого устройства устанавливается во время привязки (binding). 
    
Типы NDIS драйверов в Windows.
    Спецификация NDIS обеспечивает:
• каналы связи между сетевыми платами и соответствующими драйверами;
• независимость протоколов и драйверов сетевых плат;
• неограниченное число сетевых плат;
• неограниченное число протоколов, привязываемых к одной сетевой плате.

    Спецификация NDIS определяет три типа сетевых драйверов:
 драйверы протоколов верхнего уровня (upper level protocol drivers);
 драйверы протоколов промежуточного уровня (intermediate protocol drivers);
 драйверы сетевых карт (NIC drivers), сюда входят драйверы сетевых карт локальных сетей (NDIS LAN Miniport NIC drivers) и драйверы сетевых карт глобальных сетей (NDIS WAN Miniport NIC drivers).


Драйверы протоколов верхнего уровня.

    Драйвер протокола верхнего уровня в своей верхней части предоставляет TDI-интерфейс или, возможно, другой интерфейс, необходимый пользователям сети. Подобные драйверы выделяют ресурсы для пакетов, копируют данные приложения в пакеты и передают их драйверам более низкого уровня посредством вызова NDIS. В своей нижней части этот тип драйверов обеспечивает интерфейс для получения пакетов от нижележащего драйвера и передает полученные данные TDI-клиенту или приложению, для которого они предназначены. 
    К драйверам протоколов верхнего уровня относится и драйвер транспорта, реализующий стек сетевых протоколов, такой как IPX/SPX или TCP/IP. Транспортный драйвер Windows NT реализует TDI-интерфейс в своей верхней части и использует NDIS библиотеку для взаимодействия с драйверами сетевых карт в своей нижней части.
 
Драйверы протоколов промежуточного уровня.
    NDIS драйверы протоколов промежуточного уровня взаимодействуют сверху с драйверами протоколов верхнего уровня (такими как драйверы транспортов), а снизу с NDIS драйверами сетевых карт локальных и глобальных сетей. Ниже NDIS драйвера промежуточного уровня может быть драйвер, не поддерживающий интерфейс NDIS. NDIS драйверы промежуточного уровня могут служить различным целям, включая фильтрацию и шифрование пакетов, реализацию специализированных протоколов и тому подобные функции.
    Для драйвера протокола верхнего уровня промежуточный драйвер выглядит как драйвер виртуальной сетевой карты. Для драйвера реальной сетевой карты — как драйвер протокола. Промежуточные драйверы могут выстраиваться в цепочку, хотя такое расположение может оказывать негативное влияние на производительность системы. Типичный случай разработки и применения промежуточного драйвера - чтобы выполнять преобразование пакетов для среды передачи, неизвестной драйверу транспорта, но поддерживаемой драйвером сетевой карты. Например, может осуществляться преобразование между протоколом локальной сети и ATM протоколом.
    NDIS драйвер промежуточного уровня обычно экспортирует MiniportXxx функции на своем верхнем уровне и ProtocolXxx функции на своем нижнем уровне. Реже промежуточный драйвер может экспортировать MiniportXxx функции на своем верхнем уровне, а в своей нижней части предоставлять закрытый интерфейс посредством использования пакетов IRP, нижнему драйверу, не являющемуся NDIS драйвером. Например, промежуточный драйвер может управлять сетевыми запросами ввода/вывода для устройства, соединенного с последовательным портом.
 
Драйверы сетевых карт.
    NDIS LAN Miniport NIC драйверы поддерживают сетевые карты локальных сетей. NDIS WAN Miniport NIC драйверы имеют дополнительные требования и предоставляют приложениям доступ к глобальным сетям, таким как, ISDN, Frame Relay, Switched 56.
    Сетевой адаптер — это Ethernet-контроллер и от  установки корректного драйвера для него, будет зависеть правильная и надежная работа вашего Интернет соединения.
    Драйверы сетевых карт в своей нижней части взаимодействуют с оборудованием, а в верхней части предоставляют интерфейс, позволяющий верхним уровням посылать пакеты в сеть, сбрасывать и останавливать сетевую карту, а также осуществлять опрос и установку параметров драйвера сетевой карты.
    Существует два типа NDIS драйверов сетевых карт:
 Miniport NIC драйвер выполняет специфичные для конкретной сетевой карты операции, включая отправление и получение данных. Операции общие для всех драйверов сетевых карт, такие как синхронизация, обычно обеспечиваются NDIS. Miniport драйвер не вызывает напрямую обслуживание операционной системы, он взаимодействует с операционной системой через NDIS.
 Full NIC legasy драйверы в настоящее время устарели и используются для совместимости, они выполняют одновременно специфичные для сетевой карты операции, а также всю работу по синхронизации, обслуживанию очередей, обычно выполняемые NDIS. Full NIC драйвер, например, поддерживает свою собственную информацию о привязках к вышележащим драйверам для индикации полученных данных. Miniport драйвер, напротив, не хранит информацию о привязках, он просто передает пакеты наверх интерфейсу NDIS, а тот уже гарантирует, что пакеты будут переданы соответствующим драйверам протоколов.