Serie IPv6, Teil 1: Grundlagen

Aus LinuxUser 01/2010

Serie IPv6, Teil 1: Grundlagen

© spekulator, sxc.hu

Direkter Draht

Kaffeemaschine spricht mit Mobiltelefon – das geheimnisvolle IPv6 macht es möglich. Wir zeigen, was hinter der Technik der Zukunft steckt.

Jeder kennt es, jeder benutzt es – aber nur wenige kennen die genaue Geschichte und Funktionsweise: Die Rede ist vom Internet-Protokoll [1]. Anfangs nur zum Verbinden von einigen wenigen Rechnern gedacht, baut heute auf dieser Technik das gesamte Internet auf. Die aktuelle Version 4 des Protokolls hat jedoch ein Problem – es gehen so langsam die Adressen aus. Zeit also, einen Blick auf den Nachfolger IPv6 zu werfen.

Bei den heute als Internet bekannten Strukturen handelt es sich um eine Ansammlung verschiedener Protokolle. Um deren Aufgaben schematisch zu beschreiben, existiert das sogenannte OSI-Schichtenmodell (Abbildung 1). Es ordnet den einzelnen Schichten die Protokolle des TCP/IP-Stacks zu.

Abbildung 1: Das OSI-Schichtenmodell bestimmt die Zusammenarbeit und Aufgaben der einzelnen Protokolle.

Abbildung 1: Das OSI-Schichtenmodell bestimmt die Zusammenarbeit und Aufgaben der einzelnen Protokolle.

Kurze Geschichte des Internets

Ende der Sechziger Jahre hatte das US-Verteidigungsministerium (Department of Defense, kurz DoD) die Idee, ein Computernetzwerk zu entwickeln, das weltumspannend arbeiten und maximale Ausfallsicherheit bieten sollte. Bei den Designideen spielte der damalige Konflikt zwischen den Machtblöcken eine große Rolle. Der erste funktionstüchtige Entwurf des neuen Netzwerks trug den Namen Arpanet [4] (Advanced Research Projects Agency Network). Zum Vermitteln der Daten teilten die Forscher diese in kleine Happen auf und verpackten sie in mehrere Netzwerkpakete, um sie zwischen zwei Rechnern auszutauschen.

Das Netzwerk erfreute sich immer größerer Beliebtheit, und immer mehr Universitäten und Forscher wollten Zugang zum Netz. Die Folge: Innerhalb des Arpanets entstanden neue kleine Netz-Inseln, die das bestehende Netz immer weiter vergrößerten und unüberschaubarer machten. Aus Sicherheitsgründen trennte das Militär seinen Teil des Netzes Anfang der Achtziger Jahre Netzes ab. Es war ab diesem Zeitpunkt nur noch über streng gesicherte Gateways zu erreichen.

Somit entstand auf der einen Seite ein ausschließlich militärisch genutzter Teil, das sogenannte Milnet, und auf der anderen Seite ein Forschungsteil des alten Arpanet. Durch den Split des Netzwerks, die wachsende Beliebtheit von vernetzten Rechnern und dem Start der TCP/IP-Protokollfamilie [1] entstand aus dem Arpanet im Laufe der folgenden Jahre das Netzwerk, das heute den Namen Internet trägt.

OSI-Schichten

Auf den Layern 1 (Übertragen der Bits) und 2 (Sichern) existierten die Protokolle, mit denen Sie physikalische Verbindungen aufbauen – also beispielsweise Ethernet, aber auch Token-Ring oder FDDI. Auf Layer 3 (Vermittlung) sitzt das Protokoll, das sich um das Verteilen der einzelnen Netzwerkpakete kümmert, das Internet-Protokoll. Layer 4 (Transport) stellt den jeweiligen Anwendungen die Pakete bereit. Typischerweise kommt hier UDP und TCP zum Einsatz.

