Einführung in Netzringe
NET_RING-Übersicht
Ein NET_RING ist ein zirkulärer Puffer von Netzwerkdaten, der von NetAdapterCx und einem Client Treiber gemeinsam genutzt wird. Jede Warteschlange in einem Client Treiber hat zwei Ringe: einen Paketring für Core-Paketdeskriptoren und einen Fragmentring für die Fragmentdeskriptoren der einzelnen Pakete.
Weitere Informationen über Paketdeskriptoren finden Sie unter Paketdeskriptoren und Erweiterungen.
Jeder Core-Deskriptor im Paketring hat Indizes im Fragmentring, um die Fragmentdeskriptoren des jeweiligen Pakets zu finden. Eine weitere Datenstruktur, die NET_RING_COLLECTION, fasst den Paketring und den Fragmentring für eine bestimmte Warteschlange zusammen, wie im folgenden Diagramm dargestellt.
Jede Warteschlange hat ihre eigene NET_RING_COLLECTION-Struktur und folglich auch ihren eigenen Paketring, Fragmentring und Deskriptoren in diesen Ringen. Daher ist der Vorgang der Datenübertragung im Netzwerk für jede Warteschlange völlig unabhängig. Um mehr über Paket-Warteschlangen zu erfahren, lesen Sie Sende- und Empfangswarteschlangen.
Zuständigkeit für NET_RING Elemente
Jedes Element in einem NET_RING gehört entweder dem Client-Treiber oder NetAdapterCx. Die Zuständigkeit wird über drei Indizes gesteuert, die Abschnitte des NET_RING markieren. Diese Indizes werden in der folgenden Tabelle beschrieben. Der Vorgang des Verschiebens dieser Indizes wird durch die Semantik post und drain beschrieben.
NET_RING-Indexname | Beschreibung | Erforderlich für die Übertragung von Netzwerkdaten | Geändert von |
---|---|---|---|
BeginIndex | Der Beginn des Bereichs von Elementen im NET_RING, der dem NIC-Client-Treiber gehört. BeginIndex ist auch der Anfang des drain-Unterbereichs des NET_RING. Wenn BeginIndex inkrementiert wird, zieht der Treiber die Elemente aus dem Ring ab und überträgt die Zuständigkeit dafür an das Betriebssystem. | Ja | NIC-Client-Treiber |
NextIndex | Der Beginn des Unterabschnitts Post des NET_RING. NextIndex teilt den Abschnitt des Rings, den der Client-Treiber besitzt, in die Unterabschnitte post und drain. Wenn NextIndex inkrementiert wird, postet der Treiber die Puffer an die Hardware und übergibt die Puffer an den Drain-Abschnitt des Rings. | No | NIC-Client-Treiber |
EndIndex | Das Ende des Bereichs der Elemente im NET_RING, die dem NIC-Client-Treiber gehören. Client-Treiber besitzen Elemente bis zu EndIndex - 1 einschließlich. | Ja | NetAdapterCx |
Durch die Manipulation dieser Indizes während des EvtPacketQueueAdvance-Callbacks einer Paket-Warteschlange übertragen Client-Treiber Netzwerkdaten zwischen dem System und der Hardware der Netzwerkschnittstelle (NIC).
Client-Treiber besitzen jedes Element von BeginIndex bis EndIndex - 1 einschließlich. Wenn zum Beispiel BeginIndex gleich 2 und EndIndex gleich 5 ist, besitzt der Client-Treiber drei Elemente: die Elemente mit den Indexwerten 2, 3 und 4.
Wenn BeginIndex gleich EndIndex ist, besitzt der Client-Treiber keine Elemente.
NetAdapterCx stellt Elemente in den Ringpuffer ein, indem er EndIndex inkrementiert. Ein Client-Treiber leert die Puffer und gibt die Zuständigkeit für die Elemente zurück, indem er BeginIndex erhöht.
NextIndex kann von Client-Treibern optional verwendet werden und dient dazu, die Unterabschnitte Post und Drain des Ringabschnitts des Client-Treibers zu trennen.
Elemente mit Indexwerten zwischen NextIndex und EndIndex - 1 einschließlich gehören dem Client, wurden aber noch nicht an die Hardware übertragen. Wenn NextIndex gleich BeginIndex ist, hat der Client-Treiber keine abgeschlossenen Puffer, die er an das Betriebssystem übertragen kann. Wenn NextIndex gleich EndIndex ist, hat der Client-Treiber keine Puffer, die er an die Hardware übertragen kann.
Da der Netzring zirkulär ist, umlaufen die Indexwerte schließlich das Ende des Puffers und kehren an den Anfang zurück. NetAdapterCx kümmert sich automatisch um den Umlauf der Indexwerte um den Ring, wenn der Client-Treiber die entsprechende Methode aufruft.
Spezifische Informationen zur Verwaltung der Elemente in Netzringen finden Sie unter Verwaltung von Netzringelementen.
Senden und Empfangen von Netzwerkdaten mit Netzringen
In den folgenden Themen finden Sie weitere Informationen und Code-Beispiele zum Senden und Empfangen von Netzwerkdaten in Netzringen.