Sicherstellung der Paketzustellung in UDP

7

ich benutze 2 Computer mit einer Anwendung zum Senden und Empfangen von UDP-Datagrammen.
Es gibt keine Flusskontrolle (ICMP deaktiviert)
häufig, wenn ich eine Datei als udp Datagramme über die Anwendung sende, bekomme ich 2 Pakete, die ihre Reihenfolge ändern und dafür - packetloss.

gibt es eine Möglichkeit, um sicherzustellen, dass Winsock und send () die Pakete auf die gleiche Weise senden, wie sie dort angekommen sind?
oder macht das OS das? ie ist deaktiviert und eine Art Firewall und es ist kein Hardwareschalter zwischen den Computern angeschlossen (sie sind direkt verdrahtet). Netzwerkgerätekonfiguration benötigt?
Danke

    
Davidallencoe 19.09.2010, 09:14
quelle

4 Antworten

10

UDP ist ein leichtgewichtiges Protokoll, das per Entwurf keine Dinge wie Paketsequenzierung behandelt. TCP ist eine bessere Wahl, wenn Sie eine zuverlässige Paketzustellung und -sequenzierung wünschen.

UDP ist im Allgemeinen für Anwendungen ausgelegt, bei denen der Paketverlust akzeptabel oder vorzuziehen ist gegenüber der Verzögerung, die TCP erleidet, wenn es Pakete erneut anfordern muss. UDP wird daher häufig für das Medienstreaming verwendet.

Wenn Sie UDP nur eingeschränkt verwenden können, müssen Sie eine Methode entwickeln, mit der Sie die Out-of-Sequence-Pakete identifizieren und neu ordnen können.

    
PaulG 19.09.2010 09:22
quelle
7

UDP garantiert nicht, dass Ihre Pakete in der richtigen Reihenfolge ankommen. (Es garantiert nicht einmal, dass Ihre Pakete überhaupt ankommen.) Wenn Sie diese Robustheit benötigen, sind Sie mit TCP besser dran. Alternativ könnten Sie Sequenzmarker zu Ihren Datagrammen hinzufügen und sie am anderen Ende neu anordnen, aber warum das Rad neu erfinden?

    
crazyscot 19.09.2010 09:48
quelle
4
Gibt es eine Möglichkeit, sicherzustellen, dass winsock und send () die Pakete auf die gleiche Weise senden, wie sie dort angekommen sind?

Es heißt TCP.

Alternativ versuchen Sie ein zuverlässiges UDP-Protokoll wie UDT . Ich nehme an, Sie könnten auf einer kleinen eingebetteten Plattform sein, also wollen Sie ein kompakteres Protokoll wie Bell Labs RUDP .

    
Steve-o 20.09.2010 13:33
quelle
0
  

Es gibt keine Flusskontrolle (ICMP deaktiviert)

Sie können Ihre eigene Flusskontrolle mit UDP implementieren:

  • Senden Sie ein oder mehrere UDP-Pakete
  • Warte auf Bestätigung (gesendet als andere UDP-Pakete vom Empfänger zum Sender)
  • Wiederholen Sie den Vorgang wie oben

Weitere Einzelheiten finden Sie unter Fensterprotokoll verschieben .

[Dies wäre zusätzlich zu mit einer Sequenznummer in den von Ihnen gesendeten Paketen.]

    
ChrisW 03.10.2010 19:53
quelle

Tags und Links