Arbeiten mit IP-Adressenvon Steve Graegert

May 2nd, 2005 Permalink

IP-Adressen sind allgegenwärtig. Ob IPv4 oder IPv6, immer wieder müssen wir uns mit ihnen auseinandersetzen, um unsere Aufgaben wahrzunehmen, beispielsweise um einen neuen Rechner in ein vorhandenes Netzwerk einzubinden oder um eine neue statische Route im Router zu konfigurieren. Leider stelle ich immer wieder fest, daß viele Netzwerkexperten beim Umgang mit IP-Adressen nicht ganz so sattelfest sind, wie sie es eigentlich sein sollten.

In diesem Artikel erläutere ich den Aufbau und den Umgang mit IPv4-Adressen und beschreibe am Ende, wie wir diese Techniken auf IPv6-Adressen anwenden können.

Grundlagen

IPv4-Adressen sind nichts weiter als vorzeichenlose 32-Bit Ganzzahlen. Router und Hosts sind damit zufrieden: eine andere Darstellung von Adressen ist nicht notwendig, da sie nicht weiter abstrahieren. Menschen dagegen haben Schwierigkeiten beim Umgang mit Zahlen in einer Größenordnnung von 232 und tun sich mit der Berechnung selbiger nicht gerade leichter. Daher sind IPv4-Adressen in vier Oktette unterteilt, die mit Punkten getrennt werden. Ein Oktett ist eine Menge von acht binären Zeichen (digits), auch als Byte bekannt. Warum wir nicht einfach von vier Bytes sprechen liegt daran, daß je nach Computer-Architektur Bytes unterschiedlich interpretiert werden, ein Oktett jedoch immer aus acht binären Zeichen besteht. Abbildung 1 zeigt die Struktur von IPv4-Adressen:

Aufbau von IPv4-Adressen

Aufbau von IPv4-Adressen

Da jedes Oktett einen binären Wert (Basis 2) zwischen 0 und 28kodiert liegt der dezimale Höchstwert bei 255.

Dieser Teil ist einfach und nicht neu, zumindest sollte es das nicht sein. Die größten Probleme bereiten uns Subnetzmasken, da sie zwar genau so wie IPv4-Adressen aussehen, aber keine sind, deshalb heißen sie ja auch Subnetzmasken und nicht Subnetzadressen, die eine ganz andere Bedeutung haben.

Um Subnetzmasken zu verstehen, müssen wir wissen, was ein Gerät damit macht, um zu entscheiden, wohin ein Paket gesendet werden soll. Betrachten wir dazu Abbildung 2:

IPv4 -Subnetzmasken

IPv4 -Subnetzmasken

Host A mit der IP-Adresse 192.168.0.2 mit einer 24-Bit-Subnetzmaske (255.255.255.0) adressiert Host D mit der IP-Adresse 192.168.1.2/24 (CIDR-Notation). Das Internet-Protokoll von Host A muß nun entscheiden, ob das Zielsystem im gleichen Netzwerk (und damit in der gleichen Broadcast-Domain) liegt oder nicht. Befindet sich Host D im gleichen Netzwerk, kann einfach die Hardware-Adresse des Zielsystems ermittelt und das Paket direkt zugestellt werden. Ist das nicht der Fall, muß Host A das Paket an das Default Gateway (hier: Router B) übergeben, das schließlich die Vermittlung übernimmt.

Das von Host A angewendete Verfahren ist relativ einfach: zuerst wird die binäre Darstellung der lokalen IP-Adresse über eine logische UND-Operation mit der Subnetzmaske verknüpft und das Ergebnis zwischengespeichert. Der gleiche Vorgang wird auf die IP-Adresse und Subnetzmaske des Zielsystems angewendet. Das Resultat dieser Berechnnung ist eine Netzwerkadresse (auch Präfix genannt). Stimmen die Netzwerkadressen nicht überein, wird das Default Gateway zur Weiterleitung des Pakets herangezogen, da das Zielsystem offenbar nicht im gleichen Subnetz liegt. In unserem Fall unterscheidet sich lediglich das dritte Oktett, denn die Netzwerkadresse von Host A lautet 192.168.0.0 und von Host B 192.168.1.0.

Das Präfix ist lediglich eine dezimale Darstellung der binären Subnetzmaske, die eine bestimmte Länge aufweist. Die oben verwendete Notation ist eine Kurzform, die anzeigt, wieviele Bits die Subnetzmaske verwendet. In unserem Beispiel hat das Präfix eine Länge von 24 Bits, was bedeutet, daß die ersten drei Oktetts der Subnetzmaske gesetzt, also 1, sind und die dezimale Schreibweise 255.255.255.0 dem Präfix /24 entspricht. Das Präfix /21, beispielsweise, setzt 21 Bits der Subnetzmaske auf 1, was der dezimale Schreibweise 255.255.248.0 enstpricht.

