Gewährleistung-Paket, um in UDP
Ich bin mit 2 Computern mit einer Anwendung zum senden und empfangen von udp-Datagrammen. Es gibt keine "flow control" und ICMP deaktiviert ist. Häufig, wenn ich eine Datei senden als UDP-Datagramme über die Anwendung, ich bekomme zwei Pakete, deren Reihenfolge ändern und daher - packet-loss.
Habe ich deaktiviert und firewall und es gibt keine hardware-Schalter Verbindung zwischen den Computern (Sie sind direkt verdrahtet).
Ist es ein Weg, um sicherzustellen, Winsock und send()
senden der Pakete die gleiche Weise Sie dorthin gekommen?
Oder ist das OS machen?
Oder Netzwerk-Geräte-Konfiguration benötigt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
UDP ist ein lightweight-Protokoll, die durch das design nicht behandeln Dinge wie Paket-Sequenzierung. TCP ist eine bessere Wahl, wenn Sie robuste Paket-Lieferung und-Sequenzierung.
UDP wird im Allgemeinen für Anwendungen konzipiert, wo Paket-Verlust akzeptabel ist oder vorzuziehen, um die Verzögerung der TCP verfährt, wenn es um re-request-Pakete. UDP wird daher Häufig verwendet, für Medien-streaming.
Wenn Sie zu beschränkt sind, die UDP verwenden, die Sie haben würde, eine Methode zu entwickeln, mit der Ermittlung der out-of-sequence Pakete und resequencing Sie.
UDP garantiert nicht, dass Ihre Pakete kommen in der Reihenfolge. (Es ist nicht einmal garantiert, dass Ihre Pakete kommen an alle.) Wenn Sie das Niveau der Robustheit sind Sie besser dran mit TCP. Alternativ könnte man hinzufügen, Sequenz-Marker, um Ihre Daten und ordnen Sie Sie am anderen Ende, aber warum das Rad neu erfinden?
Es nennt sich TCP.
Alternativ versuchen Sie eine zuverlässige UDP-Protokoll wie UDT. Ich vermute, Sie könnten auf einer kleinen embedded-Plattform, so dass Sie wollen ein kompakteres Protokoll wie Bell Labs RUDP.
Können Sie implementieren Ihre eigenen flow Steuerelements mit UDP:
Sehen Schiebe-Fenster-Protokoll für weitere details.
[Das wäre neben mit einer Sequenznummer in den Paketen, die Sie senden.]