Hallo Zusammen, ich benutze für die Kommunikation zwischen MC und PC das UDP. Dabei bin ich auf folgendes Phänomen gestossen: Beim Versand eines Strings der eine Länge von 3 Zeichen hatte. Hat mir das Network Tool Ethereal diese UDP - Nachricht als korrupt protokolliert. Kann es sein, dass es bei dem UDP Datagram eine Mindestlänge gibt ????? Bei Wikipedia hab ich folgendes gelesen: ....Der UDP-Header besteht aus vier Headerfeldern, von denen zwei optional sind. Die Quell- und Ziel-Port Felder sind 16 Bit groß und identifizieren den sendenden und den empfangenden Prozess. Da UDP verbindungslos ist, ist der Quell-Port optional. Er wird dann auf 0 gesetzt. Den Portfeldern folgt das verbindliche Längenfeld, das die Größe der Daten und des Headers des UDP-Datagramms in Oktetten enthält. ========INTERESANTER TEIL========================================= Der kleinstmögliche Wert sind 8 Oktette. ================================================================== Das letzte Headerfeld ist eine 16 Bit große Prüfsumme über den Header, den so genannten Pseudo-Header und den Daten. Die Prüfsumme ist auch optional, wird aber in der Praxis fast immer benutzt (falls nicht, wird sie ebenfalls auf 0 gesetzt)..... Somit würde bei meinem Beispiel dieser kleinst Mögliche Wert von 8 Oktetten (1 Oktette = 8 Bit) unterschritten. Rechnung: 3 Zeichen = 3 * 8 Bit (3 Oktetten) -----------> 3 Oktetten + 4 Oktetten (16 Bit QuellPort + 16 ZielPort) = 7 Oktetten. Kann mir jemand diese Rechnung bestätigen ? Freue mich über jegliche Art von Hilfe Sebastian
Ich glaube das Ehternet Packete eine bestimmte mindestlänge von 68 Byte haben müssen um Kollisionen zu vermeiden. Vielleicht hilft dir die Information G. Tobias
Hallo, ja ethernetpakete haben eine mindestlänge Martin
Hallo Zusammen und Danke für die schnelle Antwort, ja richtig Ethernet bestimmt. Die MTU. Das war mir auch bekannt. Mir ist aber immer noch unklar ob das ganze an der UDP Spezifikation liegt. Schaut euch doch mal bitte die Beschreibung des UDP bei Wiki an. Der Teil mit den 8 Oktetten .... Wie versteht ihr das ???? http://de.wikipedia.org/wiki/User_Datagram_Protocol#UDP-Datagramm Gruss Sebastian und nochmals Danke für die schnelle Antwort
MTU hat mit TCP/IP zu tun, nicht mit Ethernet, und ist zudem die Höchstlänge, nicht die Mindestlänge. Die erwähnte Mindestlänge wiederum hat nur mit der Übertragungstechnik von Ethernet zu tun, nicht jedoch mit TCP/IP und damit auch nicht mit UDP. Die Mindestlänge von UDP ist die Länge vom IP-Header plus die Länge vom UDP Header. Wenn das insgesamt kürzer ist, als Ethernet erlaubt, dann wird das bei der Ethernet-Transmission verlängert, nicht im UDP-Layer. In manchen Dingen haben Netzwerker eine eigene Sprache. Aufgrund von gewissen Kleinigkeiten in der Definition bezeichnen Netzwerker 8-Bit-Bytes als Oktett. 8 Oktetten sind also schlicht 8 Bytes. Ausserdem halte ich die Wiki-Beschreibung für ziemlich zweifelhaft. Das mit dem "Pseudo-Header" ist Unfug. Daran ist nichts "Pseudo", das ist schlicht der IP Header und dorthin, zu IP, gehört dessen Beschreibung, nicht in den UDP-Eintrag. Siehe englische Version.
Naja, ein bischen hat das Wiki recht, nur ist die Beschreibung mehr irreführend als hilfreich. Diesen Pseudo-Header gibt's nicht wirklich, er spielt aber in der Erzeugung der Prüfsumme eine Rolle - die wird so erzeugt als gäbe es ihn (http://www.tcpipguide.com/free/t_UDPMessageFormat-2.htm). Zur eigentlichen Frage: Das Minimum vom IP-Header sind 5 32-Bit Worte aks 20 Bytes, beim UDP-Header sind es 8 Bytes. Ergibt 28 Bytes.
Hallo A.K., Danke erstmal für deine Antwort. Habe dein Ratschalg befolgt und mir die eng. Version durchgelesen. Das Minimum des UDP Datagrams ist somit 8 Byte. OK Du hast aber im deiner Antwort beschrieben, dass Ethernet - Layer den Ethernet Frame soweit auffüllt das dieser wieder verschickt werden kann.... Das hab ich auch mal gelesen. Leider ist mir immer noch unklar wie Ethereal diese 3 Zeichen die ich über UDP verschicken wollte als korrupt definiert hat.... Ich vermute das der Ethernet - Frame zweifellos korrekt ist aber beim Versand der 3 Zeichen die Transportschicht (UDP) bezüglich der erforderlichen Mindestlänge von 8 Byte des UDP - Datagrams meckert. OK ich danke euch für die reichlichen Antwortbereitschaft Gruss Sebastian
Ich werde aus deiner Beschreibung oben nicht so ganz schlau. Schreib doch einfach mal das komplette Paket hier rein, so beschrieben wie Du dir das vorstellst. Mit allen Headern die dabei sind. Was für ein Übertragungsmedium wird denn verwendet? Ethernet? Seriell? Du selbst hast Ethernet nicht erwähnt, also frage ich lieber mal nach. Wenn Du natürlich 3 Bytes auf die Reise schickst, ohne IP-Header, ohne UDP-Header, und das dann grosszügug als UDP bezeichnest -- wie soll Ethereal damit was anfangen?
So, ich hoffe das Wiki ist jetzt nicht mehr ganz so verwirrend.
Hallo A.K. Du hast recht. Die Umgebung: TCP/IP Referenzmodel Anwendungsschicht: 3 Zeichen verschicken ..Bitte Transportschicht (UDP): OK SENDER- und EMPFÄNGER - PORT = 2 mal 16 Bit Internetschicht: OK SENDER und EMPFÄNGER IP ..... Netzwerkschicht: OK Ethernet Adressen.... man kann davon aus gehen das alle Header der verwendeten Schichten gefüllt sind. Somit ist es uninteressant wieviele Bytes auf beim IP Header zum Einsatz kommen. Was ich damit sagen will ich hab ein komplett fertigen Stack. Diesem übergebe ich 3 ZEICHEN die mit 8 Bit kodiert sind an das UDP. UDP übergibt diese das IP.....unsoweiter OK. Die Frage besteht immer noch wie sieht es mit der UDP - Datagram Mindestlänge aus ? Die Längenberechnung umfast wie ich es verstanden habe (16 Bit QuellPort + 16 ZielPort) und die Länge der NUtzdaten in Byte. Daraus folgt 4 Byte für Quellport und Zielport + 3 Byte für Daten. Das ergibt 7 Byte was diese Mindestlänge unterschreitet. Gruss Sebastian
Der UDP-Header ist 8 Bytes lang. Ein korrektes UDP-Paket mit 3 Bytes Daten besteht also seitens UDP aus mindestens 11 Bytes, 8 Bytes Header, 3 Bytes Daten. Zzgl. IP Header usw. Wenn alles funktionieren würde, hättest Du nicht gefragt. Also nimm's mir nicht übel, wenn ich ein bischen hinterfrage. Und doch bitte wirklich mal das komplette Paket sehen will. Weil: in deiner Kurzbeschreibung ist der UDP Header 4 Bytes lang ("2 mal 16 Bit").
"Daraus folgt 4 Byte für Quellport und Zielport + 3 Byte für Daten. Das ergibt 7 Byte was diese Mindestlänge unterschreitet." RFC768: 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | data octets ... +---------------- ... Könnte es sein, dass Du die Felder "Length" und "Checksum" schlicht vergessen hast?
Ja du hast recht .... diese Mindestlänge beträgt 8 Byte und umfasst die 4 Längenangaben.... Scheiße ! Also kann man ein UDP - Paket auch ohne Nutzdaten verschicken und das dürfte kein Stress geben. Dann kommt man auf 11 Byte OK.... nur warum meckert Ethereal??? Zur Info die Übertragung erfolgt vom PC aus... Danke nochmals .... Gehe aber jetzt schlafen muss morgen noch viel Doko schreiben.
Woher soll ich das wissen was Ethereal stört, wenn ich das Paket nicht kenne. Sind die Bytes irgendwie streng geheim? Häng halt mal einen entsprechend aufgeblätterten Screendump vom Ethereal ran.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.