共用方式為


RSS 哈希類型

概述

RSS 哈希類型會指定 NIC 必須用來計算 RSS 哈希值的接收網路數據部分。

上層驅動程式會設定哈希類型、函式和間接尋址表。 上層驅動程式設定的哈希類型可以是小埠驅動程式可支援的類型子集。 如需詳細資訊,請參閱 RSS 組態

哈希類型是下列旗標之有效組合的 OR:

  • 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 的組合)

NIC 必須支援 IPv4 集合中的其中一個組合。 其他集合和組合是選擇性的。 NIC 可以一次支援多個集合。 在此情況下,收到的數據類型會決定 NIC 所使用的哈希類型。

一般而言,如果 NIC 無法正確解譯已接收的數據,則它不得計算哈希值。 例如,如果 NIC 只支援 IPv4,而且收到無法正確解譯的 IPv6 封包,則它不得計算哈希值。 如果 NIC 收到不支援之傳輸類型的封包,則它不得計算哈希值。 例如,如果 NIC 在應該計算 TCP 封包的哈希值時收到 UDP 封包,則它不得計算哈希值。 在此情況下,封包會以非 RSS 案例中的處理方式處理。 如需非 RSS 接收處理的詳細資訊,請參閱 非 RSS 接收處理

IPv4 哈希類型組合

IPv4 集合中有效的哈希類型組合如下:

NDIS_HASH_IPV4

如果單獨設定此旗標,NIC 應該會透過下列 IPv4 標頭字段計算哈希值:

  • 來源-IPv4-Address
  • 目的地-IPv4-Address

注意

如果 NIC 收到同時具有 IP 和 TCP 標頭的封包,則不應該一律使用NDIS_HASH_TCP_IPV4。 如果是分散的IP封包,則必須使用NDIS_HASH_IPV4。 這包括包含IP和TCP標頭的第一個片段。

NDIS_HASH_TCP_IPV4

如果單獨設定此旗標,NIC 應該剖析收到的數據,以識別包含 TCP 區段的 IPv4 封包。

NIC 必須識別並略過任何存在的IP選項。 如果 NIC 無法略過任何 IP 選項,則不應該計算哈希值。

NIC 應計算下列欄位的哈希值:

  • 來源-IPv4-Address
  • 目的地 -IPv4-Address
  • 來源 TCP 連接埠
  • 目的地 TCP 連接埠

NDIS_HASH_UDP_IPV4

如果單獨設定此旗標,NIC 應該剖析收到的數據,以識別包含 UDP 數據報的 IPv4 封包。

NIC 必須識別並略過任何存在的IP選項。 如果 NIC 無法略過任何 IP 選項,則不應該計算哈希值。

NIC 應計算下列欄位的哈希值:

  • 來源-IPv4-Address
  • 目的地-IPv4-Address
  • 來源 UDP 連接埠
  • 目的地 UDP 連接埠

NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV4

如果設定此旗標組合,NIC 應該執行針對NDIS_HASH_TCP_IPV4案例指定的哈希計算。 不過,如果封包不包含 TCP 標頭,NIC 應該計算為NDIS_HASH_IPV4案例指定的哈希值。

NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4

如果設定此旗標組合,NIC 應該執行針對NDIS_HASH_UDP_IPV4案例指定的哈希計算。 不過,如果封包不包含UDP標頭,NIC應該計算為NDIS_HASH_IPV4案例指定的哈希值。

NDIS_HASH_TCP_IPV4 |NDIS_HASH_UDP_IPV4 |NDIS_HASH_IPV4

如果設定此旗標組合,NIC 應該執行封包中傳輸所指定的哈希計算。 不過,如果封包不包含 TCP 或 UDP 標頭,NIC 應該計算為NDIS_HASH_IPV4案例指定的哈希值。

IPv6 哈希類型組合

IPv6 集合中有效的哈希類型組合如下:

NDIS_HASH_IPV6

如果單獨設定此旗標,NIC 應該會透過下列欄位計算哈希:

  • 來源-IPv6-Address
  • 目的地-IPv6-Address

NDIS_HASH_TCP_IPV6

如果單獨設定此旗標,NIC 應該剖析收到的數據,以識別包含 TCP 區段的 IPv6 封包。 NIC 必須識別並略過封包中存在的任何 IPv6 擴充功能標頭。 如果 NIC 無法略過任何 IPv6 擴充功能標頭,則不應該計算哈希值。

NIC 應計算下列欄位的哈希值:

  • Source-IPv6 -Address
  • Destination-IPv6 -Address
  • 來源 TCP 連接埠
  • 目的地 TCP 連接埠

NDIS_HASH_UDP_IPV6

如果單獨設定此旗標,NIC 應該剖析收到的數據,以識別包含 UDP 數據報的 IPv6 封包。 NIC 必須識別並略過封包中存在的任何 IPv6 擴充功能標頭。 如果 NIC 無法略過任何 IPv6 擴充功能標頭,則不應該計算哈希值。

