Die Vermittlungsschicht

Allgemeines

Aufgabe der Vermittlungsschicht ist es, Pakete von der Quelle zum Ziel zu befördern. Im Gegensatz zu den darunter liegenden Schichten tut sie das aber nicht nur in einem physikalischen Strang, sondern auch auch über mehrere Zwischenstationen, sogenannte Router, hinweg. Die Adressierung erfolgt in dieser Schicht über logische Adressen, wie z.B. IP-Adressen. Protokolle dieser Schicht sind zum Beispiel IPX (Internet Packet Exchange Protocol ) und das IP (Internet Protocol), das wir im folgenden näher behandeln werden.

Das Internet Protocol

Das Internet Protocol ist das weltweit meistgenutzte Protokoll der Vermittlungsschicht.  Es bildet die Grundlage des Internet und es ist das Standardprotokoll der meisten Netzwerkbetriebssysteme.

Dabei ist IP an sich ein unzuverlässiges Protokoll. Es garantiert weder die Reihenfolge in der Daten ankommen, noch das sie alle auf dem selben Weg zu ihrem Ziel finden. Es hat keine Prüfsumme für den Textteil und es gibt keine eingebauten Möglichkeiten für die Flusskontrolle. Das Alles wird anderen Protokollschichten, zum Beispiel dem TCP, dass wir in nächsten Abschnitt behandeln überlassen.

Es bietet jedoch auch einige nicht zu unterschätzende Vorteile wie:

  • Unabhängigkeit von der darunter liegenden Hardwareschnittstelle
  • netzwerkweit einheitliche Adressen
  • standardisierte High-Level-Protokolle für verschiedene Netzwerkdienste

Außerdem handelt es sich um eine offene Protokollfamilie die unabhängig von einem Hersteller entwickelt wurde.

Der IP-Header

Ein IP-Datagramm besteht aus einem Header- und einem Textteil. Der Header besteht aus einem festen Teil von 20 Byte Größe, und einem optionalen Teil mit variabler Länge.

Im Vergleich zu den eher langweiligen Ethernet-Headern, die wir im letzten Teil betrachtet haben, hat er wesentlich mehr Felder aufzuweisen, anhand derer wir einige Eigenschaften des IP erläutern können.

IP-Header

IP-Version

Die ersten 4 Bit enthalten die Versionsnummer des Protokolls. Im Moment ist sie fast überall 4, aber in den nächsten Paar Jahren ist mit einer Umstellung auf IP-Version 6 zu rechnen, das eine etwas andere Behandlung als IPv4 erfordert. 

Anhand dieses Feldes sind die Router dann in der Lage festzustellen, mit welcher Sorte IP sie es gerade zu tun haben.

Die Protokolldefinition schlägt vor die Versionsnummer vor der Analyse des restlichen Headers zu prüfen und, falls es sich um eine Version handelt, die das System nicht kennt, das Paket zu verwerfen.

Headerlaenge

Die nächsten 4 Bit geben die Gesamtlänge (Length) des Headers in 32-Bit-Worten an. Der Minimalwert ist 5, was einem 20-Byte-Header ohne Optionen entspricht.

Da man in 4 Bit maximal die Zahl 15 (7+4+2+1) unterbringen kann, liegt damit die Maximallänge eines IPv4-Headers bei 60-Byte.

Dienstart

Das folgende Byte nennt sich Type of Service oder Service Type. An und für sich dient es dazu, dem Teilnetz und den Routern die Art und Qualität des Dienstes zu übermitteln.

Dazu können verschiedene Kombinationen aus Zuverlässigkeit und Geschwindigkeit definiert werden. So wäre z.B. für Internet-Telephonie die Geschwindigkeit ziemlich wichtig, während die Zuverlässigkeit keinen so hohen Stellenwert hätte.

Das Feld enthält von links nach rechts das Feld Precedence, mit eine Wert von 0 (normal) bis 7 (Netzsteuerungspaket), drei Flags mit je einem Bit nämlich

  • Relay
  • Throughput
  • Relaibility
und zwei ungenutzte Bits.

Theoretisch ließe sich mit dem Feld Precedence einem Router auch sagen, er solle alles mit niedrigerer Priorität liegen lassen, und zuerst die Pakete hoher Priorität weiterleiten.

Mit den Flagbits könnte ein Router z.B. zwischen einer Satellitenverbindung mit hohem Durchsatz und geringer Zuverlässigkeit oder einer Telefonleitung mit niedrigem Durchsatz und hoher Zuverlässigkeit wählen.

 In der Praxis wird das Feld derzeit allerdings von fast allen IP-Routern völlig ignoriert.

Die IP-Implementierungen verschiedener freier UNIX-Derivte wie Free BSD und Linux verfügen schon seit einiger Zeit über die Möglichkeit dieses Feld auszuwerten, und bei MS Windows 2000 wird diese Möglichkeit gerade als bahnbrechende Neuheit verkauft, so dass in Zukunft damit zu rechnen ist, dass dieses Feld an Bedeutung gewinnt.

Paketlänge

Die nächsten 16 Bit belegt das Feld Paket Length, das die Gesamtlänge des Datagramms angibt. Als vorzeichenlose 16-Bit-Ganzzahl hat es einen Höchstwert von 65535 (216-1) und schränkt damit die Maximalgröße von IPv4-Pakten auf 64-Kb ein.

Die übliche Größe von IP-Paketen liegt bei 1500 Byte.

Fragmentierung

Nun folgt das Feld Identification, das ein Datagramm eindeutig identifiziert.

