Ein IPv6-Paket (ein IP-Datagramm) besteht aus einem
Basisprotokollkopf (Basisheader), der
immer vorhanden sein muss. Diesem Basisheader können
Erweiterungsprotokollköpfe
(Extension Headers) folgen, und diesen wiederum, wenn es sie
denn gibt, folgen die Nutzdaten.
Der Basisheader hat eine feststehende Länge von 40 Bytes. In
ihm gibt es ein 16 Bits großes Feld namens
Payload Length,
das die Länge der Nutzdaten zusammen mit den
Erweiterungsprotokollköpfen enthält. Das heißt,
dass ein IPv6-Datagramm höchstens (216-1) + 40 =
65.575 Bytes aufnehmen kann. Davon kann allerdings abgewichen
werden, wenn, wie in wenigen Absätzen gezeigt wird, ein
spezieller Paketaufbau vorgenommen wird. Auch soll hier noch
erwähnt
werden, dass IPv6 von den angeschlossenen Netzen verlangt, dass sie
Pakete mit mindestens 1280 Bytes übertragen können.
Bis zu dieser Paketgröße gibt es bei dem neuen
Protokoll keine Fragmentierung.
Schachtelung der Protokollköpfe
Der IPv4-Protokollkopf kann nur durch sein Optionenfeld an
Anwendungsbelange angepasst werden. Dieses kann höchstens
40 Bytes aufnehmen, wodurch seine Verwendungsmöglichkeiten
eng begrenzt sind. Das entsprechende IPv6-Konzept ist deutlich
flexibler: Im Basisprotokollkopf stehen die
Informationen, die bei jedem Datentransfer gebraucht werden,
während bei Bedarf anwendungsspezifische Informationen in
Erweiterungsprotokollköpfe ausgelagert werden. Dazu
enthalten alle Protokollköpfe ein Feld namens
Next Header,
das anzeigt, ob ein (weiterer) Erweiterungsheader oder die
Nutzdaten folgen.
Basisprotokollkopf
Die Sender- und Empfänger-Adressen beanspruchen einen
großen Teil des Basisprotokollkopfs. In der folgenden
Grafik wird er wie üblich in einer Breite von 32 Bits (4
Bytes) dargestellt:
Die einzelnen Felder haben die folgende Bedeutung:
Version (4 Bits)
Das Feld enthält die Nummer der zugehörigen
IP-Version und hat den Wert 6 (0110).
Traffic Class (8 Bits)
Die ersten 6 Bits dieses Felds entsprechen dem
Service-Typ
aus IPv4. Damit wird die Priorität festgelegt, mit der
das Datagramm bei einem Paketstau und Ähnlichem behandelt
werden soll. Mit den letzten beiden Bits zeigen Router eine
eventuelle Überlastsituation an.
Flow Label (20 Bits)
Unter anderem beim
Streaming erzeugen Anwendungen in
der Regel
simultan mehrere Datenströme. Der Wert des Feldes Flow
Label weist Router darauf hin, zu welchem Datenstrom das
vorliegende Paket gehört. Die Router berücksichtigen
diese Zuordnung und unterstützen dadurch die Anwendungen.
Payload Length (16 Bits)
Das ist die Größe des IP-Pakets in Bytes ohne den
Basisprotokollkopf aber mit den gegebenenfalls vorhandenen
Erweiterungsprotokollköpfen. Es ist bereits einleitend zu
diesem Abschnitt erwähnt worden, dass dieses Feld durch
seine Länge die maximale Größe eines IPv6-Pakets
auf 65.575 (65.535 + 40) Bytes begrenzt. Davon gibt es allerdings
eine Ausnahme: Wenn in den auf den Basisheader folgenden
Erweiterungsheadern ein spezieller, als
Hop-by-Hop Header
bezeichneter Protokollkopf vorkommt, dann können sogenannte
Jumbogramme übertragen werden.
Das sind Datagramme, die
größer als 65.575 Bytes sind. Bei ihnen wird für
die Längenangabe ein 32 Bits großes Feld verwendet,
so dass sie bis
zu 4 Gigabyte groß werden können.
Next Header (8 Bits)
In diesem Feld wird angegeben, was dem vorliegenden
Protokollkopf folgt. Dies könnte ein
Erweiterungsprotokollkopf sein oder ein TCP- oder UDP-Paket
(oder auch ein ICMP-Paket, siehe dazu den Abschnitt 5.5
(Internet Control Message Protocol)).
Hop Limit (8 Bits)
Das ist das
Time-To-Live-Feld (TTL) aus IPv4
und wird von den Routern auch genau wie bei IPv4 behandelt:
Jeder Router setzt den Wert dieses Felds um 1 herab und
verwirft das Paket, wenn durch die Subtraktion der Wert 0
erreicht wird. In diesem Fall verständigt er den
Absender mit einer ICMP-Nachricht von seiner Handlungsweise.
Source Address (128 Bits)
Das Feld nimmt die Absenderadresse des Pakets, also 16 Bytes,
auf. Dies ist immer eine Unicast-Adresse.
Destination Address (128 Bits)
In dem 16 Bytes großen Feld für die
Empfängeradresse kann
eine Uni-, Multi- oder Anycast-Adresse stehen.
Erweiterungsprotokollköpfe
Die Beschreibung von IPv6 im RFC 2460 aus dem Jahre 1998
führt sechs Erweiterungsprotokollköpfe auf. Diese
Liste wird ständig anwendungsabhängig erweitert. Zur
Verdeutlichung des Konzepts sollen hier lediglich einige wenige
dieser Protokollköpfe beispielhaft genannt werden:
Hop-by-Hop Header
Wie bei der Beschreibung des Payload-Length-Feldes des
Basisheaders bereits erwähnt, wird dieser
Erweiterungsprotokollkopf benötigt, wenn Jumbogramme
(Pakete, die größer als 65.575 Bytes sind)
übertragen werden sollen.
Fragment Header
Der Basisprotokollkopf enthält keine Felder für
eine eventuell notwendige Fragmentierung eines IPv6-Pakets.
Muss ein solches fragmentiert werden, muss dafür
ein Fragment Header eingesetzt werden. Er enthält die
Fragmentierungsinformationen, die in einen IPv4-Header
direkt eingebracht werden können.
Die beiden genannten Erweiterungsprotokollköpfe waren
bereits im RFC 2460 enthalten Als Beispiel für einen
neueren Protokollkopf kann der für die Unterstützung
des Roaming entwickelte
Mobility Header genannt werden. Durch
das Konzept der Erweiterungsheader wird IPv6 sehr flexibel, da
damit fast beliebig viele Funktionen definiert und abgebildet
werden können.