Auf den Layern 5 (Kommunikation), 6 (Darstellung) und 7 (Anwendung) finden sich die Anwendungsprotokolle, darunter beispielsweise HTTP, FTP und SMTP. Damit die einzelnen Daten, die ja in vielen einzelnen Paketen verpackt vorliegen, überhaupt den Weg zum Ziel finden, ist eine richtige Konfiguration und ein grundlegendes Verständnis des Internet-Protokolls auf der Schicht 3 unerlässlich.

Die einzelnen, als IP-Pakete bezeichneten Datenpäckchen besitzen dabei immer den gleichen Aufbau: Auf den sogenannten Header mit den Informationen zum Zustellen des Pakets folgt ein Body mit den zu übertragenden Daten. Der Header umfasst in der Regel 20 Bytes, optionale Informationen erweitern ihn bis auf 60 Bytes. Der eigentliche Nutzdatenteil enthält je nach Netzwerk bis zu 65?535 Bytes. Im Ethernet ist eine Größe von 1500 Bytes üblich.

Zwei wichtige Felder des IP-Headers enthalten die Empfänger- und die Absenderadresse. Diese beiden Felder sind in der aktuellen Version 4 des Internet-Protokolls je genau 32 Bit groß, also 4 Bytes. Das ermöglicht es, genau 4.294.967.296 (232) unterschiedliche Adressen anzusteuern.

Knapper Adresspool

In den Anfangstagen des Internet glaubten die Verantwortlichen, dass diese gut vier Milliarden Adressen für alle Zeiten reichen würden. Niemand kam auf den Gedanken, dass irgendwann nahezu jedes Telefon, jeder Fernseher und viele andere Geräte über eine eigene IP-Adresse verfügen würden, um ständig neue Daten aus dem Internet zu erhalten. Doch genau dieser Fall tritt ein – es gehen langsam die Adressen aus. Nach aktuellen Hochrechnungen der Internet Assigned Numbers Authority (IANA, [2]) sind spätestens Anfang 2013 die letzten freien IPv4-basierten Adressen vergeben.

Mit Umstrukturierungen des bestehenden Adressraums in A-, B- und C-Netze und fest definierten Subnetzmasken und später mit frei wählbaren Netzmasken und Adressumsetzungen mit Hilfe von Network-Address-Translation (NAT) versuchten Techniker bereits früh, dieses Problem zu lösen. In mancherlei Hinsicht machte dies das Leben in der IP-Welt aber immer schwieriger, und der Markt an IP-fähigen Endgeräten wächst nach wie vor.

Aus diesem Grunde arbeiten bereits seit vielen Jahren Experten auf der ganzen Welt an einer neuen Version des Internet-Protokolls. Sie trägt heute den Namen IPv6, früher hieß sie einmal IPng (“IP Next Generation”). Anders als bei der aktuellen Version v4 kommt hier ein jeweils 128 Bit – also 16 Bytes – großes Feld beim Adressieren zum Einsatz. Das erlaubt es, 2128 unterschiedliche Adressen anzusteuern, also ungefähr 340 Sextillionen.

Möchten Sie sich diese Zahl verdeutlichen, so stellen Sie sich vor, dass Sie bei diesem Adressraum jeden Quadratmillimeter der Erdoberfläche mit mehreren hundert Milliarden IP-Adressen belegen könnten. Dabei ist die Anzahl der möglichen IP-Adressen nur ein Vorteil von vielen.

Die Verantwortlichen wollten die Fehler der ersten Protokollimplementierung nicht wiederholen, und so flossen eine Menge neuer Features und Fehlerkorrekturen mit in die neue Protokollversion ein. Die ersten Patches für den Linux-Kernel 2.1.8 stellte Pedro Roque bereit. Seitdem hat sich einiges getan.

IPv6 – Ein Überblick

