Sockets: UDP packet size
-
Moin,
Ich habe viel darüber gelesen, dass Daten die ich per UDP übers Netzwerk schicke ab einer bestimmten größe fragmentiert werden, und dass man deswegen eine gewisse Datengröße nicht überschreiten sollte.Wenn ich nun aber doch größere Pakete schicken will, werden die Fragmente dann automatisch am anderen Ende wieder zusammengesetzt, oder wird das ganze Paket einfach verworfen.
Ich muss ca 20x pro Sekunde Daten in der größe von 500 bis 3000 Byte verschicken. Jeder Datenblock bekommt von mir ein Zeitstempel. Clientseitig wird dann immer nur der Block mit dem höchsten Zeitstempel behandelt. Kommen Datenblöcke nach mit einem niedrigeren Zeitstempel, werden sie verworfen. Es muss nicht garantiert werden, dass gesendete Daten ankommen.
Zurück zur Frage: Wenn ich nun ein Datenblock der größe von 3000 Byte verschicke, und das Netzwerk nur 1000 Byte große Datenblöcke verkraftet, sodass mein Paket in 3 Fragmente unterteilt wird, werden diese Fragmente beim Client dann auch wieder zusammen gesetzt?
-
Sobald der IP-Stack ein Datenpaket zum Versenden enthält, prüft dieser, ob die Paketgrösse eine Aufteilung anhand der für die zu verwendende Netzwerkschnittstelle gegebene MTU notwendig macht. Ist dies nötig, so teilt dieser das vorhandene Datenpaket in mehrere Datenpakete auf. Auf Empfängerseite die Pakete zusammen setzen musst du nicht, das macht der IP-Stack für dich wenn dann etwas angekommen ist. Du musst dich aber selbst um die verloren gegangenen Pakete kümmern. Wenn du das Zeugs natürlich RAW sendest (mit winpcap) dann musst du dich um alles kümmern.
-
Also kurz gesagt: Ich muss mir um die größe der Pakete keine Gedanken machen?
-
Naja, mehr als 65507 Byte geht nicht.
Da du aber nur max. 3000 auf einmal verschicken willst... is Bob dein Onkel.