Das IP-Protokoll

Auf der Vermittlungsschicht kann das Internet als Sammlung von Teilnetzen betrachtet werden. Es gibt keine echte Struktur, sondern mehrere Backbones. Diese Backbones werden aus Leitungen mit hoher Bandbreite und aus schnellen Routern gebildet. An die Backbones sind regionale Netze und an diese schliesslich die LANs von Unternehmen und Organisationen angeschlossen. Der 'Klebstoff' des Internet ist das Protokoll der Vermittlungsschicht, IP (Internet Protocol). Das Design von IP war von Anfang an auf Netzverbund ausgelegt (Tanenbaum, 1998). Das IP-Protokoll ist im RFC 791 beschrieben.

IP-Datagramme

Seine Aufgabe ist die Bereitstellung einer Möglichkeit, nach bestem Bemühen sogenannte Datagramme von der Quelle zum Ziel zu befördern, unabhängig davon, ob sich diese Maschinen im gleichen Netz befinden oder ob anderer Netze dazwischen liegen. Die Kommunikation im Internet funktioniert so, daß die Transportschicht Datenströme entgegennimmt und in Datagramme oder Frames (Rahmen) aufteilt. Die theoretische Grenzgröße für Datagramme liegt bei 64Kbyte, in der Praxis liegt die Größe aber bei 1500 Byte. Jedes Datagramm wird durch das Internet übertragen und auf dem Weg möglicherweise in noch kleinere Einheiten aufgeteilt. Wenn alle Teile den Zielrechner erreicht haben, werden die Teile von der Vermittlungsschicht wieder zum Originaldatagramm zusammengesetzt und an die Transportschicht des Zielrechners übergeben.

Ein IP-Datagramm besteht aus einem Header- und einem Textteil. Der Header besitz einen festen 20 Byte langen Teil und einen optionalen Teil variabler Länge. Die folgende Darstellung zeigt schematisch den Aufbau eines Datagramms (Glaser et al., 1990):

0

1

2

3

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

Version IHL Type of Service Total Length
Identification Flags Fragment Offset
  D F M F
Time to live Protocol Header Checksum
Source Address
Destination Address
Options + Padding (0 oder mehr 32 Bit Worte)
Data (ein Vielfaches von 8Bit, maximal 65535 Oktetts )

Die Datenfelder des Headers haben folgende Bedeutungen nach Unger, (1995), mit Ergänzungen aus Tanenbaum, (1998):

