Типы хэширования 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
- NDIS_HASH_TCP_IPV4
- NDIS_HASH_UDP_IPV4
- NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV4
- NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4
- NDIS_HASH_TCP_IPV4 | NDIS_HASH_UDP_IPV4 | NDIS_HASH_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
- NDIS_HASH_TCP_IPV6
- NDIS_HASH_UDP_IPV6
- NDIS_HASH_TCP_IPV6 | NDIS_HASH_IPV6
- NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6
- NDIS_HASH_TCP_IPV6 | NDIS_HASH_UDP_IPV6 | NDIS_HASH_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
- NDIS_HASH_TCP_IPV6_EX
- NDIS_HASH_UDP_IPV6_EX
- NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_IPV6_EX
- NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX
- NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX
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.