Das Header-Format hat sich im Vergleich zur alten Version stark vereinfacht (Abbildung 2). Statt wie bislang zwischen 20 und 60 Bytes hat hat der Paketkopf nun eine feste Größe von 40 Bytes. Die verteilen sich auf einen Basis- und mehrere Extension-Header, wobei letztere eher selten zum Einsatz kommen. Der kleinere IP-Header bietet den Vorteil, dass Router und andere Geräte zum Weiterleiten von IP-Paketen diese nun schneller und effizienter verarbeiten können.

Abbildung 2: Der Header eines IPv6-Pakets enthält weniger Daten, was das Verarbeiten erleichtert.

Abbildung 2: Der Header eines IPv6-Pakets enthält weniger Daten, was das Verarbeiten erleichtert.

Ein weiterer Vorteil von IPv6 liegt ganz klar im Bereich von mobilen Endgeräten, also beispielsweise IP-fähigen Handys, PDAs oder auch Notebooks. Sie wären immer unter der gleichen Adresse zu erreichen – egal, in welchem Netzwerk auf der Welt sie sich gerade befinden. Dies ermöglicht ein sogenannter Home-Agent (HA). Er befindet sich im Heimatnetzwerk des eigentlichen Clients und empfängt die gerade aktuelle Adresse (“Care-of-Address”, CoA) des mobilen Endgerätes über sogenannte “Binding Updates” des Geräts, sobald dieses im gerade aktuellen Netzwerk eine IP-Adresse bezogen hat. Spricht nun ein Gerät das Endgerät über die reguläre IP-Adresse des Heimatnetzwerkes an, so leitet der Home-Agent die Anfrage einfach an die momentan aktuelle IP des Geräts weiter. Dieses Feature heißt in der IPv6-Welt “Mobile-IP”.

Auch im Bereich von Dienstequalität (“Quality of Service”, QoS) bietet das neue Protokoll einige Vorteile. So existieren im IP-Header zwei spezielle Felder, die die Dringlichkeit der Pakete definieren. Auf diese Weise legen Sie beispielsweise schon beim Aufbau der Verbindung bestimmte Anforderungen an diese fest. Dieser Funktion kommt gerade in solchen Umgebungen eine große Bedeutung zu, in denen die Zustelldauer der Pakete und die Bandbreite eine große Rolle spielen – also etwa bei Video- und Audio-Telefonie oder bei Onlinespielen.

Außerdem bringt beispielsweise die vorgeschriebene Integration von IPSec (“IP-Security”) auch zusätzliche kryptographische Mechanismen mit in das Protokoll. Dies soll das sichere Authentifizieren und Verschlüsseln der Datenpakete gewährleistet. Einige dieser Neuerungen existieren bereits als Aufsatz für die aktuelle IP-Version, so auch IPSec. Weitere Änderungen und Neuheiten, die IPv6 mit sich bringt, finden Sie auf der im Netz aufgeführten Liste [3].

Adress-Schema

Angesichts der Größe des Adressraums eignet sich bei IPv6 die bei IPv4 verwendete dezimale Darstellung der Adressen nicht mehr. Schließlich müssten Sie hier nicht nur 4 Oktetts mit jeweils 1 Byte darstellen, sondern 8 Oktetts mit jeweils 2 Byte. Aus diesem Grund kommt bei IPv6 eine hexadezimale Schreibweise zum Einsatz. Ein Beispiel für eine solche Adresse wäre:

2001:0dc4:55b1:08d3:1216:8b2e:0170:3344

Die Adresse setzt sich dabei aus drei unterschiedlichen Segmenten zusammen. Das hintere (rechte) Segment nimmt dabei die 64 Bit lange Interface-ID ein – im Beispiel 1216:8b2e:0170:3344 . Sie bestimmt, für welchen Rechner innerhalb eines Subnetzes ein IP-Paket bestimmt ist. Die ersten 64 Bit der Adresse (2001:0dc4:55b1:08d3) setzen sich aus Global Routing Prefix und Subnetz-ID zusammen.

