Share via


Einführung in Netzringe

NET_RING Übersicht

Ein NET_RING ist ein zirkulärer Puffer von Netzwerkdaten, der zwischen NetAdapterCx und einem Clienttreiber gemeinsam genutzt wird. Jede Paketwarteschlange in einem Clienttreiber verfügt über zwei Ringe: einen Paketring für Kernpaketdeskriptoren und einen Fragmentring für die Fragmentdeskriptoren jedes Pakets.

Weitere Informationen zu Paketdeskriptoren finden Sie unter Paketdeskriptoren und -erweiterungen.

Jeder Kerndeskriptor im Paketring verfügt über Indizes in den Fragmentring, um die Fragmentdeskriptoren dieses Pakets zu suchen. Eine andere Datenstruktur, die NET_RING_COLLECTION, gruppiert den Paketring und den Fragmentring für eine bestimmte Paketwarteschlange, wie im folgenden Diagramm dargestellt.

Diagramm, das das Layout mit mehreren Ringen einer NET_RING_COLLECTION Struktur zeigt, einschließlich eines Paketrings und eines Fragmentrings.

Jede Paketwarteschlange verfügt über eine eigene NET_RING_COLLECTION Struktur und folglich über einen eigenen Paketring, Fragmentring und Deskriptoren in diesen Ringen. Daher ist der Netzwerkdatenübertragungsvorgang jeder Paketwarteschlange völlig unabhängig. Weitere Informationen zu Paketwarteschlangen finden Sie unter Übertragen und Empfangen von Warteschlangen.

NET_RING Elementbesitz

Jedes Element in einer NET_RING ist entweder im Besitz des Clienttreibers oder netAdapterCx. Der Besitz wird durch drei Indizes gesteuert, die Abschnitte des NET_RING markieren. Diese Indizes werden in der folgenden Tabelle beschrieben. Der Akt des Verschiebens dieser Indizes wird durch Post- und Drain-Semantik beschrieben.

NET_RING Indexname BESCHREIBUNG Erforderlich für die Übertragung von Netzwerkdaten Geändert von
BeginIndex Der Anfang des Bereichs von Elementen im NET_RING , den der NIC-Clienttreiber besitzt. BeginIndex ist auch der Anfang des Abflussunterabschnitts des NET_RING. Wenn BeginIndex erhöht wird, entlädt der Treiber die Elemente aus dem Ring und überträgt deren Besitz an das Betriebssystem. Ja NIC-Clienttreiber
NextIndex Der Anfang des Post-Unterabschnitts des NET_RING. NextIndex unterteilt den Abschnitt des Rings, den der Clienttreiber besitzt, in die Unterabschnitte post und drain. Wenn NextIndex inkrementiert wird, postet der Treiber die Puffer an die Hardware und überträgt die Puffer an den Abflussabschnitt des Rings. Nein NIC-Clienttreiber
Endindex Das Ende des Bereichs von Elementen im NET_RING , den der NIC-Clienttreiber besitzt. Clienttreiber besitzen Elemente bis zu EndIndex – 1 inklusive. Ja NetAdapterCx

Beim Bearbeiten dieser Indizes während des EvtPacketQueueAdvance-Rückrufs einer Paketwarteschlange übertragen Clienttreiber Netzwerkdaten zwischen dem System und der Netzwerkschnittstelle Karte Hardware (NIC).

Clienttreiber besitzen jedes Element von BeginIndex bis EndIndex – einschließlich 1 . Wenn beispielsweise BeginIndex 2 und EndIndex 5 ist, besitzt der Clienttreiber drei Elemente: die Elemente mit den Indexwerten 2, 3 und 4.

Wenn BeginIndex gleich EndIndex ist, besitzt der Clienttreiber keine Elemente.

NetAdapterCx postet Elemente in den Ringpuffer, indem es EndIndex inkrementiert. Ein Clienttreiber entlädt die Puffer und gibt den Besitz der Elemente zurück, indem er BeginIndex vorantreibt.

NextIndex ist für Clienttreiber optional und wird zur Vereinfachung bei der Trennung der Unterabschnitte post und drain des Abschnitts des Clienttreibers des Rings bereitgestellt.

Elemente mit Indexwerten zwischen NextIndex und EndIndex – einschließlich 1 gehören dem Client, wurden aber noch nicht auf der Hardware bereitgestellt. Wenn NextIndex gleich BeginIndex ist, verfügt der Clienttreiber über keine vollständigen Puffer, die an das Betriebssystem übertragen werden können. Wenn NextIndex gleich EndIndex ist, verfügt der Clienttreiber über keine Puffer, die auf der Hardware bereitgestellt werden können.

Da der Netzring kreisförmig ist, werden die Indexwerte schließlich um das Ende des Puffers herum gewickelt und kehren zum Anfang zurück. NetAdapterCx übernimmt automatisch das Umschließen der Indexwerte um den Ring, wenn der Clienttreiber die entsprechende Methode aufruft.

Spezifische Informationen zum Verwalten der Elemente in Netzringen finden Sie unter Verwaltung von Net Ring-Elementen.

Senden und Empfangen von Netzwerkdaten mit Netzringen

Weitere Informationen und Codebeispiele zum Senden und Receving von Netzwerkdaten in Netzringen finden Sie in den folgenden Themen.

Senden von Netzwerkdaten mit Netzringen

Empfangen von Netzwerkdaten mit Netzringen