Поделиться через


Типы хэширования RSS

Обзор

Тип хэширования RSS указывает часть полученных сетевых данных, которую сетевой адаптер должен использовать для вычисления хэш-значения RSS.

Верхние драйверы задают тип хэша, функцию и таблицу косвенных ссылок. Тип хэша, который устанавливает драйвер верхнего уровня, может быть подмножеством типа, который поддерживается драйвером минипорта. Дополнительные сведения см. в конфигурации RSS .

Тип хэша представляет собой логическую операцию "ИЛИ" допустимых сочетаний следующих флагов:

  • NDIS_HASH_IPV4
  • NDIS_HASH_TCP_IPV4
  • NDIS_HASH_UDP_IPV4
  • NDIS_HASH_IPV6
  • NDIS_HASH_TCP_IPV6
  • NDIS_HASH_UDP_IPV6
  • NDIS_HASH_IPV6_EX
  • NDIS_HASH_TCP_IPV6_EX
  • NDIS_HASH_UDP_IPV6_EX

Это наборы допустимых сочетаний флагов:

  • IPv4 (сочетания NDIS_HASH_IPV4, NDIS_HASH_TCP_IPV4 и NDIS_HASH_UDP_IPV4)
  • IPv6 (сочетания NDIS_HASH_IPV6, NDIS_HASH_TCP_IPV6 и NDIS_HASH_UDP_IPV6)
  • IPv6 с заголовками расширений (сочетаниями NDIS_HASH_IPV6_EX, NDIS_HASH_TCP_IPV6_EX и NDIS_HASH_UDP_IPV6_EX)

Сетевой адаптер должен поддерживать одну из комбинаций из набора IPv4. Другие наборы и сочетания являются необязательными. Сетевой адаптер может поддерживать несколько наборов одновременно. В этом случае тип полученных данных определяет, какой хэш-тип использует сетевой адаптер.

Как правило, если сетевой адаптер не может правильно интерпретировать полученные данные, он не должен вычислять хэш-значение. Например, если сетевой адаптер поддерживает только IPv4 и получает пакет IPv6, который он не может интерпретировать правильно, он не должен вычислять хэш-значение. Если сетевой адаптер получает пакет для типа транспорта, который он не поддерживает, он не должен вычислять хэш-значение. Например, если сетевой адаптер получает пакет UDP, когда он должен вычислять хэш-значения для TCP-пакетов, он не должен вычислять хэш-значение. В этом случае пакет обрабатывается так же, как и в случае без RSS. Дополнительные сведения об обработке получения, не связанной с RSS, см. в .

Сочетания хэш-типов IPv4

Допустимые сочетания хэш-типов в наборе IPv4:

NDIS_HASH_IPV4

Если установлен только этот флаг, сетевой адаптер должен вычислить хэш-значение по следующим полям заголовка IPv4:

  • Источник—IPv4-Address
  • Назначение—IPv4-Address

Заметка

Если сетевой адаптер получает пакет с заголовками IP и TCP, NDIS_HASH_TCP_IPV4 не всегда следует использовать. В случае фрагментированного IP-пакета необходимо использовать NDIS_HASH_IPV4. Сюда входит первый фрагмент, содержащий заголовки IP и TCP.

NDIS_HASH_TCP_IPV4

Если этот флаг установлен только, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv4, содержащий сегмент TCP.

Сетевой адаптер должен определить и пропустить любые опции IP, которые присутствуют. Если сетевой адаптер не может пропустить какие-либо параметры IP-адресов, он не должен вычислять хэш-значение.

Сетевой адаптер должен вычислить хэш-значение по следующим полям:

  • Источник—IPv4-Address
  • Назначение —IPv4-Address
  • Исходный TCP-порт
  • Конечный TCP-порт

NDIS_HASH_UDP_IPV4

Если этот флаг установлен, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv4, содержащий диаграмму данных UDP.

Сетевой адаптер должен определить и пропустить любые параметры IP-адресов, которые присутствуют. Если сетевой адаптер не может пропустить какие-либо параметры IP-адресов, он не должен вычислять хэш-значение.

Сетевой адаптер должен вычислить хэш-значение по следующим полям.

  • Источник:IPv4-Address
  • Назначение —IPv4-Address
  • Исходный порт UDP
  • Порт назначения UDP

NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV4

Если задано это сочетание флагов, сетевой адаптер должен выполнять хэш-вычисления, указанные в случае NDIS_HASH_TCP_IPV4. Однако если пакет не содержит заголовок TCP, сетевой адаптер должен вычислить хэш-значение, указанное для случая NDIS_HASH_IPV4.

NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

Если задано сочетание этого флага, сетевой адаптер должен выполнять хэш-вычисления, указанные в случае NDIS_HASH_UDP_IPV4. Однако если пакет не содержит заголовок UDP, сетевой адаптер должен вычислить хэш-значение, указанное для случая NDIS_HASH_IPV4.

NDIS_HASH_TCP_IPV4 | NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

Если установлена комбинация этих флагов, сетевой адаптер должен производить хэш-вычисление, указанное транспортным протоколом в пакете. Однако если пакет не содержит заголовок TCP или UDP, сетевой адаптер должен вычислить хэш-значение, указанное для случая NDIS_HASH_IPV4.

Сочетания хэш-типов IPv6

Допустимые сочетания хэш-типов в наборе IPv6:

NDIS_HASH_IPV6

Если установлен только этот флаг, сетевой адаптер должен вычислить хэш над следующими полями:

  • Источник –IPv6-Address
  • Назначение —IPv6-Address

NDIS_HASH_TCP_IPV6

Если этот флаг установлен, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv6, содержащий сегмент TCP. Сетевой адаптер должен определять и пропускать все заголовки расширений IPv6, присутствующих в пакете. Если сетевой адаптер не может пропустить какие-либо заголовки расширения IPv6, он не должен вычислять хэш-значение.

