Типы хэширования 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, см. в разделе Обработка получения без 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-адрес
- IPv4-адрес назначения
Примечание
Если сетевой адаптер получает пакет с заголовками IP и TCP, NDIS_HASH_TCP_IPV4 не всегда следует использовать. В случае фрагментированного IP-пакета необходимо использовать NDIS_HASH_IPV4. Сюда входит первый фрагмент, содержащий заголовки IP и TCP.
NDIS_HASH_TCP_IPV4
Если установлен только этот флаг, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv4, содержащий сегмент TCP.
Сетевой адаптер должен определять и пропускать все имеющиеся параметры IP-адресов. Если сетевой адаптер не может пропустить какие-либо ip-параметры, он не должен вычислять хэш-значение.
Сетевой адаптер должен вычислить хэш-значение по следующим полям:
- Исходный IPv4-адрес
- IPv4-адрес назначения
- Исходный TCP-порт
- TCP-порт назначения
NDIS_HASH_UDP_IPV4
Если установлен только этот флаг, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv4, содержащий датаграмму UDP.
Сетевой адаптер должен определять и пропускать все имеющиеся параметры IP-адресов. Если сетевой адаптер не может пропустить какие-либо ip-параметры, он не должен вычислять хэш-значение.
Сетевой адаптер должен вычислить хэш-значение по следующим полям:
- Исходный IPv4-адрес
- IPv4-адрес назначения
- Исходный 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-адрес
- IPv6-адрес назначения
NDIS_HASH_TCP_IPV6
Если установлен только этот флаг, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv6, содержащий сегмент TCP. Сетевой адаптер должен определять и пропускать все заголовки расширений IPv6, которые присутствуют в пакете. Если сетевой адаптер не может пропустить заголовки расширения IPv6, он не должен вычислять хэш-значение.
Сетевой адаптер должен вычислить хэш-значение по следующим полям:
- Source-IPv6 -Адрес
- Destination-IPv6 -Адрес
- Исходный TCP-порт
- TCP-порт назначения
NDIS_HASH_UDP_IPV6
Если установлен только этот флаг, сетевой адаптер должен проанализировать полученные данные, чтобы определить пакет IPv6, содержащий датаграмму UDP. Сетевой адаптер должен определять и пропускать все заголовки расширений IPv6, которые присутствуют в пакете. Если сетевой адаптер не может пропустить заголовки расширения IPv6, он не должен вычислять хэш-значение.
Сетевой адаптер должен вычислить хэш-значение по следующим полям:
- Исходный IPv6-адрес
- IPv6-адрес назначения
- Исходный 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-адрес, содержащийся в routing-Header-Type-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.