Ich möchte wissen, wie diese Protokolle erkennen können, dass bei der Datenübertragung ein Fehler aufgetreten ist. Danke
Antworten
Zu viele Anzeigen?Es gibt verschiedene Fehler, die auftreten können:
- Falsche Reihenfolge der Pakete
- Verlust von Paketen
- Beschädigte Daten innerhalb des Pakets
- Phantom-Pakete (Empfänger erhält Pakete, die nie gesendet wurden)
UDP bietet nur einen Mechanismus zur Überwindung der Datenverfälschung (bei IPv4 eine optionale Funktion, bei IPv6 obligatorisch).
Verfälschung von Daten
UDP ist nur dann resistent gegen die Verfälschung von Daten in Paketen, wenn das Prüfsummenfeld im Kopf jedes Pakets verwendet wird. Im Grunde genommen nimmt es den Header, den Paketinhalt und einige weitere Informationen (wie IP-Adressen), interpretiert diese als eine lange Liste von 16-Bit-Wörtern im Einser-Komplement und summiert sie zusammen UDP-Prüfsumme .
TCP verfolgt einen ähnlichen Ansatz, um Datenverfälschungen zu bekämpfen.
Alle anderen Probleme
TCP hat sogenannte Sequenznummern für jedes Paket. Die Sequenznummer adressiert Bytes, wenn also der Sender sagt "dies ist das Paket mit der Sequenznummer 102", sagt er, dass das von ihm gesendete Paket mit dem Byte 102 des Streams beginnt. Der Empfänger sendet dann eine Bestätigung an den Empfänger. Hat das Paket beispielsweise eine Länge von 10 Bytes, sendet der Empfänger ein Ack mit der Sequenznummer 112, was bedeutet "ich erwarte, dass das nächste zu empfangende Paket mit der Sequenznummer 112 beginnt". Jedes Paket, das eine andere Sequenznummer hat, ist entweder ein Duplikat (zu niedrig) oder ein verloren gegangenes Paket (empfangene Sequenznummer ist zu hoch) oder es ist ein Phantom (totale Diskrepanz zwischen erwarteter und empfangener Sequenznummer). Der Empfänger weiß also in allen Fällen, in denen die Sequenznummer nicht übereinstimmt, dass etwas schief läuft und kann darauf reagieren (unterscheidet sich von anderen TCP-Versionen).
Der Absender wartet auf die Bestätigungen des Empfängers. Erhält er für eine bestimmte Zeit kein erwartetes Ack, sendet er die Pakete erneut, da er davon ausgeht, dass die Pakete auf dem Weg verloren gegangen sind.
Dies ist nur eine sehr kurze Erklärung. Das Thema ist etwas größer als hier beschrieben ;)
In der IP-Protokoll Ebene (auf der sowohl UDP als auch TDP basieren), gibt es eine Prüfsumme, die bestätigt, dass der Inhalt des Pakets gültig ist. Es gibt jedoch Situationen, in denen bestimmte Fehler pas durch diese Prüfsumme erkannt.
In der Regel wird auf einer höheren Ebene (z. B. bei der Übertragung einer Datei) ein robusterer Hash für den Inhalt der Datei berechnet. Dies kann für die gesamte Datei oder für einzelne Blöcke der Datei von bestimmter Größe (in der Regel viel größer als ein einzelnes IP-Paket) geschehen.
Wenn ich mich an verschiedene Kurse erinnere, hatte Greg mit der Prüfsumme als eine der wenigen Quellen zur Datenüberprüfung recht. Allerdings ist UDP (so wie es konzipiert ist) nicht immer 100% zuverlässig. Das macht es perfekt für das Streaming von Daten (z. B. Webcams), da der Verlust eines Frames keine große Sache ist. Während dies bei TCP als Fehler gewertet würde (der Rahmen müsste dann erneut gesendet werden, was alle folgenden Rahmen verzögern würde), kümmert sich UDP nicht wirklich darum, es sei denn, es ist entsprechend konfiguriert.
Unter der Voraussetzung, dass alle Daten empfangen werden müssen, stellt das betreffende Protokoll auf der anfragenden Seite sicher, dass jedes Paket gesendet wird, normalerweise in der richtigen Reihenfolge. Hier kommt die Prüfsumme ins Spiel, da jeder Teil auf seine Korrektheit hin überprüft wird (kleines Problem, wenn der Datenteil eine gerade Anzahl von Fehlern aufweist, da die Prüfsumme dann ein falsches positives Ergebnis liefern kann, aber das ist ziemlich selten). Jedes Mal, wenn ein Teil fehlschlägt, wird er erneut angefordert, bis er sowohl empfangen wird als auch die Prüfsumme ein positives Ergebnis liefert. Sobald ein Teil empfangen wurde, antwortet das Protokoll des Empfängers dem Sender, dass alles in Ordnung ist. Erhält der Absender diese Antwort nicht innerhalb einer bestimmten Zeitspanne, sendet er das Paket erneut.