Wenn das Netzwerk nicht funktioniert, ist solides Grundlagenwissen gefragt. Dieser Teil der LPI-Reihe beschäftigt sich mit dem TCP/IP-Stack, den IP-Adressen und ihrer Konfiguration.
Viele Geräte im Internet müssen eindeutig erreichbar sein. Das Ansprechen erfolgt auf technischer Ebene über IP-Adressen, einer 32 Bit langen Zahl, die zur besseren Lesbarkeit aus vier dezimale Zahlen von 0 bis 255 besteht. In der Sprache des Internets ist eine solche Zahl ein Oktett. Vier Oktette, getrennt durch Punkte, ergeben die Dotted-Quad-Notation. Ein Beispiel ist die IP-Adresse 192.0.2.67 aus dem per RFC für solche Zwecke vorgesehenen TEST-NET.
Die Angabe einer IP-Adresse reicht einem Computer bereits aus, um einen Kommunikationspartner ausfindig zu machen. Mit den IP-Namen des Domain Name System (DNS) wie zum Beispiel »www.linux-magazin.de« hat das übrigens nur wenig zu tun.
Die zentrale Registratur ICANN [1] hat ursprünglich monopolartig alle IP-Adressen vergeben, damit waren sie eindeutig und einmalig. Aus praktischen Gründen gibt es heute für fast jeden Kontinent eine eigne Regional Internet Registry (RIR). So vergibt das Réseaux IP Européens Network Coordination Centre (RIPE NCC) die Adressen für Europa und den Mittleren Osten, in Nordamerika ist die American Registry for Internet Numbers (ARIN) zuständig, weitere RIRs kümmern sich um den Rest der Welt [2]. In der Praxis verteilen sie Kontingente von Adressen an Internet Service Provider, die wiederum einzelnen Kunden ein Stück vom Kuchen abgeben.
Adressen und Netze
Um die Vielzahl der Adressen zu ordnen, sind die IP-Adressen hierarchisch in Netze und Unternetze angeordnet. Können zwei Geräte unmittelbar durch ein direktes Kabel, mit Hilfe eines Switch oder eines Hub, aber ohne zwischengeschalteten Router miteinander kommunizieren, so liegen sie in einem Segment. Damit nun ein sendendes Gerät herausfindet, ob der Kommunikationspartner im selben oder einem anderen Subnetz liegt, sind die 32 Bits jeder IP-Adresse in zwei Teile aufgeteilt: Der vordere Teil gibt das Segment an, der hintere Teil nummeriert die Geräte in diesem Subnetz durch.
Subnetze können unterschiedlich viele Geräte umfassen, daher muss zu jeder IP-Adresse vermerkt sein, wie groß ihr zugehöriges Segment ist. Praktisch legt dies die Netzmaske fest, die jenen Teil der IP-Adresse maskiert, der zum Subnetz gehört. Weil die Subnetzangaben immer im vorderen Teil der Adresse liegen, reicht es, die Anzahl der Bits zu notieren, die die Maske ausmachen.
Ein Beispiel verdeutlicht dies: Die IP-Adresse 192.0.2.67 sei Teil eines Segments, das aus 256 Adressen besteht (192.0.2.0 bis 192.0.2.255). 256 Adressen darzustellen, benötigt 8 Bits. Damit bleiben bei 32 Bits insgesamt noch 24 Bits für die Netzadresse übrig. Aus diesem Grunde würde die Adresse auch als 192.0.2.67/24 bezeichnet. Dies ist die heute übliche CIDR-Schreibweise (Classless Interdomain Routing). Zur Zeit der Altvorderen war die Größe der Netzmaske auf wenige Werte beschränkt, siehe Kasten “Die Legende von den Netzwerk-Klassen”.
|
Die Legende von den |
|---|
|
In der Kreidezeit des Internets gab es auch schon IP-Adressen und IP-Netze, allerdings waren die ersten 8 Bits für die Netze fest vergeben. Gegen 1981 kamen erste Zweifel auf, ob ein Internet mit maximal 256 Netzen eine Zukunft habe, und RFC 791 [6] wurde veröffentlicht. Das Dokument schlug die Aufteilung in A-, B- und C-Class-Netze mit Netzmasken von jeweils 8, 16 und 24 Bits vor. Damit gab es zwar gut 2 Millionen C-Class-Netze, aber weltweit nur gut 16 000 B-Class- und nur 128 A-Class-Netze. Besonders die B-Classes gingen Ende der 1980er Jahre gefährlich zur Neige, sodass nach Auswegen gesucht wurde. Die Internet-Gemeinde hat 1992 RFC 1338 und ein Jahr später RFC 1519 auf den Weg gebracht, um das Classless Inter-Domain Routing (CIDR) einzuführen. Heute ist RFC 4632 [8] der dafür gültige Standard im Range einer Best Current Practice. Auch wenn RFC 791 formal nie abgeschafft (superseded) wurde, spielt die Drei-Klassen-Gesellschaft in der Internet-Realität kaum noch eine Rolle. Umso hartnäckiger hält sich die Legende, dass beispielsweise ein 24-Bit-Subnetz ein Class-C-Netz sei, was aber faktisch überholt ist. Heute braucht der Netzwerk-Bereich einer IP-Adresse in keine Klasse zu passen. |
Die Entscheidung, wie groß die Netzmaske innerhalb eines zugewiesenen Adressenblocks ist, liegt ganz im Ermessen des zuständigen Netzverantwortlichen. Weist er der Adresse 192.0.2.67 eine Netzmaske aus 28 Bits zu, gehören zum gleichen Segment nur noch die 24 = 16 Adressen von 192.0.2.64 bis 192.0.2.79. Die Netzmaske lässt sich wie eine IP-Adresse als 32-Bit-Zahl darstellen: Bits des Netzanteils sind alle auf 1 gesetzt, jene des Hostanteils auf 0. Dabei ergibt sich für ein /24-Netz die häufige Maske 255.255.255.0, bei einem /28-Netz hingegen 255.255.255.240. Diese Schreibweise für Masken ist notwendig, wenn der Admin das klassische Kommando »ifconfig« zur Konfiguration einer IP-Adresse verwendet.
|
LPI-Aufgabengruppen |
|---|
|
Das Linux Professional Institute gliedert die Prüfungsfragen in Aufgabengruppen. Dieser Artikel erklärt Themen aus den Abschnitten:
(Ein Objective 1.112.2 existiert nicht.) |
Alle herhören: Broadcasts
Die Netzmaske legt also die Anzahl der adressierbaren IP-Adressen eines Netzwerks fest. Im obigen Beispiel stehen 8 Bits für die Hostadressen zu Verfügung, womit 256 Adressen möglich sind. Eine besondere Bedeutung kommt den Adressen zu, bei denen alle Host-Bits auf 0 gesetzt sind: Sie kennzeichnen Segmente in ihrer Gesamtheit und werden beim Routing zwischen einzelnen Subnetzen verwendet. Stehen alle Host-Bits auf 1, handelt es sich um die Rundruf-Adresse (Broadcast): So erreichen Pakete alle aktiven Geräte im Segment zugleich. Allerdings antworten heute aus Sicherheitsgründen nur wenige Systeme auf diese Anfragen. Kein Host darf die Netz- oder Broadcast-Adresse eines Subnetzes für sein eigenes Interface verwenden.
Ein verbreiteter Irrtum ist, dass Netzadressen stets durch eine Null im letzten Oktett oder Broadcast-Adressen durch eine 255 repräsentiert seien. Dies gilt nämlich nur bei den durch 8 teilbaren Subnetzen /8, /16 und /24, die allerdings häufig anzutreffen sind. Beispiele zur Berechnung von Adressen stehen im Kasten “Adressenarithmetik”.
|
Adressenarithmetik |
|---|
|
Auf den ersten Blick erscheint das Rechnen mit IP-Adressen und Netzmasken verwirrend. Darum ist es hilfreich, sich die Oktette als Binärzahlen vorzustellen. Die einzelnen Berechnungsschritte sind dann einfache, bitweise Logikoperationen. Die Berechnung der wichtigsten Angaben benötigt nur die IP-Adresse und die Länge der Netzmaske. Netzmaske und Netzadresse berechnenWer die Länge der Netzmaske durch 8 teilt (mit Rest), erhält die Anzahl der führenden 255er-Blöcke, die jeweils acht gesetzte Bits darstellen. Für den Rest muss er nun die Maske konstruieren: Ein Rest von 1 entspricht 128, der Rest von 2 entspricht 128 + 64 und so weiter. Sind durch dieses Verfahren noch Oktette frei, werden sie nach rechts durch 0 aufgefüllt. Beispiel: Eine Netzmaske hat 19 Bits: 19 geteilt durch 8 ergibt 2 mit Rest 3. Die Netzmaske beginnt also mit 255.255. Die Summe der ersten höchsten drei Zweierpotenzen in einem Oktett ist 128 + 64 + 32 = 224, die Netzmaske lautet also 255.255.224 und wird noch mit einer Null aufgefüllt, weil keine weiteren Bits zu verteilen sind: 255.255.224.0. Eine IP-Adresse mit der Netzmaske logisch UND-verknüpft ergibt die Netzadresse. Sie ist immer die erste Adresse in ihrem Adressblock. Beispiel: Zu berechnen sei die Netzadresse der IP-Adresse 10.123.45.67/19. Jedes Oktett lässt sich einzeln miteinander UND-verknüpfen: 10 UND 255 = 10 123 UND 255 = 123 45 UND 224 = 32 67 UND 0 = 0 Die vier Teilergebnisse zusammengeführt ergeben die gewünschte Netzadresse 10.123.32.0/19 in CIDR-Schreibweise. Broadcast-Adresse berechnenDas Bestimmen der Broadcast-Adresse erfordert es, zusätzlich zu den Bits der IP-Adresse alle Bits des Hostanteils der Netzmaske zu setzen. Die folgende Rechnung negiert erst die Netzmaske (dreht jedes Bit um) und ODER-verknüpft sie dann mit der IP-Adresse: NEG 255 ODER 10 = 0 ODER 10 = 10 NEG 255 ODER 123 = 0 ODER 123 = 123 NEG 224 ODER 45 = 31 ODER 45 = 63 NEG 0 ODER 67 = 255 ODER 67 = 255 Damit ergibt sich 10.123.63.255/19 für die Broadcast-Adresse, die alle Geräte erreicht. |
Das kleinste mögliche Segment hat eine Netzmaske, die aus 30 Bits besteht: Die restlichen zwei Host-Bits können genau vier Adressen bilden. Davon ist eine die Netzadresse und eine die Rundruf-Adresse. So bleibt im Mini-Netz noch Platz für genau zwei Partner. Häufig benutzen Admins solche Segmente, um zwei größere Netze zu verbinden, und nennen sie daher Koppelnetze.
Das größte theoretisch vorkommende Netz besitzt nur eine 8-Bit-Subnetzmaske und kann damit gigantische 224-2 = 16 777 214 Geräte verwalten. Schade, dass es kaum einen Switch gibt, der in der Lage wäre, solche Mengen an Geräten auf einmal zu verwalten.
IP-Konfiguration
Soll ein Gerät mit dem Internet verbunden sein, bedarf es eines Anschlusses (Interface). In den meisten Fällen ist er durch eine Netzwerk- oder eine WLAN-Karte realisiert. Denkbar wären aber auch Interfaces, die mit seriellen Leitungen verbunden sind, zum Beispiel über Telefon und PPP, siehe Kasten “Ein ungewöhnliches Interface”.
|
Ein ungewöhnliches |
|---|
|
Ein schönes Beispiel für exotische Anschlüsse ist das Netzwerkinterface eines Mobiltelefons. Wenn ein Benutzer beispielsweise ein Sony Ericsson K800i mit einem USB-Kabel anschießt, stellen Kernel und Hotplug-Mechanismus ein Interface »usb0« bereit (am Mobilgerät »Telefonmodus« auswählen). Als Zugabe besitzt das Telefon einen DHCP-Server, der auf Anfrage eine IP-Adresse zuweist und automatisch die Verbindung zum Internet via UMTS herstellt. Das Telefon verhält sich damit ähnlich wie eine Netzwerkkarte. Schade, dass nur wenige Hersteller und Provider diese nützliche Funktion bewerben, die sich unter Linux sehr einfach einrichten lässt. |
Unter Linux gibt es eine ganze Reihe weiterer, teilweise virtueller Anschlüsse. Wie diese technisch realisiert sind, ist für die TCP/IP-Konfiguration unerheblich. Alle verfügbaren Interfaces zeigt
ifconfig -a
an. Soll ein Interface eine Adresse erhalten, muss der Admin die Adresse selbst, die Netzmaske sowie das gewünschte Interface zuweisen. Dies kann manuell oder automatisiert geschehen. Ein DHCP-Server im gleichen Segment ist eine Voraussetzung für die automatisierte Variante. Der Aufruf
ifconfig eth0 192.0.2.67 netmask 255.255.255.240 up
konfiguriert das Interface manuell. Die Angabe der Broadcast-Adresse darf entfallen, da sie sich durch IP-Adresse und Netzmaske berechnen lässt. Wenn die Netzmaske fehlt, vergibt »ifconfig« selbstständig einen passenden Wert entsprechend den veralteten Netzklassen (siehe Kasten “Die Legende von den Netzwerk-Klassen”). Ein Interface kann aktiviert oder deaktiviert sein: Mit dem Schlüsselwort »up« wird es aktiv; dies ist der Default bei der Angabe einer Adresse.
Interfaces dürfen theoretisch mehr als eine einzelne Adresse besitzen. Der Konfigurationsbefehl »ip«, Teil der Pakete »iproute« oder »iproute2« in fast allen modernen Distributionen, eignet sich für deren Zuteilung und für eine Reihe weitergehender Konfigurationen. Das mächtigere »ip« ist seit Längerem als Ersatz für »ifconfig« vorgesehen, aber Administratoren als notorische Traditionalisten wollen sich offenbar von dem Klassiker nicht so recht trennen.
Besondere Netze
Einige Netzadressen sieht RFC 3330 [7] für besondere Zwecke vor. So erreicht die einsame Adresse 127.0.0.1 in dem ungewöhnlich großen Netz 127.0.0.0/8 immer das eigene System über das Loopback-Interface »lo«, das häufig auf den Namen »localhost« hört.
Für den internen Gebrauch oder für Testzwecke stellt RFC 1918 die Bereiche 10.0.0.0/8, 172.16.0.0/12 und 192.168.0.0/16 bereit, die sich natürlich auch in kleinere Subnetze aufteilen lassen. Pakete, die an diese Adressen gerichtet sind, werden im Internet nicht weitergeleitet. Um dennoch private Adressen mit dem Internet zu verbinden, können NAT (Network Address Translation) oder die Spezialform Masquerading sie übersetzen [5].
Eine ähnliche Funktion hat das Link-Local-Netz 169.254.0.0/16 aus RFC 3330: Wenn ein Gerät nach dem Systemstart seine eigene IP-Adresse nicht herausfinden kann, etwa weil es keine feste IP-Adresse besitzt und der DHCP-Dienst nicht antwortet, darf das System eine beliebige Adresse aus diesem Bereich temporär wählen.
Der Netzblock 224.0.0.0/4 ist für Multicast-Anwendungen vorgesehen. Vereinzelt verwendet Netzwerkmanagement-Software diesen Bereich, aber ebenso wie einige exotische Web-TV-Protokolle haben diese Adressen kaum Bedeutung. Den Bereich 240.0.0.0/4 reserviert der RFC schließlich “for Future Use”.
Routing
Router verbinden Subnetze miteinander. Solche Geräte besitzen mindestens zwei Netzwerkadressen und kennen Regeln, wie Pakete von einem Segment in das nächste zu leiten sind, damit sie ihre Ziele im weitverzweigten Internet finden. Große Router verfügen daher über Interfaces in Dutzende von Netzen. Technisch bringt jedes Linux-System die Voraussetzungen mit, um selbst als Router zu arbeiten, aber das ist Inhalt eines anderen LPI-Artikels.
Ob ein Computer seine Kommunikationspartner im selben Segment erreicht oder nicht, findet er aus der eigenen und fremden IP-Adresse mit Hilfe der Netzmaske heraus. Liegt das Ziel nicht im lokalen Netz, ist ein Vermittler einzuschalten. Ein Router kann sich für jedes Netz im Internet um die weitere Zustellung kümmern. Bei der Unzahl von Netzen wäre eine solche Tabelle jedoch nur schwer handhabbar. Daher ist ein Router erforderlich, der sich um alle Netze kümmert, die nicht explizit bekannt sind. Die Konfiguration eines solchen Default Gateway geschieht mit dem Kommando »route«:
route add default gw 192.0.2.254 eth0
Ein Gateway hat ebenfalls eine IP-Adresse im lokalen Netzsegment, traditionell entweder die letzte oder die erste frei vergebbare Adresse.
Das folgende Beispiel sendet alle Pakete, die nicht lokal sind, an den Router 192.0.2.254 über das Interface »eth0«. Die Angabe des Interface darf entfallen, wenn dies anhand der IP-Konfiguration der eigenen Interfaces eindeutig ist. Das Kommando »route -n« gibt die Routingtabelle aus:
Kernel IP Routentabelle Ziel Router Genmask Iface 192.0.2.0 0.0.0.0 255.255.255.0 eth0 0.0.0.0 192.0.2.254 0.0.0.0 eth0
Die erste Zeile mit Einträgen beschreibt das lokale Netz 192.0.2.0/24. Es benötigt keinen Router (»0.0.0.0«) und ist somit über das Interface »eth0« direkt angeschlossen. Die zweite Zeile legt einen Router mit der IP-Adresse 192.0.2.254 fest und sendet dort alle Pakete hin, die nicht durch eine vorherige Regel bearbeitet wurden. Die Zielangabe 0.0.0.0 ist ein Synonym für die Default-Route.
Protokolle
Ein Client-Programm tauscht sich mit dem Server-Programm über eine festgelegte Sprache aus. Dieses Protokoll definiert alle möglichen Anweisungen, Fragen und Antworten darauf. Es erfüllt dabei höchst unterschiedliche Zwecke, die beispielsweise von der Übertragung eines einzelnen Datenpakets an eine IP-Adresse (IP) bis zur Übertragung einer Nachricht per E-Mail (SMTP) reichen. Häufig greifen komplexe Protokolle auf einfachere zurück. Referenzmodelle machen die so entstehende Hierarchie besser verständlich.
International hat sich dazu das Open Systems Interconnection Reference Model, kurz OSI-Modell, mit sieben Schichten durchgesetzt, obgleich es ein viel generischerer Ansatz ist als der heute weithin verbreitete TCP/IP-Stack mit seinen vier Schichten. Der Begriff TCP/IP-Stack fasst umgangssprachlich eine Vielzahl von Protokollen zusammen. Sie stammen aus der Anfangszeit des Internets und sind in Standard-ähnlichen RFC-Dokumenten (Request for Comments) beschrieben. Abbildung 1 illustriert die Zusammenhänge einiger Protokolle in beiden Modellen.
Für Netzwerk-Verantwortliche sind zunächst die Netzwerk- und die Transport-Schicht von Bedeutung. Die Netzwerkschicht kümmert sich um den Versand einzelner Pakete an entfernte Ziele. Die Transportschicht sorgt dafür, dass auch komplexere Daten dort ankommen.

Abbildung 1: Netzwerkprotokolle bauen aufeinander auf. Obgleich der TCP/IP-Stack die dominierende Architektur im Netzwerkbereich ist, wird das OSI-Schichtenmodell oft als Referenz herangezogen.
Schicht Nummer drei
Die Basis von TCP/IP ist das Internet-Protokoll (IP) auf OSI-Ebene 3. Die Behandlung von IP-Adressen und das Routing dorthin gehört zu seinen Aufgaben. IP transportiert einzelne Datenpakete unterschiedlicher Größe und garantiert nicht, dass alle Pakete auch ankommen oder in jener Reihenfolge beim Empfänger eingehen, in der sie der Absender verschickt hat.
Ein Partner bei dieser Arbeit auf gleicher Ebene ist das Internet Control Message Protocol (ICMP), das IP bei Fehlern oder zu Diagnosezwecken heranzieht. Es ist Bestandteil jeder TCP/IP-Implementierung. ICMP-Meldungen werden entweder durch andere Protokolle ausgelöst oder von Programmen wie »ping« oder »traceroute« benutzt, um eine Verbindung zu testen. Sonst sorgen nur Fehlerzustände in anderen Protokollen für das Versenden von ICMP-Meldungen, beispielsweise wenn ein Zielsystem nicht erreichbar oder ein angeforderter Dienst nicht verfügbar ist.
Netzwerk testen
Das Kommando »ping« sendet an das ihm übergebene Gerät eine Aufforderung, sich zu melden (ICMP-Echo-Request). Eine Antwort (Echo-Reply) erhält es nur dann, wenn die Pakete am Ziel ankommen und auch ihren Weg zurück finden. Damit lässt sich die Erreichbarkeit von Rechnern oder Geräten (wie Routern) testen.
Ohne Optionen aufgerufen läuft »ping« so lange, bis ein [Strg]+[C] es abbricht. Die Option »-c« legt die Anzahl der zu verschickenden Pakete fest. Mit Option »-i« wartet »ping« die angegebene Zeit in Sekunden zwischen den Paketen. Das Versenden festgelegter Paketgrößen statt der Voreinstellung von 56 Oktetten macht »-s« möglich.
Damit Pakete nicht unendlich lange durch das Netz geistern, besitzt jedes Paket mit dem TTL-Wert (Time to Live) ein Verfallsdatum, das vermeidet Endlosschleifen. Die Option »-t« testet dieses Verhalten:
ping -c 4 -i 2 -t 20 192.0.2.99
Der TTL-Wert darf zwischen 1 und 255 liegen, bei den meisten Linux-Distributionen ist initial »64« in »/proc/sys/net/ipv4/ip_default_ttl« eingestellt. Jeder am Transport beteiligte Router vermindert diesen Wert um 1, bis er 0 erreicht. Dann ist das Paket ungültig, der Router verwirft es und sendet eine Benachrichtigung per ICMP an den Absender (ICMP Time Exceeded).
Das mit »ping« verwandte Programm »traceroute« ermittelt den Weg der Pakete über die dazwischen liegenden Router per ICMP. Hierzu verschickt es Pakete, mit begrenzter Lebensdauer. Ist der TTL-Wert auf 1 gesetzt, kommt das Paket lediglich bis zum nächsten Router. Mit einem TTL-Wert von 2 erreicht es den übernächsten Router und so fort. Eine Alternative zu »traceroute« stellt »mtr« bereit, das die Ausgabe regelmäßig aktualisiert.
Wichtige Lernziele
Die IP-Konfiguration ist eine zentrale Aufgabe für Admins: Netzmasken etablieren Subnetze; Routing verbindet sie untereinander. Das OSI-Schichtenmodell liefert die Grundlage, um sich in Netzwerkfragen präzise mit Berufskollegen auszutauschen. Diagnosewerkzeuge zeigen, ob die Einstellungen auch wirksam waren. Jetzt fehlen nur noch Daten, die zu übermitteln sind.
|
Infos |
|---|
|
[1] Internet Corporation for Assigned Names and Numbers: [http://de.wikipedia.org/wiki/Internet_Corporation_for_Assigned_Names_and_Numbers] [2] Regional Internet Registrys: [http://de.wikipedia.org/wiki/Regional_Internet_Registry] [3] IPv4: [http://de.wikipedia.org/wiki/IPv4/] [4] LPI-Seite mit den Prüfungsinhalten: [http://www1.lpi.org/de/obj_102.html] [5] Prof. Jürgen Plate, “Grundlagen Computernetze”: [http://netzmafia.de/skripten/netze/netz8.html] [6] RFC 791, Internet Protocol: [http://www.faqs.org/rfcs/rfc791.html] [7] RFC 3330, Special-Use IPv4 Addresses: [http://www.faqs.org/rfcs/rfc3330.html] [8] RFC 4632/BCP 122, Classless Inter-domain Routing (CIDR): [http://www.faqs.org/rfcs/rfc4632.html] |
|
Der Autor |
|---|
|
Klaus Schmidt beschäftigt sich mit Netzwerk-Installationen und gibt seit sieben Jahren Linux-Kurse, vorwiegend für die LPI-Vorbereitung. |





