Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Verstehen Sie das zuverlässige Übertragungsprinzip von TCP in einem Artikel
Die IP-Schicht unter TCP ist eine Best-Effort-Zustellung und unzuverlässig, daher muss TCP selbst eine zuverlässige Übertragung durchführen. Als Nächstes beginnen wir mit einem einfachen Stop-and-Wait-Protokoll, um zu erklären, wie eine zuverlässige Übertragung implementiert wird. Wir müssen auf mehrere Merkmale einer zuverlässigen Übertragung achten: kein Verlust, keine Duplizierung und ordnungsgemäße Ankunft.
Beachten Sie, dass TCP nicht das Stop-and-Wait-Protokoll verwendet, um eine zuverlässige Übertragung zu erreichen.
Stop Waiting Protocol
Die Datenübertragungseinheit der Transportschicht wird als Segment bezeichnet. Der Einfachheit halber werden sie im Folgenden alle als Gruppen bezeichnet.
Das Prinzip des Stop-and-Wait-Protokolls ist sehr einfach. Nachdem Sie ein Paket gesendet haben, stoppen Sie das Senden, warten Sie auf die Bestätigung des vorherigen Pakets und fahren Sie dann mit dem Senden der folgenden Pakete fort.
Das Folgende wird anhand verschiedener Situationen analysiert:
Fehlerfreie Situation
Die fehlerfreie Situation ist sehr einfach, wie unten gezeigt. Nachdem jedes Paket gesendet wurde, stoppt es das Senden und wartet auf die Bestätigung des Pakets, bevor es mit dem Senden nachfolgender Pakete fortfährt.
Ein Fehler tritt auf
Es gibt zwei Situationen, in denen ein Fehler auftritt: Die erste besteht darin, dass das gesendete Paket nicht erfolgreich an die Zieladresse zugestellt wurde, und die andere darin, dass das übertragene Datenpaket einen Fehler aufweist Fehler. Lassen Sie uns anhand der Abbildung die beiden Situationen analysieren. Schauen wir uns zunächst die Funktionsweise von B an: Wenn das Paket falsch ist, verwirft B das Paket, nachdem es empfangen wurde Es passiert nichts. Tun Sie es nicht (A wird nicht benachrichtigt, dass ein falsches Paket empfangen wurde). Wenn B das M1-Paket nicht erhält, weiß es nichts und wird keine Maßnahmen ergreifen.
Schauen wir uns an, was A als nächstes tut: Nachdem A das Paket gesendet hat, aber Bs Bestätigung des M1-Pakets nicht erhalten hat, muss das M1-Paket nach Ablauf der Wartezeit erneut gesendet werden. Um eine Timeout-Neuübertragung zu implementieren, müssen Sie einen Timeout-Timer festlegen. Wenn ein gesendetes Paket vor Ablauf des Timeout-Zeitraums bestätigt wird, wird der Timeout-Timer zurückgesetzt, andernfalls muss das Paket erneut übertragen werden.
Es sind einige Punkte zu beachten:A Nach dem Senden eines Pakets muss eine Kopie des Pakets für die Timeout-Neuübertragung gespeichert werden. Wenn eine Bestätigung für dieses Paket empfangen wird, kann die Kopie des Pakets verworfen werden.
Sie müssen jede Gruppe nummerieren, damit Sie den Ankunftsstatus jeder Gruppe kennen.
Das Timeout sollte etwas länger als die durchschnittliche Übertragungszeit eingestellt werden, um unnötige Neuübertragungen zu vermeiden.
Sehen Sie sich zunächst die Situation des Bestätigungsverlusts an. Gruppe B von A hat sie erhalten und eine Bestätigung an A gesendet, aber die Bestätigung ging verloren und A hat sie nicht erhalten. Da A die Bestätigung von M1 nicht erhalten hat, überträgt es M1 erneut an B, nachdem es länger als die Zeitüberschreitung gewartet hat. Zu diesem Zeitpunkt empfängt B das doppelte Paket M1 und muss zwei Vorgänge ausführen:
das doppelte Paket M1 verwerfenund die Bestätigung von M1 an A senden. Denn da A M1 erneut übertragen hat, bedeutet dies, dass A das Paket von M1 nicht empfangen hat. Daher muss B weiterhin Bestätigungen an M1 senden.
Durch den oben genannten Timeout-Neuübertragungsmechanismus kann eine zuverlässige Übertragung bei unzuverlässiger Netzwerkübertragung erreicht werden.
Kanalauslastung
Das obige Stop-and-Wait-Protokoll ist einfach, weist jedoch einen sehr großen Mangel auf: Die Kanalauslastung ist zu gering. Während des Zeitraums, in dem auf den Empfang der Bestätigung gewartet wird, ist der Kanal völlig inaktiv, was sehr verschwenderisch ist.
Um die Kanalauslastung zu verbessern, kann die Pipeline-Übertragung verwendet werden, um mehrere Pakete kontinuierlich zu senden, was die Kanalauslastung erheblich verbessern kann.
Zu den Protokollen, die die Pipeline-Übertragung nutzen, gehören das Continuous ARQ Protocol und das Window Sliding Protocol. TCP verwendet das Sliding-Window-Protokoll, um eine zuverlässige Übertragung durchzuführen.
Das obige ist der detaillierte Inhalt vonVerstehen Sie das zuverlässige Übertragungsprinzip von TCP in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!