IP hat hat die eingebaute Fähigkeit größere Pakete wenn nötig in kleinere Teile aufzubrechen und diese einzeln zu verschicken. Das kann notwendig werden, wenn eine Übermittlungsmedium einer tieferliegenden Schicht nur kleine Pakete befördern kann.

Alle Fragmente eines Datagramms haben in diesem Feld den gleichen Wert, und auf diese Art kann der Empfänger feststellen, zu welchem Datagramm das Paket gehört.

Wenn das erste Datagramm einer größeren Nachricht an einem Zielsystem ankommt, wird ein Timer gestartet. Sind nicht alle Teilpakete innerhalb einer vorgegebenen Zeit da, wird die gesamte Nachricht verworfen, weshalb unfragmentierte Nachrichten i.d.R. auch eine größere Chance haben anzukommen, als fragmentierte.

Danach kommt ein unbenutztes Feld auf das  zwei weitere Flag-Felder folgen:

  • DF (Don`t fragment) ist ein Befehl an den Router, ein Datagramm nicht zu fragmentieren. Das kann notwendig werden, wenn das Ziel nicht in der Lage ist es wieder zusammenzusetzen. Ist dieses Flag gesetzt und das Datagramm kann nicht in seiner ursprüngliche Größe versandt werden, wird es verworfen und der Absender bekommt eine Fehlernachricht zugesandt.
  • MF (More fragments) ist bei allen Fragmenten außer dem letzten eines fragmentierten Paketes gesetzt. Nachdem die Reihenfolge in der die Fragmente ankommen allerdings nicht garantiert ist, wird es nur in Zusammenhang mit den nächsten Headerfeld genutzt, um festzustellen ob alle Pakete angekommen sind.

Das nächste Feld heißt Fragment Offset. Wenn das MF-Bit gesetzt ist, gibt dieses Feld den Offset des aktuellen Datagramms im Gesamtdatagramm an. Da es sich um ein 13-Bit-Feld handelt, wird dieser Offset in 8-Byte-Einheiten angegeben. Damit sind maximal 8192 Fragmente pro Datagramm möglich.

Lebensdauer

Das Feld TTL steht hier für Time to Live und gibt an wie viele Sekunden das Paket leben soll. Maximal sind 255 Sekunden zulässig, und der Zähler muss bei jeder Teilstrecke erniedrigt werden. Bei längerer Zwischenspeicherung muss er mehrmals erniedrigt werden. Erreicht der Zähler 0 gilt das Paket als unzustellbar und wird verworfen. Anschließend wird der Quellhost über diesen Umstand unterrichtet.

Durch dieses Feld werden IP-Packete daran gehindert bis in alle Ewigkeit im Netz herumzuwandern. Obwohl der Feldinhalt in Sekunden angegeben wird, werden in der Praxis nur Teilsrecken gezählt.

Transportprotokoll

Wenn die Vermittlungsschicht ein komplettes Datagramm zusammen hat entscheidet sie was sie damit anfangen soll. Das Feld Transport Protocol sagt ihr, an welches Transport-Protokoll sie es weiterleiten soll, also z.B. ICMP, UDP, TCP etc. Die möglichen Werte für dieses Feld sind in der RFC1700 definiert.

Prüfsumme

Als nächstes kommt eine 16-Bit-Prüfsumme über alle Header-Felder.  Sie addiert einfach alle 16 Bit-Wörter des Headers und bildet daraus das Komplement. Diese Prüfsumme muss auf jeder Teilstrecke neu berechnet werden, weil sich ein Feld, nmlich TTL  aufjeder Wegstrecke ändert.

Adressen

Die folgenden beiden Felder Sending Adress und Destination Adress geben IP-Adresse von Sender und Empfänger an.

Adressen von IPv4 sind immer 4 Byte lang.

Optionen

Das Feld Options enthält Optionen und ist außerdem noch optional. Die verschiedenen Optionen folgen nacheinander im Optionsfeld. Jede Option wird durch ein Byte kontrolliert, das wie folgt aufgeteilt ist:

    Copy-Flag ( 1 Bit) entscheidet wie die Option bei Fragmentierung zu behandeln ist. Steht es auf 0, so wird die Option nur in das erste Fragment kopiert, sonst in alle Fragmente.
  • Optionsklasse ( 2 Bit) und
  • Optionsnummer ( 5 Bit )

Gültige Optionen sind:

Optionsklasse Optionsnummer beschreibung
0 0 Markiert das Ende der Optionsliste
0 1 Keine Option (Padding)
0 2 Sicherheitsoptionen. Bezeichnet wie geheim das Datagramm ist.  Theoretisch kann ein militärischer Router diese Option nutzen um festzulegen, das bestimmte Informationen nicht durch bestimmte Länder fließen sollen. Es wird allerdings von allen Routern ignoriert.
0 3 Loses Source-Routing Gibt eine Liste von Routern an, die auf jeden Fall und in der angegebenen Reihenfolge durchlaufen werden müssen.
0 7 Routenaufzeichnung aktivieren. Weist jeden Router durch den die Nachricht läuft an seine IP-Adresse anzuhängen. Da nur maximal 40 Byte zur Verfügung stehen reicht es aber nur für 9 Router , was für heutige Verhältnisse zu wenig ist..
0 9 Striktes Source-Routing. Gibt den vollständigen Pfad von der Quelle zum Ziel an. Das ist eventuell nützlich, wenn Routingtabellen beschädigt worden sind um Notpakete durchzubringen.
0 9 Zeitstempel. Veranlasst jeden Router zusätzlich zur IP-Adresse auch noch die Ankunftszeit anzuhängen. Da Systemuhren selten auf Milisekunden synchron laufen, ist diese Information aber eher nutzlos.