UDP - Spekulativer Zufall?



  • Hallo,

    ich arbeite mich zur Zeit ein bisschen in die Netzwerkprogrammierung mit Sockets ein und habe noch ein paar Probleme mit UDP.

    Bei UDP ist nicht sichergestellt, in welcher Reihenfolge die Pakete ankommen, es kann ggf. sogar vorkommen, dass Pakete mehrmals ankommen. Evtl. kommt ein Paket auch gar nicht an. Wenn es aber ankommt, ist der Inhalt korrekt.

    Nun zu meinem Problem. Es ist nicht ja nicht klar, wie groß die jeweiligen Pakete sind.

    Ich würde ein Protokoll nach folgendem Schema aufbauen:

    [4 Byte: Länge der Nachricht][Rest]

    Das Problem ist aber: was ist, wenn die 4 Byte bereits in 2 Pakete gesplittet werden und der hintere Teil als erstes eintrifft? Dann ist der Wert der Länge falsch.

    Wie kann ich also sicher gehen, dass gewisse Pakete in der Reihenfolge ankommen, in der sie auch sollen?

    Theoretisch kann es ja auch sein, dass der Paketinhalt immer nur 1 Byte groß ist. Kann ich einfach darauf spekulieren, dass Pakete immer min. 4 Byte groß sind aufgrund von gewissen "Standards"?

    Zur Zeit bereitet mir das nämlich gewisse Komplikationen.

    Mit freundlichen Grüßen
    - ich



  • der netzwerk meister schrieb:

    Nun zu meinem Problem. Es ist nicht ja nicht klar, wie groß die jeweiligen Pakete sind.

    Nicht?

    Das Problem ist aber: was ist, wenn die 4 Byte bereits in 2 Pakete gesplittet werden und der hintere Teil als erstes eintrifft? Dann ist der Wert der Länge falsch.

    Die Fragmentierung passiert in der Vermittlungsschicht und ist für UDP transparent.



  • Ich weiß, du willst das wahrscheinlich nicht hören, aber warum nimmst du nicht TCP? In der Regel gehen keine Pakete verloren und müssen somit nachgeschickt werden und soweit ich weiß beeinflusst die Wahl UDP<->TCP den "average Ping" wirklich nicht großartig (ich hab mal gehört ~1ms). UDP-Handling muss unheimlich gut durchdacht werden, was ziemlich schwierig ist, wie du anscheinend auch festgestellt hast. Die Idee von der schnellen und unbürokratischen Verbindung ist zwar super, kostet aber imho zuviel Aufwand um die Nachteile auszugleichen.



  • @OP:
    Du scheinst dich mit dem Thema wohl garnicht befasst zu haben.
    Bei UDP verschickst du ganze "Pakete" und empfängst ganze "Pakete". Und wenn du ein Paket empfängst bekommst du mitgeteilt wie gross dieses ist.

    -> Problem gelöst.

    p.S.: wenn du z.B. 10KB als ein "Paket" wegschickst, dann kommen diese 10KB auch genauso als ein "Paket" an (oder eben garnicht). Es wird also NICHT passieren dass die ersten paar Bytes noch von einem anderen "Paket" stammen.



  • Ist schon komisch das die Leute immer meinen sie müssen UDP verwenden, wenn sie keine Ahnung haben. Woher wissen die nur immer das UDP das richtige für sie ist, ohne zu wissen wie es funktioniert? Wahrscheinlich wieder so ein Übergane und das muss schnell ein...



  • hustbaer schrieb:

    p.S.: wenn du z.B. 10KB als ein "Paket" wegschickst, dann kommen diese 10KB auch genauso als ein "Paket" an (oder eben garnicht). Es wird also NICHT passieren dass die ersten paar Bytes noch von einem anderen "Paket" stammen.

    Werden größere Pakete nicht gesplittet?



  • Badestrand schrieb:

    hustbaer schrieb:

    p.S.: wenn du z.B. 10KB als ein "Paket" wegschickst, dann kommen diese 10KB auch genauso als ein "Paket" an (oder eben garnicht). Es wird also NICHT passieren dass die ersten paar Bytes noch von einem anderen "Paket" stammen.

    Werden größere Pakete nicht gesplittet?

    Bashar schrieb:

    Die Fragmentierung passiert in der Vermittlungsschicht und ist für UDP transparent.



  • SG1 schrieb:

    Bashar schrieb:

    Die Fragmentierung passiert in der Vermittlungsschicht und ist für UDP transparent.

    --> http://penguin.dcs.bbk.ac.uk/academic/networks/network-layer/fragmentation/index.php
    🙂



  • ~fricky schrieb:

    --> http://penguin.dcs.bbk.ac.uk/academic/networks/network-layer/fragmentation/index.php
    🙂

    Knapp Thema verfehlt, würd ich sagen. Richtig gegoogelt immerhin.



  • Badestrand schrieb:

    Werden größere Pakete nicht gesplittet?

    Was bringt mir ein Protokoll wenn es 100% unzuverlaessig ist?
    Auch UDP garantiert einige Sachen. Naemlich dass man ein Paket etweder irgendwannmal korrekt bekommt oder garnicht.

    Ich denke man sollte TCP nehmen wenn man nicht genau weiss was UDP macht. denn wenn man das nicht weiss, dann hat man sich nicht so weit damit beschaeftigt um sagen zu koennen das TCP das falsche fuer den job ist.

    Meistens wenn Leute UDP verwenden wollen, dann bauen sie nachher in ihr Protokoll die meisten features von TCP ein. das ist schwachsinn... UDP ist idR die falsche antwort (nur ganz selten macht UDP wirklich sinn).



  • Shade Of Mine schrieb:

    (nur ganz selten macht UDP wirklich sinn).

    und wann macht es Sinn?



  • zwutz schrieb:

    Shade Of Mine schrieb:

    (nur ganz selten macht UDP wirklich sinn).

    und wann macht es Sinn?

    Ein Beispiel ist NTP.



  • z.b. wenns egal ist wenn ein paar pakete floeten gehen


  • Administrator

    zwutz schrieb:

    Shade Of Mine schrieb:

    (nur ganz selten macht UDP wirklich sinn).

    und wann macht es Sinn?

    Vielleicht auch noch, wenn es um Dinge wie Broadcast oder Multicast geht. Auch ist UDP praktisch, wenn man eine Firewall legal durchbrechen möchte.

    Grüssli



  • Bashar schrieb:

    http://penguin.dcs.bbk.ac.uk/academic/networks/network-layer/fragmentation/index.php
    🙂

    Knapp Thema verfehlt
    [/quote]
    wer zerhackt noch pakete ausser ip?
    🙂



  • zwutz schrieb:

    Shade Of Mine schrieb:

    (nur ganz selten macht UDP wirklich sinn).

    und wann macht es Sinn?

    z.B. wenn man Daten die "out of order" ankommen auch schon gut brauchen kann obwohl "davor" noch Datenstücke fehlen. z.B. bei VoIP oder auch bei vielen Spielen.

    Oder wenn man diverse Parameter selbst "tunen" muss um z.B. besseren Durchsatz zu erreichen. Sehr schnelle Leitungen auf sehr grosse Distanz (hoher Ping) funktionieren mit TCP z.B. oft nicht so toll - d.h. man bekommt die volle Bandbreite nicht zwischen 2 einzelnen PCs ausgenutzt.


Anmelden zum Antworten