Compartilhar via


Tipos de hash RSS

Visão geral

O tipo de hash RSS especifica a parte dos dados de rede recebidos que uma NIC deve usar para calcular um valor de hash RSS.

Os drivers em excesso definem o tipo de hash, a função e a tabela de indireção. O tipo de hash que o driver subjacente define pode ser um subconjunto do tipo que o driver de miniporto pode dar suporte. Para obter mais informações, consulte Configuração do RSS.

O tipo de hash é um OR de combinações válidas dos seguintes sinalizadores:

  • 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

Estes são os conjuntos de combinações de sinalizador válidas:

  • IPv4 (combinações de NDIS_HASH_IPV4, NDIS_HASH_TCP_IPV4 e NDIS_HASH_UDP_IPV4)
  • IPv6 (combinações de NDIS_HASH_IPV6, NDIS_HASH_TCP_IPV6 e NDIS_HASH_UDP_IPV6)
  • IPv6 com cabeçalhos de extensão (combinações de NDIS_HASH_IPV6_EX, NDIS_HASH_TCP_IPV6_EX e NDIS_HASH_UDP_IPV6_EX)

Uma NIC deve dar suporte a uma das combinações do conjunto IPv4. Os outros conjuntos e combinações são opcionais. Uma NIC pode dar suporte a mais de um conjunto por vez. Nesse caso, o tipo de dados recebidos determina qual tipo de hash a NIC usa.

Em geral, se a NIC não puder interpretar os dados recebidos corretamente, ela não deverá calcular o valor de hash. Por exemplo, se a NIC só dá suporte a IPv4 e recebe um pacote IPv6, que não pode ser interpretado corretamente, ele não deve calcular o valor de hash. Se a NIC receber um pacote para um tipo de transporte que ele não dá suporte, ele não deverá calcular o valor de hash. Por exemplo, se a NIC receber um pacote UDP quando deveria estar calculando valores de hash para pacotes TCP, ela não deverá calcular o valor de hash. Nesse caso, o pacote é processado como no caso não RSS. Para obter mais informações sobre o processamento de recebimento não RSS, consulte Processamento de recebimento não RSS.

Combinações de tipo de hash IPv4

As combinações de tipo de hash válidas no conjunto IPv4 são:

NDIS_HASH_IPV4

Se esse sinalizador sozinho estiver definido, a NIC deverá calcular o valor de hash nos seguintes campos de cabeçalho IPv4:

  • Origem-IPv4-Address
  • Destination-IPv4-Address

Observação

Se uma NIC receber um pacote que tenha cabeçalhos IP e TCP, nem sempre NDIS_HASH_TCP_IPV4 deve ser usado. No caso de um pacote IP fragmentado, NDIS_HASH_IPV4 deve ser usado. Isso inclui o primeiro fragmento que contém cabeçalhos IP e TCP.

NDIS_HASH_TCP_IPV4

Se esse sinalizador sozinho estiver definido, a NIC deverá analisar os dados recebidos para identificar um pacote IPv4 que contém um segmento TCP.

A NIC deve identificar e ignorar todas as opções de IP presentes. Se a NIC não puder ignorar nenhuma opção de IP, ela não deverá calcular um valor de hash.

A NIC deve calcular o valor de hash nos seguintes campos:

  • Origem-IPv4-Address
  • Destination-IPv4-Address
  • Porta TCP de origem
  • Porta TCP de destino

NDIS_HASH_UDP_IPV4

Se esse sinalizador sozinho estiver definido, a NIC deverá analisar os dados recebidos para identificar um pacote IPv4 que contém um datagrama UDP.

A NIC deve identificar e ignorar todas as opções de IP presentes. Se a NIC não puder ignorar nenhuma opção de IP, ela não deverá calcular um valor de hash.

A NIC deve calcular o valor de hash nos seguintes campos:

  • Origem-IPv4-Address
  • Destination-IPv4-Address
  • Porta UDP de origem
  • Porta UDP de destino

NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV4

Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_TCP_IPV4. No entanto, se o pacote não contiver um cabeçalho TCP, a NIC deverá calcular o valor de hash conforme especificado para o caso de NDIS_HASH_IPV4.

NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_UDP_IPV4. No entanto, se o pacote não contiver um cabeçalho UDP, a NIC deverá calcular o valor de hash conforme especificado para o caso de NDIS_HASH_IPV4.

NDIS_HASH_TCP_IPV4 | NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

Se essa combinação de sinalizadores for definida, a NIC deverá executar o cálculo de hash conforme especificado pelo transporte no pacote. No entanto, se o pacote não contiver um cabeçalho TCP ou UDP, a NIC deverá calcular o valor de hash conforme especificado para o caso de NDIS_HASH_IPV4.

Combinações de tipo de hash IPv6

As combinações de tipo de hash válidas no conjunto IPv6 são:

NDIS_HASH_IPV6

Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:

  • Origem-IPv6-Address
  • Destination-IPv6-Address

NDIS_HASH_TCP_IPV6

Se esse sinalizador sozinho estiver definido, a NIC deverá analisar os dados recebidos para identificar um pacote IPv6 que contém um segmento TCP. A NIC deve identificar e ignorar todos os cabeçalhos de extensão IPv6 presentes no pacote. Se a NIC não puder ignorar nenhum cabeçalho de extensão IPv6, ela não deverá calcular um valor de hash.

A NIC deve calcular o valor de hash nos seguintes campos:

  • Source-IPv6 -Address
  • Destination-IPv6 -Address
  • Porta TCP de origem
  • Porta TCP de destino

NDIS_HASH_UDP_IPV6

Se esse sinalizador estiver definido sozinho, a NIC deverá analisar os dados recebidos para identificar um pacote IPv6 que contém um datagrama UDP. A NIC deve identificar e ignorar todos os cabeçalhos de extensão IPv6 presentes no pacote. Se a NIC não puder ignorar nenhum cabeçalho de extensão IPv6, ela não deverá calcular um valor de hash.

A NIC deve calcular o valor de hash nos seguintes campos:

  • Origem-IPv6-Address
  • Destination-IPv6-Address
  • Porta UDP de origem
  • Porta UDP de destino

NDIS_HASH_TCP_IPV6 | NDIS_HASH_IPV6

Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_TCP_IPV6. No entanto, se o pacote não contiver um cabeçalho TCP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6.

Por exemplo, se o pacote estiver fragmentado, ele poderá não conter o cabeçalho TCP. Nesse caso, a NIC deve calcular o hash somente sobre o cabeçalho IP.

NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6

Se essa combinação de sinalizadores estiver definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_UDP_IPV6. No entanto, se o pacote não contiver um cabeçalho UDP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6.

Por exemplo, se o pacote estiver fragmentado, ele poderá não conter o cabeçalho UDP. Nesse caso, a NIC deve calcular o hash somente sobre o cabeçalho IP.

NDIS_HASH_TCP_IPV6 | NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6

Se essa combinação de sinalizadores for definida, a NIC deverá executar o cálculo de hash conforme especificado pelo transporte no pacote. No entanto, se o pacote não contiver um cabeçalho TCP ou UDP, a NIC deverá calcular o valor de hash conforme especificado no caso de NDIS_HASH_IPV6.

Por exemplo, se o pacote estiver fragmentado, ele poderá não conter o cabeçalho TCP ou UDP. Nesse caso, a NIC deve calcular o hash somente sobre o cabeçalho IP.

IPv6 com combinações de tipo de hash de cabeçalhos de extensão

As combinações válidas no IPv6 com cabeçalhos de extensão definidas são:

NDIS_HASH_IPV6_EX

Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:

  • Endereço residencial da opção de endereço residencial no cabeçalho de opções de destino IPv6. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de origem.
  • Endereço IPv6 contido no routing-header-type-2 do cabeçalho de extensão associado. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de Destino.

NDIS_HASH_TCP_IPV6_EX

Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:

  • Endereço residencial da opção de endereço residencial no cabeçalho de opções de destino IPv6. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de origem.
  • Endereço IPv6 contido no routing-header-type-2 do cabeçalho de extensão associado. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de Destino.
  • Porta TCP de origem
  • Porta TCP de destino

NDIS_HASH_UDP_IPV6_EX

Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:

  • Endereço residencial da opção de endereço residencial no cabeçalho de opções de destino IPv6. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de origem.
  • Endereço IPv6 contido no routing-header-type-2 do cabeçalho de extensão associado. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de Destino.
  • Porta UDP de origem
  • Porta UDP de destino

NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_IPV6_EX

Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_TCP_IPV6_EX. No entanto, se o pacote não contiver um cabeçalho TCP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6_EX.

NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX

Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_UDP_IPV6_EX. No entanto, se o pacote não contiver um cabeçalho UDP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6_EX.

NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX

Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado pelo transporte de pacotes. No entanto, se o pacote não contiver um cabeçalho TCP ou UDP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6_EX.

Observação

Se um driver de miniporte relatar NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX e/ou NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX capacidade para uma NIC, a NIC deverá calcular valores de hash (em campos nos cabeçalhos de extensão IPv6) de acordo com os tipos de hash de extensão IPv6 definidos pelo driver de protocolo. A NIC pode armazenar o tipo de hash de extensão ou o tipo de hash regular na estrutura NET_BUFFER_LIST do pacote IPv6 para o qual um valor de hash é calculado.

Um driver de miniporte define o tipo de hash em uma estrutura NET_BUFFER_LIST antes de indicar os dados recebidos. Para obter mais informações, consulte Indicando que o RSS recebe dados.