Beispiele für die Zusammenführung von Empfangssegmenten
In diesem Abschnitt wird der Koalescingalgorithmus anhand von Beispielen für Segmente veranschaulicht, die in der Reihenfolge empfangen und in einem einzelnen verzögerten Prozeduraufruf (DPC) verarbeitet werden.
Auf dieser Seite werden X und X' zum Bezeichnen aufeinander folgender Segmente verwendet. Alle anderen Segment- und SCU-Felder (Single Coalesced Unit) sind wie unter Regeln für das Zusammenfügen von TCP/IP-Segmenten beschrieben.
Beispiel 1: Datensegmente
Segmentbeschreibung
10 aufeinander folgende Segmente, die derselben TCP-Verbindung angehören, werden verarbeitet. Alle folgenden Bedingungen gelten für jede:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Keines dieser Segmente generiert eine Ausnahme.
Ergebnis
Aus den 10 Segmenten wird eine einzelne SCU gebildet. Dies wird als einzelner NET_BUFFER in einem einzelnen NET_BUFFER_LIST angegeben.
Beispiel 2: Datensegmente, gefolgt von einer Ausnahme, gefolgt von Datensegmenten
Segmentbeschreibung
5 aufeinanderfolgende Segmente, die zur gleichen TCP-Verbindung gehören, werden verarbeitet. Alle folgenden Bedingungen gelten für jede:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Keines dieser Segmente generiert eine Ausnahme. Das 6. Segment ist ein doppeltes ACK-Segment mit einer TCP SACK-Option und generiert eine Ausnahme basierend auf Regel 3 in Regeln für das Zusammenfügen von TCP/IP-Segmenten.
Hinweis In diesem Fall hat die Ausnahmeregel für die Behandlung einer TCP-Option Vorrang und überschreibt somit die Zusammenführungsregel.
Zwei aufeinander folgende Segmente, die derselben TCP-Verbindung angehören, werden verarbeitet. Alle folgenden Bedingungen gelten für jede:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Keines dieser Segmente generiert eine Ausnahme.
Ergebnis
Aus den ersten 5 Segmenten wird eine einzelne SCU gebildet. Das 6. Segment bildet keine SCU.
Das 7. und 8. Segment bilden zusammen eine SCU.
Eine NET_BUFFER_LIST-Kette wird mit drei NET_BUFFER_LIST-Strukturen angegeben, die jeweils über eine einzelne NET_BUFFER verfügen. Die Reihenfolge der empfangenen Segmente wird beibehalten.
Beispiel 3: Datensegmente, gefolgt von mehreren Fensterupdates
Segmentbeschreibung
5 aufeinanderfolgende Segmente, die zur gleichen TCP-Verbindung gehören, werden verarbeitet. Alle folgenden Bedingungen gelten für jede:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Keines dieser Segmente generiert eine Ausnahme. Das 6. Segment ist ein reines ACK, bei dem es sich um ein Fensterupdate mit SEG handelt. WND = 65535, wie im folgenden Flussdiagramm gezeigt.
Das 7. Segment ist ein reines ACK, bei dem es sich um ein Fensterupdate mit SEG handelt. WND = 131070, wie im gleichen Flussdiagramm dargestellt.
Ergebnis
Aus den 7 Segmenten wird eine einzelne SCU gebildet. Dies wird als einzelner NET_BUFFER in einem einzelnen NET_BUFFER_LIST angegeben.
Die SCU. WND = 131070, und die Prüfsumme wird basierend auf diesem Wert aktualisiert.
Beispiel 4: Piggybacked ACKs gemischt mit Datensegmenten
Segmentbeschreibung
3 aufeinander folgende Segmente, die derselben TCP-Verbindung angehören, werden verarbeitet. Alle folgenden Bedingungen gelten für jede:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Keines dieser Segmente generiert eine Ausnahme. Zwei aufeinander folgende Segmente, die derselben TCP-Verbindung angehören, werden verarbeitet. Alle folgenden Bedingungen gelten für jede:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Keines dieser Segmente generiert eine Ausnahme.
Ergebnis
Aus den 5 Segmenten wird eine einzelne SCU gebildet. Dies wird als einzelner NET_BUFFER in einem einzelnen NET_BUFFER_LIST angegeben. Die SCU. ACK ist auf die letzte SEG.ACK festgelegt.