In der Regel nimmt der Global Routing Prefix dabei die ersten 48 Bits (links) ein. Diesen gibt der Internet Service Provider (ISP) an die eigenen Kunden weiter (2001:0dc4:55b1). Dieser ist dann in der Lage, mit den verbleibenden 16 Bits der Subnetz-ID (08d3) bis zu 65?535 eigene Teilnetze aufzubauen. Global Routing Prefix und Subnetz-ID zusammen bestimmen den sogenannten Subnetz-Prefix. Benötigt ein Kunde mehr Teilnetze, so besteht die Möglichkeit, die Subnetz-ID entsprechend zu vergrößern.

Ein großer Vorteil von IPv6 liegt beispielsweise in der Möglichkeit, Netzwerkkarten automatisch zu konfigurieren. Diese Funktion heißt auch “Stateless Autoconfiguration”. Möchte ein IPv6-Host seine Netzwerkkarte aktivieren, so generiert er zunächst die Interface-ID. Dies geschieht nach dem Zufallsprinzip oder aber auf Basis der MAC-Adresse. Natürlich besteht die Möglichkeit, diese fix zu definieren.

Von allen verfügbaren Routern erhält der Client den passenden Subnetz-Prefix. Interface-ID und Subnetz-Prefix bestimmen dann die IPv6-Adresse des Clients. Von diesen darf er durchaus mehrere besitzen. Unter IPv6 ist es nicht üblich, einmal erhaltene IP-Adressen später zu löschen.

Die eigentliche Konfiguration findet komplett auf den Routern statt. Auf den Clients selbst brauchen Sie keine Angaben mehr zu machen. Benötigt ein Client neben der IP-Adresse selbst noch einen DNS- und Gateway-Server, so lässt sich hierfür auf IPv6-fähige DHCP-Server zurückgreifen. Um die IP-Adresse kümmern diese sich allerdings nicht mehr, das ist bei IPv6 Aufgabe der Router. Somit entfällt die lästige Pflege von Lease-Datenbanken.

Wie bereits weiter oben angesprochen, bestehen IPv6-Adressen aus jeweils 8 hexadezimalen 2-Byte-Blöcken. Die einzelnen Blöcke trennen Sie mittels Doppelpunkt von einander. Beginnt ein Block mit einer oder mehreren Nullen, so ist es erlaubt, diese einfach wegzulassen. Bestehen mehrere zusammenhängende Blöcke ausschließlich aus Nullen, so dürfen Sie diese einmalig durch zwei aufeinander folgende Doppelpunkte ersetzen.

Vereinfacht

Die IPv6-Adresse 2001:0d81:0000:06e3:0000:5b1a:1010:1234 ließe sich nach der ersten Regel auch als 2001:d81:0:6e3:0:5b1a:1010:1234 schreiben. Die Adresse 2001:ab6:0:0:0:0:1234:35ce wäre nach der zweiten Regel mit 2001:ab6::1234:35ce gleichbedeutend. Aufeinander folgende Null-Blöcke dürfen Sie lediglich einmalig ersetzen, da sonst keine Eindeutigkeit mehr gewährleistet wäre.

Um nun zwischen Interface-ID und Subnetz-Prefix zu unterscheiden, kommt die sogenannte CIDR-Notation (“Classless Inter Domain Routing”) zu Einsatz. Die Anzahl der Bits, die der Subnetz-Prefix einnimmt, folgt als dezimale Zahl und mit einem Schrägstrich getrennt hinter der eigentlichen Adresse. Ein Beispiel: Die Adresse 2001:0ab6:65b1:03a1:2116:7a1e:1a50:4357/64 mit einem Prefix zu 64 Bit, bestimmt den Subnetz-Prefix mit 2001:0ab6:65b1:03a1 und mit 2116:7a1e:1a50:4357 die Interface-ID.

Link-lokale Adressen