Сетевой адаптер должен вычислить хэш-значение по следующим полям:

  • Source-IPv6 -Address
  • Destination-IPv6 -Address
  • Исходный TCP-порт
  • Конечный TCP-порт

NDIS_HASH_UDP_IPV6

Если этот флаг установлен, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv6, содержащий диаграмму данных UDP. Сетевой адаптер должен определять и пропускать все заголовки расширений IPv6, присутствующих в пакете. Если сетевой адаптер не может пропустить какие-либо заголовки расширения IPv6, он не должен вычислять хэш-значение.

Сетевой адаптер должен вычислить хэш-значение по следующим полям:

  • Источник—IPv6-Address
  • Назначение—IPv6-Address
  • Исходный порт UDP
  • Порт назначения UDP

NDIS_HASH_TCP_IPV6 | NDIS_HASH_IPV6

Если задано это сочетание флагов, сетевой адаптер должен выполнять хэш-вычисления, указанные для случая NDIS_HASH_TCP_IPV6. Однако если пакет не содержит заголовок TCP, сетевой адаптер должен вычислить хэш, указанный для NDIS_HASH_IPV6 случае.

Например, если пакет фрагментирован, он может не содержать заголовок TCP. В этом случае сетевой адаптер должен вычислить хэш только через заголовок IP.

NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6

Если задано это сочетание флагов, сетевой адаптер должен выполнять хэш-вычисления, указанные в случае NDIS_HASH_UDP_IPV6. Однако если пакет не содержит заголовок UDP, сетевой адаптер должен вычислить хэш, указанный для NDIS_HASH_IPV6 случае.

Например, если пакет фрагментирован, он может не содержать заголовок UDP. В этом случае сетевой адаптер должен вычислить хэш только через заголовок IP.

NDIS_HASH_TCP_IPV6 | NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6

Если задано сочетание этого флага, сетевой адаптер должен выполнять хэш-вычисление, указанное транспортом в пакете. Однако, если пакет не содержит заголовка TCP или UDP, сетевой адаптер должен вычислять хэш-значение, как указано в случае NDIS_HASH_IPV6.

Например, если пакет фрагментирован, он может не содержать заголовок TCP или UDP. В этом случае сетевой адаптер должен вычислить хэш только через заголовок IP.

IPv6 с сочетаниями типов хэширования расширенных заголовков

Допустимые сочетания в IPv6 с использованием набора заголовков расширений:

NDIS_HASH_IPV6_EX

Если установлен только этот флаг, сетевой адаптер должен вычислить хэш над следующими полями:

  • Домашний адрес из опции домашнего адреса в заголовке параметров назначения IPv6. Если заголовок расширения отсутствует, используйте исходный IPv6-адрес.
  • IPv6-адрес, содержащийся в заголовке расширения routing-Header-Type-2 из связанного заголовка расширения. Если заголовок расширения отсутствует, используйте адрес IPv6 назначения.

NDIS_HASH_TCP_IPV6_EX

Если установлен только этот флаг, сетевой адаптер должен вычислить хэш по следующим полям.

  • Домашний адрес из параметра домашнего адреса в заголовке параметров назначения IPv6. Если заголовок расширения отсутствует, используйте исходный IPv6-адрес.
  • IPv6-адрес, содержащийся в заголовке маршрутизации типа 2 из связанного заголовка расширения. Если заголовок расширения отсутствует, используйте адрес IPv6 назначения.
  • Исходный TCP-порт
  • Конечный TCP-порт

NDIS_HASH_UDP_IPV6_EX

Если установлен только этот флаг, сетевой адаптер должен вычислить хэш над следующими полями:

  • Домашний адрес из параметра «домашний адрес» в заголовке параметров назначения IPv6. Если заголовок расширения отсутствует, используйте исходный IPv6-адрес.
  • IPv6-адрес, содержащийся в заголовке типа Routing-Header-Type-2 из связанного расширенного заголовка. Если заголовок расширения отсутствует, используйте адрес IPv6 назначения.
  • Исходный порт UDP
  • Порт назначения UDP

NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_IPV6_EX

Если задано это сочетание флагов, сетевой адаптер должен выполнять хэш-вычисления, указанные в случае NDIS_HASH_TCP_IPV6_EX. Однако если пакет не содержит заголовка TCP, сетевой адаптер должен вычислить хэш, указанный в случае NDIS_HASH_IPV6_EX.

NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX

Если задано это сочетание флагов, сетевой адаптер должен выполнять хэш-вычисления, указанные для случая NDIS_HASH_UDP_IPV6_EX. Однако если пакет не содержит заголовок UDP, сетевой адаптер должен вычислить хэш, указанный для случая NDIS_HASH_IPV6_EX.

NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX

Если задано это сочетание флагов, сетевой адаптер должен выполнять хэш-вычисления, указанные транспортом пакетов. Однако если пакет не содержит заголовок TCP или UDP, сетевой адаптер должен вычислить хэш, указанный для случая NDIS_HASH_IPV6_EX.

Заметка

Если драйвер минипорта сообщает о возможностях NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX и/или NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX для сетевого адаптера, сетевой адаптер должен вычислять хэш-значения (по полям в заголовках расширений IPv6) в соответствии с хэш-типами расширения IPv6, установленными драйвером протокола. Сетевой адаптер может хранить либо тип хэша расширения, либо обычный тип хэша в структуре NET_BUFFER_LIST пакета IPv6, для которого вычисляется хэш-значение.

Минипорт-драйвер задает хэш-тип в структуре NET_BUFFER_LIST перед указанием полученных данных. Дополнительные сведения см. в разделе Указание получения данных RSS.