Mit IP-Adressen Arbeiten

Bei der Arbeit mit IPv4-Adressen und Präfixen stoßen wir immer wieder auf zwei Fragen:

  1. Wie lautet die Netzwerkadresse eines Präfixes?
  2. Wie lauten die Hostadressen eines Präfixes?

Für jede Antwort auf die Fragen gibt es eine einfache und eine schwierige Lösung. Es lohnt sich durchaus, beide zu kennen.

Auf die harte Tour

Die harte Tour besteht im Grunde darin die Präfixe und Host-Adressen in ihre binären Darstellungen zu übertragen und anschließend die notwendigen AND- und NOR-Operation manuell durchzuführen. Anschließend konvertieren wir die Ergebnisse zurück in die dezimale Schreibweise. Die notwendigen Rechenoperationen illustriert Abbildung 3 an der IPv4-Addresse 192.168.100.80/26:

Umrechnung von IP-Adressen ins Binärformat

Umrechnung von IP-Adressen ins Binärformat

Das Verfahren ist einfach, aber mühsam: das Oktett (hier: 192) wird durch 2 dividiert und der Rest rechts aufgetragen. Dann dividieren wir das Ergebnis der vorangegangenen Operation (hier: 48) durch 2 und tragen den Rest von rechts nach links auf. So gehen wir immer weiter vor, bis wir 0 erreichen. Als Ergebnis dieser Berechnung erhalten wir die binäre Darstellung des Oktetts 192. Das ganze müssen wir natürlich auch für die übrigen Oktetts durchführen, um hinterher die AND- und NOR-Operation anwenden zu können, was folgende Abbildung zeigt:

Einfache Konvertierung von IP-Adressen ins Binärformat

Einfache Konvertierung von IP-Adressen ins Binärformat

Zunächst ermitteln wir die Netzwerkadresse, indem wir die IP-Adresse mit einer AND-Operation mit der Subnetzmaske verknüpfen. Um den Hostteil zu ermitteln, invertieren wir die Subnetzmask einfach und führen erneut ein AND mit der IP-Adresse durch.

Auf die leichte Tour

Der zweite Ansatz ist einfacher, weil wir nicht so viel binär rechnen müssen. Das Geheimnis ist, daß wir immer nur mit einem Oktett arbeiten, unabhängig davon wie lang das Präfix ist. Das besagte Oktett bezeichnen wir der Einfachheit halber als Arbeitsoktett. Weiterhin erleichtern wir uns die Arbeit, indem wir davon ausgehen, daß alle Oktetts vor dem Arbeitsoktett Teil der Netzwerkadresse und alle Oktetts nach dem Arbeitsoktetts Teil der Hostadresse sind.

Wir finden das Arbeitsoktett durch eine einfache Division: wir dividieren die Präfixlänge (hier: 26) durch 8, verwerfen den Rest und addieren 1. Das Ergebnis für das /26-Prefix ist: (26 : 8) + 1 = 4. Das Arbeitsoktett ist also das vierte. Eine andere Möglichkeit ist, nur den Rest zu betrachten: (26 : 8) = 3 Rest 2 + 1 = 3. Das sagt uns, daß wir die ersten drei Oktetts ignorieren können und das letzte das Arbeitsoktett ist.

Der Divisionsrest zeigt uns die Netzwerkadresse der betreffenden IPv4-Adresse. Dazu bemühen wir uns folgender Tabelle:

1 2 3 4 5 6 7 8
128 64 32 16 8 4 2 1

Tabelle 1: Abstände der Netzwerkadressen auf Basis der Präfixlänge des Arbeitsoktetts.

Nun brauchen wir nur noch nachzusehen, welcher Wert dem Rest zugeordnet ist. Die erste Reihe der Tabelle zeigt die Länge des Präfixes im Arbeitsoktett an, die zweite Zeile listet zum einen die Präfixwerte auf, wenn das Bit der ersten Zeile 1 ist und zum anderen die Anzahl der Hosts in dem Subnetz mit dieser spezifischen Präfixlänge.

In unserem Fall korrespondiert der Rest von 2 mit dem Eintrag 64 in der Tabelle, so daß wir in 64er Abständen unsere Subnetze finden: 0, 64, 128 und 192. Und welche Netzwerkadresse hat unsere IPv4-Adresse 192.168.100.80/26? Finden Sie dazu das größte Subnetz, das in in die Zahl im Arbeitsoktett paßt. Das größte Subnetz, das in den Wert 80 paßt ist 64; also befindet lautet unsere Netzwerkadresse 192.168.100.64/26.

Ganz ähnlich gehen wir vor, um die Hostadresse zu finden. Da wir die Netzwerkadresse kennen, brauchen wir nur die Netzwerkadresse von der IPv4-Adresse zu subtrahieren: 80 – 64 = 16. Folgende Tabelle fast die Schritte nocheinmal zusammen:

IPv4-Adresse Division Oktett Rest Schritte Netzwerkadresse Host
192.168.100.80/26 (26 : 8) = 3 3 + 1 = 4 2 64 192.168.100.64/26 80 – 64 = 16
10.1.1.48/23 (23 : 8) = 2 2 + 1 = 3 7 2 10.1.0.0/23 1 – 0 = 1.48
172.31.80.10/22 (22 : 8) = 2 2 + 1 = 3 6 4 172.31.80.0/22 80 – 80 = 0.10

Tabelle 2: Rechenbeispiele.

Die letzten beiden Zeilen sind Beispiele bei denen das Arbeitsoktett das dritte und nicht das vierte ist. Um hier die Hostadresse zu finden, ermitteln wir einfach die Hostadresse im Arbeitsoktet und ziehen sie mit in das vierte Oktett. Das funktioniert, weil ein Teil des dritten Oktetts und das gesamte vierte Oktett teil der Hostadresse sind.

Supernetting und Aggregation

Supernetting ist neben dem Subnetting eine der schwierigsten Disziplinen für Netzwerker. Mit dem richtigen Ansatz ist auch das nicht schwer, denn Supernetting basiert auf einem relativ einfachen Konzept, nämlich Aggregation.

Eine mögliche Definition des Begriffs lautet folgendermaßen:

Route aggregration is the effort to route smaller prefixes via an aggregated larger prefix (supernetting).

Alles klar? Kurz gesagt ist Aggregation die Zusammenfassung von kleinren Präfixen in größere Präfixe. Auch nicht besser? Betrachten wir ein kleines Beispiel.

IP Address Aggregation

IP Address Aggregation

Die drei Hosts mit den Adressen 10.1.2.1, 10.1.2.2 und 10.1.2.3 befinden sich in Subnetz /24, das Router A nach außen anzeigt (route advertising). Er gibt damit bekannt, daß "die Adressen 10.1.2.0 bis 10.1.2.255 durch mich erreichbar sind". Natürlich sind nicht alle Adressen dieses Bereichs belegt, aber das macht nichts, in jedem Fall sind Hosts mit Adressen in diesem Bereich über Router A erreichbar. Der Router zeigt nicht individuelle Hostadressen, sondern lediglich eine Netzwerkadresse an. Router B gibt ebenfalls eine Netzwerkadresse mit der gleichen Präfixlänge bekannt: 10.1.3.0. Router C kann nun beide Netzwerkadressen in eine einzige zusammenfassen, was als Aggregation bekannt ist. Router C sagt nun: "alle Hosts mit Adressen im Bereich von 10.1.2.0 bis 10.1.3.255 sind durch mich erreichbar". Der Vorteil dieser Technik ist, daß Router C nur noch einen Eintrag in seiner Routing-Tabelle benötigt, um zwei Routen zu verwalten. Übertragen auf die Größe des Internets können wir uns ausmalen, welch positiven Effekt das auf die Routing-Tabellen von ISP-Routern hat.

Der Begriff Subnetz ist bereits im Zusammenhang mit Subnetzmasken gefallen, obwohl wir bisher auch hätten von Netzmasken sprechen können. Ein Subnetz ist ein Netzwerk, daß sich innerhalb eines anderen Netzwerks befindet. Im Gegensatz dazu ist ein Supernetz (supernet) ein Netzwerk, daß andere Netzwerke enthält. Somit sind die beiden Netze 10.1.2.0/24 und 10.1.3.0/24 Subnetze von 10.1.0.0/23 und 10.1.0.0/23 ist das Supernet von 10.1.2.0/24 und 10.1.3.0/24.

Warum das Zusammenfassen der Netzwerke zu einem Supernetz völlig in Ordnung ist, zeigt folgenden Abbildung:

IP Address Supernetting

IP Address Supernetting

Bei genauerer Betrachtung der binären Darstellung der Netzwerkadressen stellt sich heraus, daß nur das Bit 24 die beiden Netzwerkadressen unterscheidet. Indem wir einfach ein um ein Bit größeres Präfix wählen, blenden wir genau dieses 24. Bit einfach aus und schon haben wir beide Netzwerke zusammengefaßt.

Ein reelles Problem

Nicht nur als Prüfungsfragen beliebt sind Problemstellungen die sich mit der Anzahl von Subnetzen für X Hosts auseinandersetzen, ohne Adressraum zu verschwenden:

Sie verwalten 4 Subnetze mit folgenden Anzahlen von Hosts in diesen Subnetzen: 29, 14, 58 und 3. Ihnen wurde der Adressraum 10.1.1.0/24 zugewiesen. Zeigen Sie, wie Sie den Addressraum aufteilen, um alle Hosts in ihren jeweiligen Subnetzen unter zu bringen.

Das klingt auf den ersten Blick recht schwierig, doch mit den gewonnenen Erkenntnissen können wir der Aufgabe gezielt beikommen. Prinzipiell gehen wir folgendermaßen vor:

  1. Wir ordnen die Anzahl der Hosts absteigend, denn das Netzwerk mit der höchsten Anzahl von Hosts bestimmt, wie wir den Adressraum aufteilen: 58, 29, 14, 3.
  2. Aus Tabelle 1 ermitteln wir die kleinste Zahl, die die größte Anzahl von Hosts + 2 aufnehmen kann. Wir müssen zwei addieren, weil die Broadcastaddressen und Netzwerkadressen nicht für Hostadressen verwendet werden können; die Ausnahmen sind Point-to-Point-Links.
  3. Wiederhole die Schritte bis wir entweder jeden Host in seinem Netzwerk untergebracht haben, oder wir keinen Platz mehr haben.

Die Lösung

Zuerst müssen ordnen wie die Anzahl der Hosts absteigend: 58, 29, 14, 3 und beginnen mit der höchsten Anzahl.

    Netzwerk für 58 Hosts

  1. Die kleinste Zahl größer 58 + 2 ist 64: 2 Bits für das Präfix.
  2. Die gegebene Präfixlänge ist /24. Addiere 2 Bits: /26.
  3. Das erste Netzwerk beginnt bei 10.1.1.0/26.
  4. Das nächste Netzwerk beginnt bei 10.1.1.0/26 + 64.
    Netzwerk für 29 Hosts

  1. Die kleinste Zahl größer 29 + 2 ist 32: 3 Bits für das Präfix.
  2. Die gegebene Präfixlänge ist /24. Addiere 3 Bits: /27.
  3. Das zweite Netzwerk beginnt bei 10.1.1.64/27.
  4. Das nächste Netzwerk beginnt bei 10.1.1.64/27 + 32.
    Netzwerk für 14 Hosts

  1. Die kleinste Zahl größer 14 + 2 ist 16: 4 Bits für das Präfix.
  2. Die gegebene Präfixlänge ist /24. Addiere 4 Bits: /28.
  3. Das dritte Netzwerk beginnt bei 10.1.1.96/28.
  4. Das nächste Netzwerk beginnt bei 10.1.1.96/28 + 16.
    Netzwerk für 3 Hosts

  1. Die kleinste Zahl größer 3 + 2 ist 8: 5 Bits für das Präfix.
  2. Die gegebene Präfixlänge ist /24. Addiere 4 Bits: /29.
  3. Das vierte Netzwerk beginnt bei 10.1.1.112/29.
  4. Das letzte Netzwerk wurde ermittelt; damit sind wir fertig.

Mit Hilfe dieser Vorgehensweise haben wir den Addressraum optimal aufgeteilt, allerdings sollte klar sein, daß nun kaum Spielraum für Erweiterungen vorhanden ist. Das Geheimnis zur Lösung solcher Aufgaben liegt in der Wiederholung der Schritte, die zuvor erläutert wurden, ausgehend vom größten Netzwerk zum kleinsten.

IPv6-Adressen verwenden

Obwohl IPv6-Adressen länger sind, basieren sie auf dem gleichen Konzept von Oktetten und Präfixen, und selbst Router machen bei der Arbeit mit IPv6-Adressen keinen Unterschied zu IPv4-Adressen.

Nehmen wir an, wir verwenden die IPv6-Adresse 2002:FE10:2849:DD0A:B321:AC34:0E21/63 und wir wollen die Netzwerkadresse ermitteln. Dazu gehen wir genau so vor, wie wir es gelernt haben:

  1. Ermitteln des Rests: 63 : 8 = 7 Rest 7.
  2. Damit ist unser Arbeitsoktett das achte Oktett: 0A.
  3. Bei einem Rest von 7 gibt Tabelle 1 einen Abstand der Netzwerke von 2 vor: 00, 02, 04, 06, 08, 0A, 0C und 0E.
  4. Die Netzwerkadresse ist also: 2002:FE10:2849:DD0A::/63.

Wie wir sehen können, sind die Prinzipien für IPv4- und IPv6-Addressen gleichermaßen gültig. Nachwievor sind die Adressen aus binären Zeichen zusammengesetzt, die in Oktette gruppiert sind. Bei IPv6 ist allerdings jedes Zeichenpaar ein Oktet, wie wir mit 0A gesehen haben.

Kommentieren