it-swarm.com.de

Warum ist die Fenstergröße kleiner oder gleich der Hälfte der Sequenznummer im SR-Protokoll?

Beim selektiven Wiederholungsprotokoll muss die Fenstergröße kleiner oder gleich der halben Größe des Sequenznummernraums für das SR-Protokoll sein. Warum ist das so und wie?

19
user484457

Dies soll verhindern, dass Pakete falsch erkannt werden.

Wenn die Fenstergröße größer als die Hälfte des Sequenznummernbereichs ist, kann der Sender, falls eine ACK verloren geht, neue Pakete senden, von denen der Empfänger annimmt, dass sie erneut übertragen werden.

Wenn unser Sequenznummernbereich beispielsweise 0-3 ist und die Fenstergröße 3 ist, kann diese Situation auftreten.

A -> 0 -> B

A -> 1 -> B

A -> 2 -> B

A <- 2ack <- B (das ist verloren)

A -> 0 -> B

A -> 1 -> B

A -> 2 -> B

Nach dem verlorenen Paket erwartet B nun für die nächsten Pakete die Folgenummern 3, 0 und 1.

Die 0 und 1, die A sendet, sind jedoch tatsächlich Neuübertragungen, sodass B sie nicht in der richtigen Reihenfolge empfängt.

Durch die Begrenzung der Fenstergröße auf 2 in diesem Beispiel vermeiden wir dieses Problem, da B 2 und 3 erwartet und nur 0 und 1 erneut übertragen werden können.

23
Alan Geleynse

Der Sequenzraum wird auf Null zurückgesetzt, wenn die maximale Anzahl erreicht ist. Betrachten Sie den Eckfall, bei dem alle ACKs verloren gehen - der Sender verschiebt sein Fenster nicht, der Empfänger jedoch (da er nicht weiß, dass der Sender die ACKs nicht erhält) Wenn wir die Fenstergröße nicht auf die Hälfte des Sequenzbereichs beschränken, erhalten wir überlappende Sender, die gesendet werden, aber nicht bestätigt werden, und Empfänger, die "gültige neue" Sequenzräume sind. Dies würde dazu führen, dass Neuübertragungen als neue Pakete interpretiert werden.

8

Der Empfänger kann nicht zwischen einem alten oder einem neuen Paket unterscheiden. Der Empfänger identifiziert Pakete anhand von Sequenznummern und es gibt eine begrenzte Anzahl eindeutiger Nummern für jede Verbindung. Sie können keinen unendlichen Puffer haben. 

Schauen wir uns ein offensichtliches Fehlerszenario an: 

Die Fenstergröße ist größer als der Sequenznummernbereich. Nehmen wir an, wir haben Sequenznummern 0, 1, 2. Und unsere Fenstergröße ist 4. Dies bedeutet, dass das Fenster zwei Vorkommen von 0 hat. 

0,1,2,0 <- modulo wrap. Wenn wir ein Paket mit einem Wert von 0 erhalten. Ist es das erste oder das vierte Paket? Keine Ahnung. Dieses Problem tritt jetzt insofern auf, als die Fenstergröße größer als die Hälfte des Sequenznummernbereichs ist. Warum? Es besteht immer die Möglichkeit, dass der Empfänger eine Sequenznummer betrachtet, die in einem Paket enthalten sein kann, das vom Sender stammt, der NEU oder ALT ist. Passiert es immer Nein, aber wenn, dann passiert Folgendes:

Fall 1:

Empfängerfenster nach ordnungsgemäßem Empfang von Paketen 0,1,2. 0,1,2, [3,0,1], 2 Aber was ist, wenn die gesendeten ACKs verloren gehen? Nun, der Absender wird 0,1,2 erneut senden. Sind aber 0,1 alt oder neu? Der Empfänger kann es nicht sagen. 

Fall 2:

Gleiches Fenster am Empfangsende. Die drei Pakete werden empfangen. 

0,1,2, [3,0,1], 2 

Jetzt empfängt der Empfänger ALLE Acks, aber EINEN richtig. Lass uns den zweiten auswählen (1). Jetzt wird es 1 erneut gesendet. Der Empfänger schaut jedoch auf 1! Ist dies also das Neue, wie es erwartet (Nein) oder das Alte?

Um sicherzustellen, dass das Fenster niemals Sequenznummern erwartet, die möglicherweise von möglicherweise ausstehenden Paketen verwendet werden könnten (entweder von einer normalen Übertragung oder einer erneuten Übertragung einer fehlenden Bestätigung), müssen wir entweder die Fenstergröße verringern oder die Sequenznummern erhöhen. 

Schauen Sie sich an, was passiert, wenn Sie den Sequenznummernraum auf 6 erhöhen. 

0,1,2,3,4,5. 

Unabhängig davon, wie wir das Fenster positionieren, besteht niemals die Gefahr, dass ein Paket mit einer alten Sequenznummer empfangen wird.

0,1,2, [3,4,5] 0,1 ...

Wenn sich das Fenster dreht, sind wir uns sicher, dass wir die vorherigen in der richtigen Reihenfolge erhalten haben. 

3
alan

Dieser Link enthält eine Animation, die durch die einzelnen Schritte des Protokolls führt, um zu erklären, warum die Fenstergröße wichtig ist:

http://webmuseum.mi.fh-offenburg.de/index.php?view=exh&src=73

Wenn die Fenstergröße zu groß ist, kann eine fehlerhafte Übertragung falsche Annahmen verursachen und im Endergebnis zu einer Beschädigung der Daten führen.

1
anonymous