Обзор объединения пакетов
Некоторые сетевые протоколы IPv4 и IPv6 включают передачу пакетов на широковещательные или многоадресные адреса. Эти пакеты принимаются несколькими узлами в подсети IPv4/IPv6. В большинстве случаев узел, получающий эти пакеты, ничего не делает с этими пакетами. Таким образом, получение этих нежелательных многоадресных или широковещательных пакетов приводит к ненужным процессам обработки и энергопотребления на принимающем узле.
Например, узел A отправляет многоадресный запрос на локальное разрешение имен многоадресной рассылки (LLMNR) в подсети IPv6 для разрешения имени узла B. За исключением узла A, этот запрос LLMNR принимается всеми узлами в подсети. За исключением узла B, стек протоколов TCP/IP, работающий на других узлах, проверяет пакет и определяет, что пакет не предназначен для него. Поэтому стек протоколов отклоняет пакет и вызывает NdisReturnNetBufferLists , чтобы вернуть пакет драйверу мини-порта.
Начиная с версии NDIS 6.30 сетевые адаптеры могут поддерживать объединение пакетов NDIS. Благодаря сокращению количества прерываний приема за счет объединения случайных широковещательных или многоадресных пакетов, затраты на обработку и энергопотребление значительно снижаются в системе.
Объединение пакетов состоит из следующих этапов.
Избыточные драйверы, такие как стек протокола TCP/IP, определяют фильтры получения NDIS, которые используются для экранирования широковещательных и многоадресных пакетов. Вышележащие драйверы загружают эти фильтры в базовый драйвер miniport, который поддерживает объединение пакетов. После скачивания драйвер минипорта настраивает сетевой адаптер с фильтрами приема объединения пакетов.
Дополнительные сведения об этих фильтрах см. в разделе Фильтры получения объединения пакетов.
Полученные пакеты, соответствующие фильтрам получения, кэшируются или объединяются на сетевом адаптере. Адаптер не создает прерывание приема для объединяемых пакетов. Вместо этого адаптер прерывает работу узла при возникновении другого аппаратного события.
При создании этого прерывания адаптер должен указать событие получения с прерыванием. Это позволяет сетевому адаптеру обрабатывать объединяемые пакеты, полученные сетевым адаптером.
Например, сетевой адаптер, поддерживающий объединение пакетов, может создать прерывание приема при возникновении одного из следующих событий:
Срок действия аппаратного таймера, для которого задано максимальное значение задержки объединения соответствующего фильтра получения.
Доступное пространство в буфере объединения оборудования достигает заданной адаптером низкой отметки воды.
Получен пакет, который не соответствует фильтру объединения.
Произошло другое событие прерывания, например событие завершения отправки.
Дополнительные сведения об этом процессе см. в разделе Обработка фильтров приема объединения пакетов.
Следующие моменты относятся к поддержке объединения пакетов с помощью NDIS:
NDIS поддерживает объединение пакетов для пакетов, полученных через порт NDIS по умолчанию (порт 0), назначенный физическому сетевому адаптеру. NDIS не поддерживает объединение пакетов на портах NDIS, назначенных виртуальным сетевым адаптерам. Дополнительные сведения см. в разделе Порты NDIS.
NDIS поддерживает объединение пакетов для пакетов, полученных в очереди получения сетевого адаптера по умолчанию. Эта очередь получения имеет идентификатор NDIS_DEFAULT_RECEIVE_QUEUE_ID.