2010-10-22 5 views

Antwort

23

Dies soll verhindern, dass Pakete falsch erkannt werden.

Wenn die Fenstergröße größer als die Hälfte des Sequenznummernraums ist, dann kann der Absender, wenn ein ACK verloren geht, neue Pakete senden, von denen der Empfänger glaubt, dass sie erneut gesendet werden.

Wenn beispielsweise unser Sequenznummernbereich 0-3 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, B erwartet nun die nächsten Pakete Sequenznummern haben, 3, 0 und 1.

Aber, die 0 und 1, die A sendet sind Neuübertragungen tatsächlich, so erhält B sie sind außer Betrieb.

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

+0

Gute Erklärung. Was ich übersehen habe ist, dass der Absender (A) immer #window size Pakete auf einmal sendet. – Mohammad

+0

Gemäß der Größe des Empfängerfensters <= n/2, wobei "n" die Folgenummern des Senderfensters ist. Dann sollten wir Receiver Window Size = 1 immer verwenden, was effizienter wäre. Ist es nicht? – rachitmanit

8

Der Sequenzraum wird nach Erreichen der maximalen Anzahl auf Null gesetzt. Betrachten Sie die Ecke Fall, wo alle ACKs sind verloren - Sender nicht bewegt sein Fenster, aber Empfänger tut (da es nicht weiß, der Absender ist nicht die ACKs). Wenn wir die Fenstergröße nicht auf die Hälfte des Sequenzraums beschränken, erhalten wir überlappende Sender- "gesendet, aber nicht bestätigt" und Empfänger "gültige neue" Sequenzräume. Dies würde dazu führen, dass erneute Übertragungen als neue Pakete interpretiert werden.

3

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

Ermöglicht bei einem offensichtlichen aussehen scheitern Szenario:

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

0,1,2,0 < - modulo wrap. Wenn wir ein Paket mit einem Seq von 0 bekommen. Ist es das erste Paket oder das vierte? Keine Ahnung. Dieses Problem tritt nun auf, wenn die Fenstergröße größer als die Hälfte des Sequenznummernraums ist. Warum? Weil es immer die Möglichkeit gibt, dass der Empfänger eine Sequenznummer betrachtet, die in einem Paket enthalten sein kann, das von dem Absender kommt, der NEU oder ALT ist. Passiert es immer? Nein.Aber wenn es funktioniert, dann ist hier, was passiert:

Fall 1:

Empfängerfenster nach richtig Empfangen von Paketen 0,1,2. 0,1,2, [3,0,1], 2 Aber was ist, wenn die ACKs verloren gehen? Nun, der Absender wird 0,1,2 erneut senden. Aber sind 0,1 OLD oder NEW? 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

Nun empfängt der Empfänger die acks alle bis auf einen richtig. Lasst uns den zweiten wählen (1). Jetzt wird es 1 erneut senden. Aber der Empfänger schaut auf 1! Ist das also das Neue, wie es erwartet (Nein), oder das Alte?

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

Schauen Sie, was passiert, wenn wir die Sequenznummer Raum zu erhöhen, sagen 6.

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

Egal, wie wir das Fenster positionieren, es ist nie gefährdet, ein Paket mit einer alten Sequenznummer zu erhalten.

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

Durch die Zeit, die Fenster um hüllt, sind wir zuversichtlich, dass wir die vorherigen, um erhalten.

1

Dieser Link hat eine Animation, die die einzelnen Schritte des Protokolls geht durch, warum die Fenstergröße Angelegenheiten zu erklären:

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

Grundsätzlich, wenn die Fenstergröße zu hoch ist, dann Korruption bei der Übertragung kann zu falschen Annahmen führen und im Endergebnis zu Datenkorruption führen.

+0

Bitte bearbeiten Sie Ihre Antwort, um die Frage tatsächlich zu beantworten, anstatt den Leuten zu sagen, wo sie die Antwort finden können. –

+0

Bitte geben Sie die wesentlichen Teile der Antwort aus den Referenzlinks an, da die Antwort ungültig werden kann, wenn sich die verknüpften Seiten ändern. – DavidPostill

+0

@PetterFriberg Äh, was? Haben Sie sich die verlinkte Seite angesehen? Es erklärt, warum die Fenstergröße wichtig ist. Es ist kein Spam, nur NAA. –

Verwandte Themen