TCP/IP

Das Protokollpaar TCP/IP hat sich in den vergangenen Jahren, auch unterstützt durch das schnelle Wachstum das Internets, durchgesetzt. Physikalisch besteht das Internet aus allen möglichen Verbindungen, sei es eine Modemstrecke oder ein Ethernet, bis hin zu schnellen ATM-basierten Strecken. Gemeinsam ist allen, daß dort TCP/IP zur Kommunikation eingesetzt wird. Auf allen diesen Verbindungen lassen sich Dienste wie WWW, Mail, News oder IRC benutzen.

Im folgenden werden die Grundlagen beschrieben, Sie benötigen diese nicht unbedingt für die in diesem Buch vorgestellten, einfachen Beispiele. Wenn Sie aber Ihr Netz erweitern wollen oder tiefer in die Materie einsteigen möchten, sollten Sie jetzt weiterlesen.

IP-Adressen

Jeder an das Internet (oder jedes andere IP-basierte Netzwerk) angeschlossene Computer wird über eine einmalige IP-Adresse identifiziert. IP-Adressen haben eine Länge von vier Byte, die normalerweise als vier dezimale Zahlen, getrennt durch Punkte, dargestellt werden. Im folgenden einige gültige Beispiele:

127.0.0.1

192.168.0.5

240.250.240.250
Anhand einer IP-Adresse lassen sich zwei Dinge feststellen. Erstens das Netzwerk, in dem sich ein bestimmter Rechner befindet, und zweitens der Rechner selber - dies entspricht dem sogenannten Netzwerk- und dem Host-Teil der Adresse.

Für den Host-Teil der Adresse gibt es zwei besondere Werte: Wenn alle Bits auf 0 gesetzt sind, nennt man dies die Netzwerkadresse (network address, 0), wenn alle auf 1 gesetzt sind, beschreibt dies alle Rechner in diesem Netz - die sogenannte Broadcast-Adresse (255).

IP-Interface-Konfiguration

... oder „wie kommt die Netzwerkkarte zu Ihrer Adresse“. In den meisten Fällen werden Sie die Konfiguration Ihrer Netzwerkkarte bereits bei der Installation von Debian GNU/Linux vorgenommen haben. Wenn Sie eine solche Karte später einbauen oder das System mit einer zweiten Karte erweitern, müssen Sie diese von Hand einbinden.

Das Kommando ifconfig wird benutzt, um einem Netzwerkinterface (dies kann eine Netzwerkkarte, ein Modem, ISDN Verbindung oder ähnliches sein...) die benötigten Einstellungen zuzuweisen.

Es gibt noch einige weitere Beispiele, wir werden uns hier mit dem am meisten verbreiteten, dem Ethernet, beschäftigen.

Wenn Ihr Kernel die installierte Netzwerkkarte nicht erkennt, müssen Sie das passende Modul laden. Sie können dies temporär mit dem Kommando insmod oder modprobe durchführen. Wenn Sie das richtige Modul gefunden haben, tragen Sie die nötigen Werte in die Datei /etc/modules oder /etc/conf.modules ein. Für eine NE2000-kompatible Karte wäre dies beispielsweise die Zeile alias eth0 ne (in der Datei /etc/conf.modules).

Um nun der Karte eine IP-Adresse zuzuweisen, dient das Kommando ifconfig. Im einfachsten Fall, also ohne weitere Optionen, gibt ifconfig die bisher konfigurierten Interfaces aus:

# /sbin/ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:18584 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18584 errors:0 dropped:0 overruns:0 carrier:0
          Collisions:0
Bisher sollte auf Ihrem Rechner lediglich das Loopback Interface konfiguriert sein.

Rufen Sie nun ifconfig mit dem Namen des Interfaces (eth0 für die erste, eth1 für die zweite Karte usw.) sowie der gewünschten IP-Nummer auf, und sehen Sie sich die Veränderung an:

# /sbin/ifconfig eth0 192.109.42.23
# /sbin/ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:18584 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18584 errors:0 dropped:0 overruns:0 carrier:0
          Collisions:0

eth0      Link encap:Ethernet  HWaddr 00:00:F7:C3:45:1B
          inet addr:192.109.42.23   Bcast:192.109.42.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:55 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          Collisions:7
          Interrupt:10 Base address:0x300
ifconfig gibt Ihnen nun auch die Informationen zur Ethernetkarte aus. Die Werte für die Netzmaske, Broadcast Adresse usw. wurden automatisch gesetzt. Wenn Sie bei diesen Werten andere Einstellungen benötigen, so müssen Sie diese ebenfalls mit ifconfig setzen:

# /sbin/ifconfig eth0 192.109.42.23 netmask 255.255.255.240
Die verändert die zuvor angegebenen Werte. Wenn Sie ein Interface komplett deaktivieren wollen, benutzen Sie die Option down:

# /sbin/ifconfig eth0 down
Wenn Sie Ihre Netzwerkkarte bereits bei der Installation von Debian GNU/Linux eingerichtet haben, so werden Sie feststellen, daß einfach schon alles funktioniert... hierzu wurden die notwendigen Werte in die Datei /etc/network/interfaces geschrieben.

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
iface eth0 inet static
	address 192.109.42.18
	netmask 255.255.255.240
	network 192.109.42.16
	broadcast 192.109.42.16
	gateway 192.109.42.17
In dieser Datei sind einige Variablen definiert, die beim Aufruf des Programms ifup ausgelesen werden.

Wenn Sie Ihre Netzwerkkarte erst später eingerichtet haben, erstellen Sie diese Datei und passen sie Ihren Bedürfnissen an.

IP Routing

Wenn Sie der Netzwerkkarte die eigenen Einstellungen mitgeteilt haben, müssen Sie dem Linux-Kernel noch beibringen, die IP-Pakete auch an die richtige Stelle zu schicken. Dies kann bei mehreren Netzwerkkarten durchaus richtige Arbeit werden...

Der Kernel hält diese Informationen, welcher Rechner oder welches Netzwerk über welchen Weg zu erreichen ist, in der sogenannten „routing table“. Das Kommando, um sich diese Tabelle anzusehen, lautet: route. Wenn Sie bisher nur das Loopback Device konfiguriert haben, wird das Ergebnis folgendes sein:

# /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
127.0.0.0       *               255.0.0.0       U     0      0        2 lo
Dies bedeutet, daß alle IP-Pakete (auch „traffic“ genannt) für das Netzwerk 127 über das Loopback Device (lo) geschickt werden sollen.

Wenn Sie nun eine Netzwerkkarte konfiguriert haben, müssen Sie diese auch in die Routing-Tabelle des Kernels eintragen:

# /sbin/route add -net 192.109.42.0
# /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
127.0.0.0       *               255.0.0.0       U     0      0        2 lo
192.109.42.0    *               255.255.255.0   U     0      0      137 eth0
Dies führt dazu, daß alle IP-Pakete für das Class-C Netz 192.109.42.xxx über das Interface eth0 zu erreichen sind. Wenn Sie nur einen kleinen Teil eines Netzes zur Verfügung haben, müssen Sie dies über die Netzmaske (netmask) steuern:

# /sbin/route add -net 192.109.42.16 netmask 255.255.255.240
In diesem Beispiel stehen 16 IP-Nummern zur Verfügung (.16 bis .31).

Dies reicht schon aus, um ein kleines, internes Netzwerk zu betreiben. Wenn Sie jedoch zwei Netzwerke miteinander verbinden wollen, müssen Sie dies über ein sogenanntes „gateway“ (oder auch „router“ genannt) tun.

Wenn über das neue Interface nur ein bestimmtes Netzwerk zu erreichen ist, und Sie die Adresse des Gateways (Routers) für dieses Netz kennen, müssen Sie die Routing-Tabelle um genau diesen Eintrag ergänzen. Sie erreichen dies mit der Option -net:

# route add -net 193.174.1.0 gw 192.109.42.17
Dies bedeutet, daß das Netz 193.174.1.0 (Class C) über das Gateway 192.109.42.17 zu erreichen ist, setzt aber auch voraus, daß schon bekannt ist, wie das Netz 192.109.42.x zu ereichen ist.

Eine andere häufig anzutreffende Möglichkeit ist es, alle IP-Pakete, für die es keinen passenden Eintrag in der Routing-Tabelle gibt, an ein Gateway zu schicken, die sogenannte „default route“.

# route add default gw 192.109.42.17
Dies würde zu folgender Routing-Tabelle führen.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
127.0.0.0       *               255.0.0.0       U     0      0        2 lo
192.109.42.16   0.0.0.0         255.255.255.240 U     0      0        0 eth0
0.0.0.0         192.109.42.17   0.0.0.0         UG    1      0        0 eth0
Sehen wir uns die Einträge im einzelnen einmal an: die erste Zeile bezieht sich auf das Loopback Device (127.0.0.0). Wenn Sie einen neueren Kernel verwenden, wird dies unter Umständen nicht angezeigt.

Werfen wir jedoch zunächst nochmal einen genaueren Blick auf die Datei /etc/network/interfaces:

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
iface eth0 inet static
	address 192.109.42.18
	netmask 255.255.255.240
	network 192.109.42.16
	broadcast 192.109.42.16
	gateway 192.109.42.17

Diese Datei definiert einige Variablen, wenn Sie eine Änderung an dieser Datei vornehmen, können Sie diese einfach mit dem Kommando ifup eth0 aktivieren. In den ersten Zeilen wird das sogenannte Loopback Device konfiguriert.

Die folgenden Zeilen beinhalten die benötigten Variablen für Ihr Netz.

In dieser Datei werden IP-Nummern verwendet. Wenn Sie das Kommando route aufrufen um sich die Routing Tabelle anzeigen zu lassen, werden Sie bemerken, daß dort die Namen der Rechner und Netze verwendet werden. Sie können die Ausgabe der IP-Nummern mit der Option -n hinter dem Kommando route erzwingen.

In der Datei /etc/hosts finden Sie den Namen des lokalen Rechners, in der Datei /etc/networks den Namen des Netzes. Systeme, deren Name nicht in der Datei /etc/hosts beschrieben sind, werden im allgemeinen über den Nameserver aufgelöst.

Domain Name Server - DNS

Jeder mit dem Internet verbundene Rechner oder jedes Netzwerk, welches IP als Netzwerk-Protokoll benutzt, hat eine (oder mehrere) IP-Adressen, mit der das Routing von und zu diesem System sichergestellt wird. Da die Benutzer sich diese Zahlenkolonnen nur schwer merken können, kann jedem Rechner (eigentlich jeder IP-Nummer) ein Name zugewiesen werden. Sicher haben Sie dies schon bei der Installation von Debian GNU/Linux bemerkt, Sie werden nach einem Rechnernamen (Hostname) gefragt.

Dieser Name wird an verschiedenen Stellen gespeichert. Sie können mit dem Kommando hostname den Namen des Rechners herausfinden, es wird der Wert aus der Datei /etc/hostname ausgegeben. Wenn Sie dies an einem (dauerhaft) ans Internet angeschlossenen Rechner probieren, besteht dieser Name aus verschiedenen Teilen, die durch Punkte getrennt sind, zum Beispiel linux.openoffice.de.

Nur der erste Teil ist der Name des Rechners (hostname), der Rest wird als „Domain Name“ bezeichnet (hier: openoffice.de). Da es natürlich viele Menschen gibt, die möchten, daß Ihr Rechner den Namen linux bekommt, wurde jeder dieser Namen dadurch einmalig gemacht, daß man ihn einer bestimmten Domain zuordnet.

Innerhalb einer Domain (eine Gruppe von Computern, ein Netzwerk) ist meist eine Person für die Vergabe von Computernamen zuständig und pflegt die Daten(-bank) mit den notwendigen Informationen. Dieses System ist als DNS (Domain Name Service) bekannt und mit einem Telefonverzeichnis vergleichbar. Sie können nach einem Computernamen suchen und erhalten dessen IP-Adresse.

Vor der Einführung von DNS mußte man sich die IP-Adressen der Rechner merken, um sich im Internet bewegen zu können. Namen wurden nur innerhalb kleinerer Netzwerke benutzt und konnten in verschiedenen Netzen doppelt vergeben werden. Diese (lokalen) Namen wurden in der Datei /etc/hosts gespeichert. Natürlich können Sie auch heute noch diese Datei benutzen, sie wird auch bei der Installation von Debian GNU/Linux angelegt. Die Datei enthält den Namen des eigenen Rechners und die dazugehörige IP-Adresse.

DNS ist ein sehr umfangreiches Thema, wir werden uns an dieser Stelle nur aus der Sicht des Nutzers (Client) damit befassen.

Wenn ein Debian GNU/Linux-System die IP-Adresse eines anderen Rechners benötigt (zum Verschicken von Mail oder um eine Webseite aufzurufen), wird ein Teil der C Library benutzt, um die Informationen zu bekommen - der „resolver“. Zuerst wird ein Blick in die Datei /etc/nsswitch.conf geworfen (können Sie an dieser Stelle auch tun...). In dieser ist aufgeführt, an welchen Stellen versucht werden soll, die IP-Nummer zu finden. Hier sind drei verschiedene Einträge möglich, wenn mehrere vorhanden sind, werden diese der Reihenfolge nach durchsucht.

Ein üblicher Eintrag in der Datei /etc/nsswitch wäre:

hosts:         files dns
Dieser Eintrag bringt den Resolver dazu, zuerst die Datei /etc/hosts und dann den (in /etc/resolv.conf definierten) Nameserver (DNS) nach dem Rechnernamen zu durchsuchen.

Die Datei /etc/resolv.conf enthält, neben dem Eintrag für einen oder mehrere Nameserver, zunächst den Namen der lokalen Domain.

domain openoffice.de
nameserver 194.25.2.129
nameserver 192.168.22.33
Die erste Zeile bewirkt, daß wenn nur ein Rechnername ohne Angabe der Domain angegeben wird, die lokale Domain an den Rechnernamen (Hostname) angehängt wird. Die folgenden Zeilen beschreiben die (IP-technisch gesehen möglichst gut erreichbaren) Nameserver. Sie sollten hier in jedem Fall IP-Nummer und nicht die Namen der Rechner verwenden.

Alle Programme, die Sie benutzen (zum Beispiel Webbrowser), erfragen automatisch die IP-Nummer, wenn Sie einen Rechnernamen eingeben. Natürlich können Sie aber auch selber solche Abfragen starten. Das zu Debian GNU/Linux gehörende Paket dnsutils enthält das Programm nslookup. Sie können nslookup interaktiv benutzen, um mehrere Abfragen nacheinander zu starten. Die häufigste Anwendung ist aber, nslookup für eine einzelne Abfrage zu benutzen. Hierzu geben Sie nach dem Kommando einfach den Namen des gesuchten Rechners an:

# nslookup www.debian.org

Server:		194.25.2.129
Address:	194.25.2.129#53

Non-authoritative answer:
Name:	www.debian.org
Address: 198.186.203.20
Nach dem befragten Server wird weiter unten die IP-Adresse für den gewünschten Server angegeben.

resolv.conf

Auf die Datei /etc/resolv.conf wurde ja schon im vorherigen Abschnitt eingegangen. Hier noch ein etwas erweitertes Beispiel:

domain openoffice.de
search openoffice.de belug.org debian.org
nameserver 194.25.2.129
nameserver 192.168.22.33
Hinzugekommen ist die zweite Zeile. Diese ist nicht zwingend notwendig, erleichtert aber die Arbeit. Mit dieser Zeile werden einfach (wenn Sie nur den Hostnamen angeben) die angegebenen Domains nach dem gewünschten Namen durchsucht.