next up previous contents
Next: Optionen Up: Das Internet Protokoll IP Previous: Der Aufbau von IP-Datagrammen

Subsections

Fragmentierung

Die Felder Identification, Flags und Fragment Offset ermöglichen es, ein Datagramm, das größer ist als die MTU des nächsten Links zu fragmentieren und beim Zielrechner wieder zusammenzubauen. Dabei sind folgende Schritte nötig:

Identification Feld

Das Identification Feld enthält eine 16-bit Zahl, die ein IP-Datagramm eindeutig identifiziert. Fragmente eines Datagramms erhalten die selbe Nummer.

Flags

Dieses Feld enthält 3 Bits, deren Bedeutung in Tabelle 7 aufgeschlüsselt ist.


 
Tabelle 7:  Das Flags-Feld
Bit 0 Bit 1 Bit 2
0 (Reserviert) 0 = Fragmentierung erlaubt 0 = Letztes Fragment
  1 = Fragmentierung verboten 1 = Mehr Fragmente folgen

Bit 0 ist reserviert und muß 0 sein. Wenn der Sender nicht will, daß sein Datagramm fragmentiert wird, dann setzt er Bit 1 auf 1. Wenn dann allerdings dieses Datagramm nicht ohne Fragmentierung zugestellt werden kann, dann muß es verworfen werden und der Sender erhält eine Fehlerbenachrichtigung.

Bit 2 ist 0, wenn dieses Datagramm das letzte einer Reihe von Fragmenten ist oder das einzige eines nicht fragmentierten Datagramms. Es ist 1, wenn weitere Fragmente eines Datagramms folgen.

Fragment Offset

Mit Fragment Block bezeichnet man eine Einheit von 8 Octets. Das Feld für Fragment Offset enthält die Größe des Offsets gemessen in solchen Blocks. Das Fragment Offset- Feld ist 13 Bit lang, womit dann wieder die maximale Datagrammlänge von 65535 Octets codiert werden kann.

Ein Beispiel: Ein Datagramm mit ID 348, das 3000 Bytes Daten enthält, wird von einem Router in drei gleich große Fragmente zerlegt. Jedes Fragment bekommt seinen eigenen Header und 1000 Byte an Daten (125 Fragment Blocks). Die Felder für Identification, Flags und Fragment Offset werden für diesen Fall in Tabelle 8 aufgelistet.


 
Tabelle 8:  ID, Flags und Offset eines fragmentierten Datagramms
Fragment ID Flags Offset
1 348 001  
2 348 001 125
3 348 000 250

Rekonstruktion eines fragmentierten Datagramms

Ein fragmentiertes Datagramm wird immer beim Empfänger zusammenmontiert. Ein Problem dabei ist, daß ein Host bei Empfang eines Fragments nicht weiß, wie groß das ursprüngliche Datagramm war, und er somit auch nicht weiß, wieviel Speicher er für die Rekonstruktion benötigt. Bei der Speicheraustattung heutiger Rechner sollte dieses Problem jedoch überschaubar sein.

Problematischer ist da schon folgendes Szenario:

Damit der Zielhost nicht bis in alle Ewigkeit auf ein Fragment wartet, das ihn niemals erreichen wird, muß ein sog. Reassembly Timeout gesetzt sein. Dieser Timeout beträgt üblicherweise zwischen 60 und 120 Sekunden, nach denen ein Zielrechner aufgibt.


next up previous contents
Next: Optionen Up: Das Internet Protokoll IP Previous: Der Aufbau von IP-Datagrammen
Bernd Leinfelder
1/6/1998