Rechnernetze
Home Nach oben

Datenübertragung mit Datagrammen

Ähnlich dem Paket im X.25/PLP hat auch ein Datagramm im IP einen festen Aufbau, bestehend aus einem Datagrammkopf (Datagran Header) und einem Datenbereich (Data Area).

IP-KOPF-DATEN.WMF (2046 Byte)

Im Internet werden die Datagramme nicht direkt zwischen Routern verschickt, sondern in der Regel in einen Block eingepackt, der sie an den nächsten Rechner transportiert; dieser Block kann z.B. ein Ethernet- oder ein FDDI-Rahmen sein. Hieraus resultiert die Forderung, dass Datagramme nicht beliebig lang sein dürfen. Ein effizienter Transport kann nur garantiert werden, wenn jedes Datagramm in einen Rahmen passt. Die Größe eines solchen Rahmens ist jedoch von Netz zu Netz verschieden, so dass die Größe der Datagramme den Rahmengrößen der Netze, an die der jeweilige Rechner angeschlossen ist, angepasst sein sollten. Der Aufbau eines Rahmens mit Datagramm kann dann folgendermaßen dargestellt werden:

IP-RAHMEN-KOPF-DATEN.WMF (2710 Byte)

Diese Forderung ist jedoch i.allg. nicht zu erfüllen, da diese Größen zwischen 128 Bytes (in X.25-Netzen) und 4500 Bytes (in FDDI-Ringen) schwanken können, und zu kleine Datagramme wegen des recht großen Datagrammkopfes ineffizient sind. Daher legt das Internetprotokoll fest, dass das Netz Datagramme bis zu einer Länge von 576 Oktetten effizient übertragen muss. Wenn das Netz Rahmen mit Blöcken einer gegebenen Größe nicht übertragen kann, so darf es die Datagramme fragmentieren (fragment), d.h. in kürzere Blöcke zerlegen. Dabei enthält jeder Block neben einer Dateninformation auch den gesamten Datagrammkopf.

Ein einmal fragmentiertes Datagramm wird auf seinem Weg zum Empfänger nicht wieder zusammengesetzt (reassemble), sondern unverändert weitergeschickt; hierbei können durchaus verschiedene Wege für unterschiedliche Fragmente gewählt werden. Da jedes Fragment die gesamte notwendige Zielinformation enthält, können alle Zwischenstationen den richtigen Weg wählen. Sollten Fragmente eines Datagramms verloren gehen, so gilt das gesamte Datagramm als verloren und jene Teile, die den Empfänger evtl. erreichen, werden vernichtet. Die Information, ob ein Datagramm fragmentiert wurde, und in welcher Reihenfolge die Fragmente zusammengehören, muss natürlich gleichfalls im Datagrammkopf verschlüsselt werden.

Ein Datagramm wird reassembliert, indem ein eintreffendes Fragment anhand von Absenderadresse und einer Identifikation einem Datagramm zugeordnet wird. Anhand des Feldes Fragmentabstand FA kann die Position im gesamten Fragment, anhand des Längenfeldes GL die Länge des Datenteils berechnet werden. Dabei liegt der Anfang des Datenfragments bei FA*8, das Ende bei FA*8+(GL-20)-1. Die reassemblierende Station muss erkennen können, wann alle Fragmente eines Datagramms eingetroffen sind. Geschieht dieses nicht innerhalb einer bestimmten Zeit (z.B. 1 Minute), so wird das Datagramm beim Empfänger verworfen.