www.mikrocontroller.net

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


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja ethernetpakete haben eine mindestlänge


Martin

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_Protoco...

Gruss Sebastian und nochmals Danke für die schnelle Antwort

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A.K. (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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").

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.