Version
Das Feld Version bezeichnet die Version des IP-Protokolls, mit dem dieses Datagramm erstellt wurde (derzeit Version 4 mit IPv4 bezeichnet).
Kopflänge (IHL)   Das Feld Kopflänge ('IHL') gibt die Länge des Datagrammkopfes in 32 Bit-Worten an.
Datagramm Länge (Total Length)   Das Feld Datagrammlänge gibt die Länge des gesamten Datagramms (bzw. eines Datagramm-Fragments in Byte an. Hieraus ergibt sich die maximale Länge eines Datagramms zu 216 oder 65536 Byte (minimale Länge 576 Byte).
Lebensdauer (Time To Live)   Das Feld Lebensdauer ('TTL') bestimmt die Lebensdauer des Datagramms. Dieses Feld ist ein Zähler der beim Erzeugen des Datagramms mit einem Initialwert besetzt (max. 255) und anschliessend von jedem Knotenrechner/Router, den das Datagramm passiert, mindestens um eins herabgezählt wird. Sobald dieses Feld den Wert Null besitzt, wird das Datagramm verworfen und der Absender erhält ein Warn-Datagramm. Dieses Feature dient dazu, Datagramme daran zu hindern z.B. im Falle korrumpierter Routingtabellen 'ewig' herumzuschwirren.
Protokoll   Das Feld Protokoll gibt an, welches Protokoll der Transportschicht die Daten erzeugt hat, z.B. das TCP-Protokoll = 6, UDP = 17, ISO-TP4 = 29.
Prüfsumme (Checksum)   Das Feld Prüfsumme prüft oder sichert nur den Datagramm-Kopf. Diese Prüfsumme muss nach jeder Teilstrecke neu berechnet werden, denn mindenstens ein Feld (TTL) ändert sich immer.
Quell- und Zieladresse (Source- and Destinationaddress)   Die Felder Quell- und Zieladresse enthalten Internet-weit einheitliche Adressen von Quell- und Zielrechner (siehe nächster Abschnitt)
Fragmentierung
  Die Felder Kennung, NF, MF und Fragment-Offset kontrollieren das Fragmentieren von Datagrammen. Unterschiedliche Kommunikationsnetze, z.B. unterschiedliche lokale Netze, sehen unterschiedliche maximale Rahmenlängen vor. Passiert ein Datagramm auf seinem Weg Netzwerke verschiedener Art, so kann es notwendig werden, das Datagramm in verschiedene Fragmente aufzuteilen und diese, entsprechend der Datagramm-Philosophie des IP-Protokolls, unabhängig voneinander zum Zielrechner zu transportieren. Da die Transportinstanz des Zielrechners sowieso für das Zusammensetzen von Datagrammen zuständig ist, erscheint es folgerichtig, ihn auch mit der Zusammensetzung von Datagramm-Fragmenten zu betrauen.
Kennung (Identification)   Jedes Datagramm erhält eine eindeutige Kennung. Alle Fragmente eine Datagramms erhalten dieselbe Kennung.
NF-Bit (No Fragments)   Ist das NF-Bit gesetzt, darf das Datagramm nicht fragmentiert werden, z.B. weil der Sender weiß, dass der Empfänger nicht in der Lage ist die Fragmente wieder zusammenzusetzen. Das Datagramm muss dann über Teilnetze geleitet werden, deren Rahmengrösse einen Tansport des nicht fragmentierten Datagramms zulässt. Ist das nicht möglich, wird das Datagramm nicht angenommen oder bei seinem Transport durch das Internet vernichtet. Wird ein Datagramm fragmentiert, so erhalten alle Fragmente nahezu identische Fragment-Köpfe.
MF-Bit (More Fragments)   Das nicht gesetzte MF-Bit zeigt an, dass es sich um das letzte Fragment des mit Kennung identifizierten Datagramms handelt. Nach Empfang des letzten Fragments, kann der Empfänger aus dem Fragment-Offset und der Fagment-Länge die Länge des ursprünglichen Datagramms bestimmen.
Fragment-Offset   Der Fragment-Offset legt fest, mit dem wievielten Byte der ursprünglichen Daten die Daten des entsprechenden Fragments beginnen. Alle Fragmente ausser dem letzen müssen in einem Datagramm ein Vielfaches von 8 Byte sein. Das ist die elementare Fragmenteinheit. Da 13 Bit verfügbar sind, sind maximal 8192 Fragmente pro Datagramm möglich was 65536 Byte ergibt (Das ist eines mehr als im Feld Total Length)
Dienstart (Typ of Service)   Das Feld Dienstart charakterisiert das Datagramm und spezifiziert Wünsche für seine Beförderung. Folgende Arten können angegeben werden:
  • die Wichtigkeit des Datagramm
  • die gewünschte Beförderungsart
    • möglichst geringe Verzögerung
    • möglichst hoher Durchsatz
    • möglichst fehlerfreie Übertragung

Das Feld selbst enthält von links nach rechts das Feld Precedence (3 Bit, eine Priorität von 0-7), drei Flags D,T und R und zwei unbenutzte Bits. Die drei Flagbits sind es, mit denen der Absender spezifiziert, worauf er am meisten Wert legt (Verzögerung, Durchsatz, Zuverlässigkeit). Theoretisch können Router zwischen den Teilnetzen anhand dieser Felder wählen, welche Leitung mit welcher Charakteristik sie für dieses Datagramm wählen. In der Praxis wird das von heute eingesetzten Routern gänzlich ignoriert.

Optionen   Das Feld Optionen hat eine variable Länge und dient dazu, Informationen zu spezifizieren die im ursprünglichen Design nicht enthalten waren. Jede Option beginnt mit einem 1-Byte-Code, der das danach folgende als Option identifiziert. Jede Option beginnt dann mit einem Optionen-Typ Byte, gefolgt von einem Optionen-Längenbyte und den entsprechenden Optionendaten.
Das Feld Optionen, mit Hilfe des Feldes Füll-Bits (Padding) immer auf volle 32 Bit-Worte ergänzt, dient dazu,
  • Informationen über den zeitlichen Ablauf der Übertragung eines Datagramms zu erhalten.
    • Time Stamp (jeder Router hängt seine IP-Adresse und einen Zeitstempel an)
  • den Pfad durch das Kommunikationsnetz vom Sender zum Empfänger vorzugeben.
    • Strict Source Routing (bestimmt den kompletten Pfad)
    • Loose Source Routing (bestimmt einige 'Stützpunkte' im Pfad)
  • den verwendeten Pfad zu erfahren.
    • Record Route (jeder Router hängt seine IP-Adresse an)
  • Sicherheitsinformationen zu übergeben (wird in der Praxis von allen Routern ignoriert)

IP-Adressen

Jeder Host und Router im Internet hat eine IP-Adresse, die die Netz- und Hostnummer kodiert. Diese Kombination ist eindeutig: Keine Maschine hat die gleiche IP-Adresse wie eine andere, da sonst Netzteilnehmer nicht mehr eindeutig zu identifizieren wären. Alle IP-Adressen sind 32 Bit lang und werden in den Feldern Source-Address und Destination-Address von IP-Datagrammen benutzt. Maschinen die an mehrere Netze angeschlossen sind, haben in jedem Netz eine andere Adresse ('multihomed host'):

Klasse Bit Nr. Host-
Adressbereich
  0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7  
A
0  

1.0.0.0 bis 127.255.255.255

B
1 0  

128.0.0.0 bis 191.255.255.255

C
1 1 0  

192.0.0.0 bis 223.255.255.255

D
1 1 1 0  

224.0.0.0 bis 239.255.255.255

E
1 1 1 1 0  

240.0.0.0 bis 247.255.255.255

Die Formate der Netz-Klassen A, B C und D ermöglichen die Konfiguration von bis zu 126 Netzen mit je 126 Millionen Hosts, 16382 Netzen mit bis zu 64000 Hosts oder 2 Millionen Netzen mit bis zu je 254 Hosts. Die Netznummern werden - um Konflikte zu vermeiden - vom NIC (Network Information Center) zugewiesen. Die Netzadressen in IPv4 sind 32 Bit große Zahlen, die normalerweise in gepunkteten Dezimalzahlen (Dotted Decimal Notation) geschrieben werden. In diesem Format werden alle 4 Byte dezimal geschrieben. Die niedrigste Adresse ist 0.0.0.0 (0) und die höchste 255.255.255.255 (-1). Die Werte 0 und -1 haben eine besondere Bedeutung: Der Wert 0 bezeichnet ein bestimmtes Netz oder einen bestimmten Host und wird von Hosts benutzt die gerade gestartet werden. Der Wert -1 wird als Broadcast-Adresse benutzt und richtet sich an alle Rechner im jeweiligen Netz (damit nicht alle Rechner des Internets jeden Broadcast mithören müssen, werden Broadcasts von Routern nicht über die Grenzen eines Teilnetzes propagiert). Alle Adressen in der Form 127.x.y.z sind für Schleifentests ('Loopback') reserviert. Datagramme die an diese Adressen gesendet werden werden lokal zu Testzwecken wie Eingangsdatagramme verarbeitet (Tanenbaum, 1998)

IPv6

Tanenbaum schreibt, dass die Tage von IP in seiner heutigen Form (IPv4) gezählt sind. Da der Adressraum und die Strukturierungsmöglichkeiten in Teilnetze der stürmischen Entwicklung des Internets in den letzten Jahren einfach nicht standgehalten haben. Angesichts der diversen Probleme mit IPv4 begann die IETF die Arbeit an einer neuen Version von IP. Angestrebt wurde eine flexiblere und effizientere Version mit unerschöpflichem Adressvorrat. Wesentliche Ziele des Projekts sind:

Nach einigen Jahren der Vorschläge und der Diskussion einigte man sich auf IPv6 (IPv5 war bereits als Bezeichnung für ein experimentelles Protokoll vergeben). IPv6 ist in RFC 1883 und RFC 1887 beschrieben.

Das wichtigste Merkmal von IPv6 sind die 16Byte langen Adressen. Damit lassen sich 2128-1=3.4*1038 Rechner adressieren - diese Zahl stellt einen praktisch unbeschränkten Adressraum zur Verfügung. Des weiteren wurde der Header von 13 auf 7 Felder verkürzt. Dadurch können Router die Datagramme schneller verarbeiten und der Durchsatz wird verbessert. Die dritte Verbesserung ist die geänderte Unterstützung von Optionen. Router sollen dadurch Optionen die sie nichts angehen, überspringen können und so ebenfalls zu einer schnelleren Verarbeitung kommen. Der vierte verbesserte Bereich betrifft die Authentifikation und den Datenschutz. So gibt es im optionalen Authentifikations Header Felder für elektronische Unterschriften (Vorgabe Verfahren ist hier MD5) und im Erweiterungsheader für verschlüsselte Nutzdaten gibt es Felder für Schlüsselinformationen (Vorgabe Verfahren ist hier DES-CBC).