NIC 應計算下列欄位的哈希值:

  • 來源-IPv6-Address
  • 目的地-IPv6-Address
  • 來源 UDP 連接埠
  • 目的地 UDP 埠口

NDIS_HASH_TCP_IPV6 |NDIS_HASH_IPV6

如果設定這個旗標組合,NIC 應該執行針對NDIS_HASH_TCP_IPV6案例指定的哈希計算。 不過,如果封包不包含 TCP 標頭,NIC 應該按照 NDIS_HASH_IPV6 案例的規定來計算哈希。

例如,如果封包已分散,則它可能不會包含 TCP 標頭。 在此情況下,NIC 應該只會透過IP標頭計算哈希。

NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6

如果設定此旗標組合,NIC 應該執行針對NDIS_HASH_UDP_IPV6案例指定的哈希計算。 不過,如果封包不包含UDP標頭,NIC應該計算為NDIS_HASH_IPV6案例指定的哈希。

例如,如果封包已分散,則它可能不會包含 UDP 標頭。 在此情況下,NIC 應該只會透過IP標頭計算哈希。

NDIS_HASH_TCP_IPV6 |NDIS_HASH_UDP_IPV6 |NDIS_HASH_IPV6

如果設定此旗標組合,NIC 應該執行封包中傳輸所指定的哈希計算。 不過,如果封包不包含 TCP 或 UDP 標頭,NIC 應該計算NDIS_HASH_IPV6案例中指定的哈希值。

例如,如果封包已分散,則它可能不會包含 TCP 或 UDP 標頭。 在此情況下,NIC 應該只會透過IP標頭計算哈希。

具有擴展標頭哈希類型組合的IPv6

IPv6 中已設定延伸模組標頭的有效組合如下:

NDIS_HASH_IPV6_EX

如果單獨設定此旗標,NIC 應該會透過下列欄位計算哈希:

  • IPv6 目的地選項標頭中來自住家位址選項的主位址。 如果延伸模組標頭不存在,請使用來源 IPv6 位址。
  • 來自相關聯擴充功能標頭之 Routing-Header-Type-2 中包含的 IPv6 位址。 如果延伸模組標頭不存在,請使用目的地 IPv6 位址。

NDIS_HASH_TCP_IPV6_EX

如果單獨設定此旗標,NIC 應該會透過下列欄位計算哈希:

  • 在 IPv6 目的地選項標頭中的家庭地址選項下的住家地址。 如果延伸模組標頭不存在,請使用來源 IPv6 位址。
  • 來自相關聯擴充功能標頭之 Routing-Header-Type-2 中包含的 IPv6 位址。 如果延伸模組標頭不存在,請使用目的地 IPv6 位址。
  • 來源 TCP 連接埠
  • 目的地 TCP 連接埠

NDIS_HASH_UDP_IPV6_EX

如果單獨設定此旗標,NIC 應該會透過下列欄位計算哈希:

  • IPv6 目的地選項標頭中來自住家位址選項的主位址。 如果延伸模組標頭不存在,請使用來源 IPv6 位址。
  • 來自關聯擴充標頭中 Routing-Header-Type-2 所包含的 IPv6 位址。 如果延伸模組標頭不存在,請使用目的地 IPv6 位址。
  • 來源 UDP 連接埠
  • 目的地 UDP 連接埠

NDIS_HASH_TCP_IPV6_EX |NDIS_HASH_IPV6_EX

如果設定此旗標組合,NIC 應該執行為NDIS_HASH_TCP_IPV6_EX案例指定的哈希計算。 不過,如果封包不包含 TCP 標頭,NIC 應該計算為NDIS_HASH_IPV6_EX案例指定的哈希。

NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX

如果設定此旗標組合,NIC 應該執行針對NDIS_HASH_UDP_IPV6_EX案例指定的哈希計算。 不過,如果封包不包含UDP標頭,NIC應該計算為NDIS_HASH_IPV6_EX案例指定的哈希。

NDIS_HASH_TCP_IPV6_EX |NDIS_HASH_UDP_IPV6_EX |NDIS_HASH_IPV6_EX

如果設定此旗標組合,NIC 應該執行封包傳輸所指定的哈希計算。 不過,如果封包不包含 TCP 或 UDP 標頭,NIC 應該計算為NDIS_HASH_IPV6_EX案例指定的哈希。

注意

如果微型埠驅動程式報告 NIC 支援 NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX 及/或 NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX,則該 NIC 必須根據通訊協定驅動程式設定的 IPv6 擴充哈希類型,計算哈希值(根據 IPv6 延伸標頭中的字段)。 NIC 可以在計算哈希值的 IPv6 封包NET_BUFFER_LIST結構中儲存擴充哈希類型或一般哈希類型。

迷你埠驅動程式會先在 NET_BUFFER_LIST 結構中設定哈希類型,再指出已接收的數據。 如需詳細資訊,請參閱 表示 RSS 接收資料的說明