Forum: Mikrocontroller und Digitale Elektronik Hilfe hat UDP Datagram eine Mindestlänge ??


von Sebastian (Gast)


Lesenswert?

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

von Tobias (Gast)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

Hallo,

ja ethernetpakete haben eine mindestlänge


Martin

von Sebastian (Gast)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

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.

von A.K. (Gast)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

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?

von A.K. (Gast)


Lesenswert?

So, ich hoffe das Wiki ist jetzt nicht mehr ganz so verwirrend.

von Sebastian (Gast)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

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").

von A.K. (Gast)


Lesenswert?

"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?

von Sebastian (Gast)


Lesenswert?

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.

von A.K. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.