Um eine Kommunikation zwischen zwei technischen Geräten aufzubauen, muss jedes der Geräte in der Lage sein, dem anderen Gerät Daten zu senden. Damit diese Daten bei der richtigen Gegenstelle ankommen, muss diese eindeutig benannt (adressiert) werden. Dies geschieht in IP-Netzen mit einer IP-Adresse. So wird zum Beispiel ein Webserver von einem Webbrowser direkt über seine IP-Adresse angesprochen. Der Browser fragt dazu für einen Domainnamen, zum Beispiel „www.example.com“, die IP-Adresse bei einem Nameserver an und spricht den Webserver dann direkt unter seiner IP-Adresse an.
Eine IP-Adresse ist eine Adresse, die – wie z. B. das Internet – auf dem Internetprotokoll (IP) basiert. Sie wird Geräten zugewiesen, welche an das Netz angebunden sind und macht die Geräte so adressierbar und damit erreichbar. Die IP-Adresse kann einen einzelnen Empfänger oder eine Gruppe von Empfängern bezeichnen (Multicast, Broadcast). Umgekehrt können einem Netzknoten mehrere IP-Adressen zugeordnet sein.
Die IP-Adresse wird verwendet, um Daten von ihrem Absender zum vorgesehenen Empfänger transportieren zu können. Ähnlich der Postanschrift auf einem Briefumschlag werden Datenpakete mit einer IP-Adresse versehen, die den Empfänger eindeutig identifiziert. Aufgrund dieser Adresse können die „Poststellen“, die Router, entscheiden, in welche Richtung das Paket weiter transportiert werden soll. Im Gegensatz zu Postadressen sind IP-Adressen nicht an einen bestimmten Ort gebunden.
Technisch gesehen ist eine IP-Adresse eine Zahl, z.B. 3232236074. Da sich die Zahlen so aber schwer merken lassen, hat man sich eine alternative Schreibweise einfallen lassen.
Die bekannteste Notation der heute geläufigen IPv4-Adressen besteht
aus vier Zahlen, die Werte von 0 bis 255 annehmen können und mit einem
Punkt getrennt werden, beispielsweise 192.168.2.42 (entspricht der obigen
Zahl, davon später mehr).
Um diese Schreibweise zu verstehen ist etwas Zahlentheorie
notwendig.
Wir schreiben Zahlen immer in einem Zahlensystem. Am weitesten Verbreitet ist heutzutage ein Positionssystem (auch Stellenwertsystem genannt), das im Vergleich zu Additionssystemen mit wenigen Symbolen (meist Ziffern oder Zahlzeichen genannt) große Zahlen darstellt. In diesem Zusammenhang wird auch oft von der b-adischen Darstellung von Zahlen gesprochen, wobei die Variable b für die Anzahl der Ziffern steht. Der Wert von b wird in diesem Zusammenhang auch oft als Basis oder Grundzahl bezeichnet.
Beispiele für Stellenwertsysteme sind das im Alltag gewöhnlich gebrauchte Dezimalsystem (dekadisches System mit der Grundzahl 10), das Dualsystem (oder Binärsystem, dyadisches System mit der Grundzahl 2) und das Hexadezimalsystem (hexadekadisches System mit der Grundzahl 16).
Insbesondere diese Systeme werden bei der Darstellung von IP-Adressen verwendet.
Die b-adische Darstellung einer Zahl verwendet genau b verschiedene Ziffern (wobei b hier für eine beliebige natürliche Zahl größer als 1 steht). Jeder dieser b Ziffern wird eindeutig eine der Zahlen von 0 bis b-1 zugeordnet. Dazu ein paar Beispiele:
Der Wert einer Ziffer in einer Zahl wird im Positionssystem durch seine
Position (also der Stelle innerhalb der Zahl) bestimmt. So hat die erste 2 in
282 einen anderen Wert als die zweite. Im Dezimalsystem entspricht jede
Stelle einem Produkt aus Ziffer und einer Potenz zur Basis 10. Die Zahl 282
kann man entsprechend folgendermaßen schreiben:
2·102 + 8·101 + 2·100
Allgemein kann also jede beliebige Zahl in einem beliebigen Positionssystem
als Folge geschrieben werden:
Zn · bn + ... +
Z2 · b2 +
Z1 · b1 +
Z0 · b0
Dabei ist Zn die Ziffer an der Stelle n (von rechts nach links)
und b die Basis des Positionssystem.
Die obige Zahl, 3232236074, kann also folgendermaßen dargestellt werden:
3·109 | + | 2·108 | + | 3·107 | + | 2·106 | + | 2·105 | + | 3·104 | + | 6·103 | + | 0·102 | + | 7·101 | + | 4·100 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3000000000 | + | 200000000 | + | 30000000 | + | 2000000 | + | 200000 | + | 30000 | + | 6000 | + | 000 | + | 70 | + | 4 |
=3232236074 |
Äquivalent dazu sind die anderen Zahlensysteme: Im Hexadezimalsystem schreibt sich die 3232236074 als C0A8022A:
C·167 | + | 0·166 | + | A·165 | + | 8·164 | + | 0·163 | + | 2·162 | + | 2·161 | + | A·160 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
12·268435456 | + | 0·16777216 | + | 10·1048576 | + | 8·65536 | + | 0·4096 | + | 2·256 | + | 2·16 | + | 10 |
3221225472 | + | 0 | + | 10485760 | + | 524288 | + | 0 | + | 512 | + | 32 | + | 10 |
=3232236074 |
Und der vollständigkeithalber im Dualsystem und selber rechnen: 11000000101010000000001000101010
Das Umrechnen von einem Zahlsystem ins andere spare ich hier aus. Zum einen kann man das woanders nachlesen, zum anderen sollte man dazu geschickterweise einen dazu fähigen Taschenrechner (z.B. bc) verwenden.
In der elektronischen Datenverarbeitung nennt sich die kleinstmögliche Speichereinheit Bit. Ein Bit kann zwei mögliche Zustände annehmen, die meist als „Null“ und „Eins“ bezeichnet werden. Und wie es der Zufall will, passt das prima zu dem oben beschriebenen Dualsystem.
Das Byte ist ein Mengenbegriff (Maßeinheit) der Digitaltechnik, der
für eine Folge von meist 8 Bit steht. Historisch gesehen war ein Byte
die Anzahl der Bits zur Kodierung eines einzelnen Text-Schriftzeichens im
jeweiligen Computersystem und ist daher das kleinste adressierbare Element
in vielen Rechnerarchitekturen. Um ausdrücklich auf eine Anzahl von 8
Bit hinzuweisen, wird auch die Bezeichnung Oktett verwendet.
Deshalb erfolgt die Zahlendarstellung am Computer in vielen Fällen
entweder Bit- oder Byteweise.
Eine IPv4 Adresse hat immer 32-Bit. Dadurch ergibt sich die maximale Anzahl
darstellbarer IPv4 Adressen: 232=4294967296 mögliche
Adressen.
Ebenfalls praktisch sind die 32 Bit, weil sich diese in 4 Oktets teilen
lassen und sich so IPv4 Adressen als 4er-Tupel schreiben lassen:
Im Falle der obigen IP Adresse unterteilt man die duale Darstellung in 8-Bit Teilchen, also Oktets:
11000000 | 10101000 | 00000010 | 00101010 |
---|
Schreibt man diese Oktets nun in Dezimalschreibweise kommen wir zu der (bei IPv4) üblichen Schreibweise:
192 | 168 | 4 | 42 |
---|
Da IP Adressen nicht zufällig gewählt werden sondern einem hierachischem Schema folgen kann man sich so die Adressen leichter merken.
Bei IPv6 wächst die Bitbreite auf 128. Die maximale Anzahl der
darstellbaren Adressen damit auf
2128=340282366920938463463374607431768211456.
Diese Bitbreite ist weder im Dual- noch im Dezimalsystem überschaubar.
Deshalb hat man sich hier für das Hexadezimalsystem entschieden. Dabei
werden jeweils 16 Bits, also 2 Oktets, als Block zusammengefasst und
mehrere Blöcke durch Doppelpunkte getrennt. Eine typische IPv6 Adresse sieht
also z.B. so aus:
2001:0AA0:0801:0001:0000:0000:0000:0001
Dabei ergeben immer 4 Bit (genannt nibble) eine Hexadezimalstelle:
2 | 0 | 0 | 1 | : | 0 | A | A | 0 | : | 0 | 8 | 0 | 1 | : | 0 | 0 | 0 | 1 | : | 0 | 0 | 0 | 0 | : | 0 | 0 | 0 | 0 | : | 0 | 0 | 0 | 0 | : | 0 | 0 | 0 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0010 | 0000 | 0000 | 0001 | : | 0000 | 1010 | 1010 | 0000 | : | 0000 | 1000 | 0000 | 0001 | : | 0000 | 0000 | 0000 | 0001 | : | 0000 | 0000 | 0000 | 0000 | : | 0000 | 0000 | 0000 | 0000 | : | 0000 | 0000 | 0000 | 0000 | : | 0000 | 0000 | 0000 | 0001 |
(das entspricht dezimal 42540703665054970582385730117527666689)
Da dies immer noch sehr unübersichtlich ist, gibt es zusätzlich noch folgende Möglichkeiten:
Führende Nullen in einem Feld können ausgelassen, Gruppen von hintereinanderfolgenden Nullen können durch "::" repräsentiert werden. Dazu zwei Beispiele:
Die vollständige Schreibweise: 2001:0AA0:0801:0001:0000:0000:0000:0001
oder die verkürzte Schreibweise: 2001:AA0:801:1::1
Aber: 2001:AA0:801:1::2::3 ist nicht erlaubt, da zweimal "::" in der Zeichenkette vorkommen. Ein Computer weiß nicht, wieviele Nullen jeweils einzufügen sind.
Möchte man die Kommunikation mehrerer Rechner ermöglichen, muss man diese zu einem sog. Netz zusammenschliessen. Aus Sicht der IP Adressen muss man also zusammenhängende Blöcke von IPs definieren. Diese Blöcke definiert man über die sog. Netzmaske oder Präfixlänge. Diese unterteilt eine IP in zwei Bereiche: den Netzwerkteil und einem Geräteteil. Dabei ist der Netzwerkteil bei allen Geräten eines Netzes gleich, der Geräteteil bei jedem beteiligten System verschieden.
Die Netzmaske ist genauso lang (oder breit im Sinne von Bits) wie die IP
selbst. Bei IPv4 also 32, bei IPv6 128 Bit. Alle Bits des Netzwerkteils
sind auf 1 gesetzt, alle Bits des Geräteteils auf 0. Durch diese Konvention
kann man die Netzmaske durch einen ganzzahligen Wert angeben, der die
Anzahl der gesetzten Bits angibt. Dieser Wert wird im allgemeinen direkt
an die IP durch einen / (slash) getrennt angegeben. Beispiel:
192.168.1.10/24
(Der Übersicht zuliebe hier Beispiele für IPv4 Adressen, für IPv6
gilt das aber äquivalent)
Schreiben wir dieses im Dualsystem ergebt sich:
IP-Adresse | 11000000 | 10101000 | 00000001 | 00001010 |
---|---|---|---|---|
Netzmaske | 11111111 | 11111111 | 11111111 | 00000000 |
Der Netzwerkanteil der IP ergibt sich nun aus der logischen UND-Verknüpfung mit der Netzmaske. Dabei wird im Ergebnis ein Bit gesetzt, wenn es sowohl in der Adresse als auch in der Maske gesetzt ist:
IP-Adresse | 11000000 | 10101000 | 00000001 | 00001010 |
---|---|---|---|---|
Netzmaske | 11111111 | 11111111 | 11111111 | 00000000 |
Netzwerkanteil | 11000000 | 10101000 | 00000001 | 00000000 |
Schreiben wir den Netzwerkanteil wieder dezimal:
Netzwerkanteil | 11000000 | 10101000 | 00000001 | 00000000 |
---|---|---|---|---|
Dezimal | 192 | 168 | 1 | 0 |
Der Netzwerkanteil wird auch als Netzadresse bezeichnet und Netze generell
mit der Netzadresse und zugehöriger Präfixlänge angegeben.
Der Rechner mit der IP 192.168.1.10/24 gehört demnach zum Netz
192.168.1.0/24. Diese Schreibweise wird auch als CIDR (Classless InterDomain Routing)
Notation bezeichnet.
Der Geräteanteil wird in Zusammenhang mit IPv6 als Interface
Identifier bezeichnet, da dieser Anteil das Interface innerhalb eines
Subnetzes eindeutig identifiziert.
Aus der Präfixlänge ergibt sich auch die Anzahl der Rechner, die in diesem Netz adressiert werden können. So können in einem /24 Netz 28=256 Adressen für Rechner verwendet werden. (32 Bit insgesamt und 24 Bit für die Präfixlänge, bleiben 8 Bit für die Rechner). In der IPv4 Welt müssen wir von dieser Zahl noch 2 Adressen subtrahieren, da sowohl die erste (Netzadresse) als auch die letzte (Broadcastadresse) per Definition nicht verwendet werden dürfen. Das gilt jedoch nicht bei IPv6.
Als Subnetting bezeichnet man die Zerteilung eines Netzes in kleinere Bereiche. Technisch erreicht man die Zerteilung durch Vergrößerung der Präfixlänge. Möchte man ein /24 Netz in 4 gleichegroße Netze zerteilen haben diese Netze eine /26 Netzmaske. Nehmen wir als Beispiel das Netz 192.168.20.0/24:
Dezimal: | 192 | 168 | 20 | 0 |
---|---|---|---|---|
Binär | 11000000 | 10101000 | 00010100 | 00000000 |
Netzmaske (/24) | 11111111 | 11111111 | 11111111 | 00000000 |
Durch Vergrößerung der Netzmaske erweitern wir die Bits:
Netzmaske (/26) | 11111111 | 11111111 | 11111111 | 11000000 |
---|
Diese beiden Bits definieren nun die 4 Subnetze:
192.168.20.0/26 | 11000000 | 10101000 | 00010100 | 00000000 |
---|---|---|---|---|
192.168.20.64/26 | 11000000 | 10101000 | 00010100 | 01000000 |
192.168.20.128/26 | 11000000 | 10101000 | 00010100 | 10000000 |
192.168.20.192/26 | 11000000 | 10101000 | 00010100 | 11000000 |
Daraus ergibt sich auch, das die Netzadressen nicht beliegbig wählbar sind. Ein Netz 192.168.20.32/26 ist nicht möglich, bzw. entspricht dem Netz 192.168.20.0/26.
Generell kann man ein Netz in beliebige kleinere Netze zerlegen. Bei IPv6 sollte man sich jedoch an bestimmte Konventionen halten, da sonst eventuell bestimmte Mechanismen nicht mehr greifen. Aber davon später mehr.
Will man nur ein paar Rechner miteinander verbinden ist ein Netz völlig ausreichend. In diesem Fall reicht es also, alle Rechner in das selbe Netz zu konfigurieren und über geeignete Netzelemente (z.B. Switche) miteinander zu verbinden.
Will ein Rechner in diesem Netz mit einem anderen kommunizieren, weiß er automatisch wie er das Ziel erreicht: über das lokale Netz.
In der Praxis wird man aber mehrere Netze miteinander verbinden wollen, z.B. das heimische Netz mit dem Internet. Wir brauchen also ein Netzelement welches mehrere Netze miteinander Verbindet. Dieses Element nennt man Router.
Möchte ein Rechner nun eine Verbindung zu einem nicht-lokalen Netz herstellen braucht er dazu eine Art Wegbeschreibung, gennant Route. Die Route sagt dem Rechner über welchen Router das andere Netz zu erreichen ist.
Ein Rechner kann auf verschiedene Arten eine Route lernen:
Konfiguriert man auf einem Rechner eine IP Adresse, lernt er dadurch automatisch eine Route: das lokale Netz ist direkt über die Netzwerkschnittstelle, also lokal, erreichbar.
Man legt explizit eine Route an und teilt dem Rechner mit, dass z.B. das Netz 2001:AA0:801:1::/48 über 2001:AA0:801:1230::1/64 erreichbar ist. Dabei muss die 2001:AA0:801:1230::1 lokal erreichbar sein.
Der Rechner lernt die Routen dynamisch, z.B. über dynamische Routingprotokolle (z.B. OSPF, ISIS, BGP etc). Wir werden später sehen, dass IPv6 auch hier etwas neues zu bieten hat.
Man legt eine default Route an. Diese sagt dem Rechner, dass er jedes nicht bekannt Netz über diesen Weg erreichen kann.