Unter IPv6 gehören bestimmte Adressen vordefinierten Bereichen an: Link-lokale Adressen (fe80::/10) kommen bei der initialen Kommunikation mit Routern und üblicherweise nur im lokalen Netzwerksegment zum Einsatz. Router leiten diese Adressen nicht weiter. Besitzt ein Client im lokalen Netzwerk noch keine Adresse, so konfiguriert er sich selbstständig mit Hilfe einer Link-lokalen Adresse. Mit Hilfe des Neighbor Discovery Protocol (NDP) sucht der Rechner dann innerhalb seiner Nachbarschaft nach verfügbaren Routern, um von diesen gültige Prefixe für die Netzwerksegmente zu erfragen, an denen der Rechner angeschlossen ist.

Befindet der Rechner sich in mehreren Netzwerksegmenten, so erhält er mehrere Prefixe von unterschiedlichen Routern. Zusammen mit dem Interface-Identifier ergeben sich hieraus dann eine oder mehrere IP-Adressen für diesen Rechner. Meistens handelt es sich bei diesen um sogenannte Unicast-Adressen die auch außerhalb des lokalen Netzwerksegments Gültigkeit besitzen.

Unicast/Multicast

Unicast-Adressen (2000::/3) dienen als globale, weltweit eindeutig IPs. Router leiten diese Adressen entsprechend Ihren Tabellen an den jeweils nächsten Hop weiter. Diese Art der Adressen bezieht ein Client entweder von einem Router (Stateless Address Configuration) oder einem DHCP-Server (Stateful Address Configuration). In der IPv6 Welt spielt DHCP jedoch eine untergeordnete Rolle, sodass die Vergabe in den allermeisten Fällen durch einen Router stattfindet. In der Linux-Welt existiert für diese Aufgabe ein Tool mit dem Namen Radvd.

Bei Multicast-Adressen (ff00::/8) verbergen sich anders als bei einer Unicast-Adresse mehrere Empfänger hinter einer Adresse. Somit lassen sich mit einem einzelnen Paket eine Vielzahl von Empfängern ansprechen. Beispielsweise sendet ein Client bei seiner initialen Autoconfiguration mittels NDP eine Anfrage an die Multicast-Adresse ff02::2. Alle Router des lokalen Netzwerksegments hören auf eine solche Adresse und antworten auf entsprechende Anfragen.

Ähnlich wie bei IPv4 existieren auch bei IPv6 einige spezielle Adressen wie beispielsweise localhost (::1/128, entspricht 127.0.0.1 ) oder eine nicht definierte Adresse (::/128, entspricht 0.0.0.0). Wollen Sie einen Ping auf das Loopback-Gerät testen, so geben Sie hierfür das Kommando ping6 -c1 ::1 ein. Die Ausgabe sollte auf Ihrem Rechner ähnlich aussehen wie in Abbildung 3.

Abbildung 3: Mit     <code srcset=

ping6 setzen Sie IPv6-Testpakete ab. Hier sehen Sie einen IPv6-Ping auf das Loopback-Gerät.” width=”300″ height=”112″ /> Abbildung 3: Mit ping6 setzen Sie IPv6-Testpakete ab. Hier sehen Sie einen IPv6-Ping auf das Loopback-Gerät.

Natürlich setzt dies eine funktionierende IPv6-Netzwerkkonfiguration voraus. Die meisten Distributionen aktivieren das Protokoll jedoch bereits automatisch bei der Installation. Es ist also sehr wahrscheinlich, dass dieser kleine Test auch bei Ihrem Rechner klappt.

Infos

[1] TCP/IP-Protokollfamilie: http://de.wikipedia.org/wiki/TCPIP

[2] Hochrechnungen zum Ende von IPv4: http://www.potaroo.net/tools/ipv4/

[3] Status IPv6: http://ipv6.com/articles/general/timeline-of-ipv6.htm

[4] Arpanet: http://de.wikipedia.org/wiki/Arpanet

LinuxUser 01/2010 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben