Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Überblick
Eine NIC oder ihr Miniporttreiber verwendet die RSS-Hashfunktion, um einen RSS-Hashwert zu berechnen.
Durch übergeordnete Treiber werden der Hashtyp, die Funktion und die Tabelle festgelegt, um Verbindungen CPUs zuzuweisen. Weitere Informationen finden Sie unter RSS-Konfiguration.
Die Hashfunktion kann eine der folgenden Sein:
- NdisHashFunctionToeplitz
- NdisHashFunctionReserved1
- NdisHashFunctionReserved2
- NdisHashFunctionReserved3
Hinweis
Derzeit ist NdisHashFunctionToeplitz die einzige Hashfunktion, die miniport-Treibern zur Verfügung steht. Die anderen Hashfunktionen sind für NDIS reserviert.
Ein Miniporttreiber sollte die Hashfunktion und den Wert identifizieren, die er in jeder NET_BUFFER_LIST Struktur verwendet, bevor der Treiber empfangene Daten angibt. Weitere Informationen finden Sie unter Angeben von RSS-Empfangsdaten.
Beispiele
Die folgenden vier Pseudocodebeispiele zeigen, wie der Hashwert NdisHashFunctionToeplitz berechnet wird. Diese Beispiele stellen die vier möglichen Hashtypen dar, die für NdisHashFunctionToeplitz verfügbar sind. Weitere Informationen zu Hashtypen finden Sie unter RSS-Hashingtypen.
Um die Beispiele zu vereinfachen, ist ein generalisierter Algorithmus erforderlich, der einen Eingabebytestrom verarbeitet. Spezifische Formate für die Bytedatenströme werden weiter unten in den vier Beispielen definiert.
Der Überlauftreiber stellt dem Miniporttreiber für die Verwendung in der Hashberechnung einen geheimen Schlüssel (K) bereit. Der Schlüssel ist 40 Bytes (320 Bit) lang. Weitere Informationen zum Schlüssel finden Sie unter RSS-Konfiguration.
Bei einem Eingabearray, das n Byte enthält, wird der Bytedatenstrom wie folgt definiert:
input[0] input[1] input[2] ... input[n-1]
Das linksste Byte ist eingabe[0], und das wichtigste Bit der Eingabe[0] ist das linksste Bit. Das rechteste Byte ist die Eingabe[n-1], und das am wenigsten signifikante Bit der Eingabe[n-1] ist das rechteste Bit.
In Anbetracht der vorstehenden Definitionen wird der Pseudocode für die Verarbeitung eines allgemeinen Eingabebytestroms wie folgt definiert:
ComputeHash(input[], n)
result = 0
For each bit b in input[] from left to right
{
if (b == 1) result ^= (left-most 32 bits of K)
shift K left 1 bit position
}
return result
Der Pseudocode enthält Einträge des Formulars @n-m. Diese Einträge identifizieren den Bytebereich jedes Elements im TCP-Paket.
Beispiel-Hashberechnung für IPv4 mit dem TCP-Header
Verketten Sie die Felder "SourceAddress", "DestinationAddress", "SourcePort" und "DestinationPort" des Pakets in ein Bytearray, wobei die Reihenfolge erhalten bleibt, in der sie im Paket aufgetreten sind:
Input[12] = @12-15, @16-19, @20-21, @22-23
Result = ComputeHash(Input, 12)
Beispielhashberechnung nur für IPv4
Verketten Sie die Felder "SourceAddress" und "DestinationAddress" des Pakets in ein Bytearray.
Input[8] = @12-15, @16-19
Result = ComputeHash(Input, 8)
Beispiel-Hashberechnung für IPv6 mit dem TCP-Header
Verketten Sie die Felder "SourceAddress", "DestinationAddress", "SourcePort" und "DestinationPort" des Pakets in ein Bytearray, wobei die Reihenfolge beibehalten wird, in der sie im Paket aufgetreten sind.
Input[36] = @8-23, @24-39, @40-41, @42-43
Result = ComputeHash(Input, 36)
Beispielhashberechnung nur für IPv6
Verketten Sie die Felder "SourceAddress" und "DestinationAddress" des Pakets in ein Bytearray.
Input[32] = @8-23, @24-39
Result = ComputeHash(Input, 32)