Netzwerk In diesem Abschnitt befassen wir uns mit dem Anschluss des Rechners an ein TCP/IP Netzwerk. Wir lernen die historische Entwicklung der Vernetzung von Rechnern kennen, wir befassen uns mit Aufbau und den technologischen Grundlagen von Netzwerken, und beschreiben die wesentlichsten Aspekte für die Konfiguration und Administration von Netzwerken. Die Themen: TCP/IP Geschichte IP Adressierung Private Netze Protokollschichten Netzwerk Konfiguration IP Routing TCP/IP TCP/IP ist bekannt als das INTERNET Protokoll. Es wurde vom US Departement of Defense (DOD) Advanced Reseach Projects Agency (DARPA) entwickelt. Es umfasst eine Sammlung von verschiedenen Protokollen. Geschichte von TCP/IP TCP/IP begann 1969 als ein 4 Knoten Netzwerk, das ARPANET genannt wurde. Die vollständigen Protokolle lagen erst 1982 vor, die zwei wichtigsten davon waren: TCP Transmission Control Protocol IP Internet Protocol Im Jahre 1983 wurde TCP/IP das Standardprotokoll im DOD, und ist heute der generische Name für die gesamte Sammlung von Protokollen. Netzwerk Adressierung Jeder Host im Netzwerk erhält eine eindeutige Adresse, die sogenannte IP-Adresse oder IP-Nummer. Das 'IP' in der Bezeichnung deutet darauf hin, dass hierfür das Internet Protocol zuständig ist. In der aktuellen Version von TCP/IP wird jedem Rechner eine 32 Bit lange Adresse zugeordnet. Hierbei werden die einzelnen Bytes durch Punkte getrennt. So sind IP-Adressen von 0.0.0.0 bis 255.255.255.255 möglich. Es sind nicht alle Nummern frei nutzbar, einige z.B. sind für die Netzadresse oder sogenannte Broadcasts reserviert. Eine typische IP-Adresse könnte nun lauten 141.89.64.1 In Binärschreibweise wäre dies 10001101 1011001 1000000 00000001 Eine IP-Adresse gliedert sich nun in einen vorderen und einen hinteren Teil. Der vordere Teil stellt die Netzadresse dar, der hintere Teil die Host-Adresse. Die IP-Adresse bezeichnet das Netz, in dem sich ein Rechner befindet und seine Nummer in diesem Netz. Die Trennung dieser beiden Teile kann prinzipiell an jedem Bit der Adresse erfolgen. Dazu benötigt man aber noch die sogenannte Netzmaske. Diese Netzmaske ist genauso lang wie die IP-Adresse und wird bis zu einem bestimmten Bit mit Einsen gefüllt. Der Rest wird auf Null gesetzt. Alle Bits in der IP-Adresse, die in der Netzmaske belegt sind, zählen dann zum Netzanteil, der Rest zum Hostanteil, hier einige Beispiele: Beispiel 1: Wir verwenden als Netmask 255.255.0.0, d.h. die ersten 16 Bit der Adresse sind dem Netzteil vorbehalten, hier 141.89, die restlichen 16 Bit werden zur Adressierung des Hosts in diesem Netz verwendet, dazu bleiben 254*254, also gut 64.516 Möglichkeiten - praktisch können also über 64.000 Hosts in diesem Netz adressiert werden. Die Adresse 141.89.0.0 ist für das Netzwerk selbst reserviert, die Adresse 141.89.255.255 bezeichnet die sogenannte Broadcast-Adresse: Pakete an diese Adresse werden an alle Stationen im Netz verschickt. Beispiel 2: Hier wird dem Host die Adresse 58.17.131.43 mit der Netmask 255.255.255.0 zugeteilt. Es sind also 24 Bit für den Netz- und 8 Bit für den Hostanteil reserviert. Theoretisch kann es in diesem Netz maximal 254 Hosts geben. Adresse für dieses Netzwerk ist 58.17.131.0, Broadcasts gehen an 58.17.131.255. Beispiel 3: Man muss sich bei der Netzmaske keinesfalls auf ganze Bytes beschränken. Bei dieser Adresse macht der Netzanteil 20 Bit aus, der Hostanteil 12 Bit. Die Netzadresse ist hier 123.5.6.0 (bis zum 20. Bit), Broadcasts gehen an 123.5.112.255 (Alle Bits ab dem 21. sind auf 1 gesetzt). Die verschiedenen Netzmasken lassen sich in verschiedene Klassen unterteilen: Class-A-Netz haben die Netmask 255.0.0.0, Class-B-Netze die Netmask 255.255.0.0 und Class-C-Netze die Netmask 255.255.255.0. Netze mit anderen Netmasks bezeichnet man als Subnetze. Adressen für private Netze Nun wollen wir mit unserem Netz aber gar nicht fest an das Internet angebunden sein. Dann steht uns die Wahl der Netzadressen im Grunde genommen frei, dies kann aber später zu Problemen führen. Stellen wir uns vor, wir möchten ein Netzwerk mit der Adresse 141.89.0.0 aufbauen. Soweit kein Problem, unsere Rechner bekommen IP-Nummern von 141.89.1.1 bis 141.90.254.254 mit Netzmaske 255.255.0.0 und alles sollte funktionieren. Wenn dieses Netzwerk später in das Internet eingebunden wird kommt es zwangsläufig zu Konflikten mit Hosts welche die gleiche IP-Adresse besiten. Private Adressräume: Abhilfe schaffen hier die sogenannten privaten Adressräume. Hierbei handelt es sich um Bereiche von IP-Adressen die im Internet nicht vorkommen und für "local Area Networks", LANs, frei verwendet werden können. Im einzelnen sind diese in der folgenden Tabelle aufgeführt: 1 Class-A-Netz Adressbereich 10.0.0.0 16 Class-B-Netze Adressbereich 172.16.0.0 256 Class-C-Netze Adressbereich 192.168.0.0 bis bis bis 10.255.255.255 172.31.255.255 192.168.255.255 Protokollschichten Die TCP/IP-Protokollsuite über vier Schichten bzw. "Layer". Im einzelnen handelt es sich hier um den Link Layer, Network Layer, Transport Layer und Application Layer. Die folgende Abbildung zeigt diese Schichten und Beispiele für zu diesen Schichten gehörende Protokolle. Protokolle im Link Layer Der Link Layer umfasst die Hardware-Schicht. Hierfindet man alle Netzwerkmedien, über die man TCP/IP betreiben kann. Auf die verschieden Hardwareprotokolle soll an dieser Stelle nicht detailliert einegangen werden, Ethernet und Tokenring sollen hier als Beispiele angeführt werden. Protokolle im Network Layer IP - Das Internet Protocol Das IP übernimmt die gesamte Paketvermittlung. Daten werden gegebenenfalls in mehrere IP-Pakete verpackt und an einen bestimmten Empfänger abgeschickt. Beim Empfänger können diese Pakete eventuell in falscher Reihenfolge ankommen. Das IP hat nun dafür zu sorgen, diese fragmentierten Pakete wieder ordentlich zusammenzusetzen. Dabei arbeitet das Protokoll verbindungslos und ungesichert, d.h. vor dem Versenden der Pakete wird keine explizite Verbindung zum Empfänger hergestellt, sondern einfach abgeschickt. Es existieren auf IP-Ebene keine Sicherungsmechanismen, die sicher stellen, dass die Daten auch korrekt beim Empfänger ankommen. Dies ist auch gar nicht notwendig, denn das IP hat für die Vermittlung der Pakete zu sorgen, für die korrekte Übertragung sind die höheren Protokollschichten zuständig. Die Adressierung in TCP/IP-Netzen wird ebenfalls durch das IP gehandhabt. ICMP - Internet Control Message Protocol Das ICMP dient zur Übermittlung von Fehler- und Statusinformationen. So wird ICMP aktiv, wenn der Zielrechner oder das Zielnetzwerk nicht erreichbar sind und gibt 'host unreachable' bzw. 'network unreachable' zurück. Eine recht bekannte Anwendung von ICMP ist das Programm ping, mit dem man die Erreichbarkeit eines anderen Rechners prüfen kann. Dazu wird ein ICMP echo request an den Zielrechner geschickt, dieser sendet ein ICMP echo reply zurück, wenn er denn verfügbar ist. Beispiel: $ ping 192.168.102.1 PING 192.168.102.1 (192.168.102.1) from 192.168.102.1 : 56(84) bytes of data. 64 bytes from 192.168.102.1: icmp_seq=0 ttl=255 time=0.4 ms 64 bytes from 192.168.102.1: icmp_seq=1 ttl=255 time=0.2 ms 64 bytes from 192.168.102.1: icmp_seq=2 ttl=255 time=0.2 ms --- 192.168.102.1 ping statistics --3 packets transmitted, 3 packets received, 0\% packet loss round-trip min/avg/max = 0.2/0.2/0.4 ms Ist ein Rechner nicht erreichbar, erscheinen keine Antwortmeldungen. Protokolle im Transport Layer UDP - User Datagram Protocol Das UDP ist das einfachste Protokoll auf der Transportebene. Es stellt im Gegensatz zum noch folgenden TCP nicht sicher, ob die versendeten Pakete auch wirklich beim Empfänger ankommen, sondern sendet auf gut Glück, bzw. nach dem Motto 'fire and forget'. Dafür ist es sehr schnell und erzeugt nicht so eine hohe Netzlast wie TCP. Somit eignet es sich gut für Hochgeschwindigkeitsanwendungen, wie verteilte Dateisysteme (NFS) oder Nameserveranfragen (DNS). TCP - Transmission Control Protocol TCP ist ähnlich wie das Telefonnetz verbindungsorientiert aufgebaut. Bevor man also Daten an einen anderen Rechner senden kann, muss man eine Verbindung zu diesem aufgebaut haben. Durch diese festgelegte Verbindung können die zwei Verbindungspartner auch sicherstellen, dass die gesendeten Daten auch wirklich korrekt ankommen und zwar auch in der richtigen Reihenfolge. Eine typische TCP-Verbindung sieht so aus, dass ein Client eine Verbindungsanforderung an einen Server schickt. Dieser bestätigt diese Verbindung, wenn er dies möchte. Damit besteht eine feste Verbindung zwischen den beiden Partnern. Nun können Daten übertragen werden bis entweder der Server oder der Client die Zeit gekommen sehen, die Verbindung zu trennen. Dazu sendet er einfach eine Ende-Anforderung an den anderen Rechner und nach Bestätigung durch diesen wird die Verbindung beendet. Ports Sowohl UDP als auch TCP verwenden neben der IP-Adresse auch Portnummern. Da ein Rechner in der Regel mehr als einen Dienst anbietet (z.B. HTTP, SSH, FTP, Telnet, ...), muss man neben der IP-Adresse ein weiteres Adressierungsmerkmal finden. Dies sind die sogenannten Ports. So erreicht man z.B. den Dienst FTP auf einem Rechner in der Regel über Port 21, Telnet läuft über Port 23. Hinter jedem Port steht auf dem Rechner ein Prozess, der auf Anfragen wartet, hinter Port 21 entsprechend der FTPDaemon. Bei allen Unix-ähnlichen Betriebssystemen sind in der Datei /etc/services alle Ports aufgeführt, die auf dem Rechner verfügbar sind. Protokolle im Application Layer In dieser Schicht tauchen die Anwendungsprotokolle auf. Hier einige Beispiele: DNS - Domain Name Service: Dient zur Übersetzung von für Menschen leichter zu merkende Rechner-Namen in leichter zu merkende IP-Adressen, z.B. von 193.100.232.131 zu www.heise.de. Das DNS ist hierarchisch aufgebaut. FTP - File Transfer Protocol: FTP ist entworfen worden für die Übertragung von Dateien zwischen zwei Rechnern. Secure Version von ftp ist sftp. HTTP - Hypertext Transfer Protocol: Das HTTP ist vor allem durch das World Wide Web bekannt geworden, denn alle Webseiten werden mit Hilfe von HTTP übertragen. Telnet : Mit Telnet kann man sich auf einem entfernten Rechner einloggen und dort Befehle ausführen. Secure Version von Telnet is SSH. NFS - Network File System: Mit dem hauptsächlich unter Unix verwendeten NFS kann man Dateisysteme im Netz verfügbar machen. So kann man mit NFS auf dem eigenen Rechner ein Verzeichnis einrichten, das eigentlich auf einer ganz anderen Maschine liegt. NFS arbeitet dabei völlig transparent. Neben dem DNS ist es eins der wenigen TCP/IPProtokolle, die auf UDP aufbauen. IP-Interface Konfiguration Wie kommt die Netzwerkkarte zu Ihrer Adresse?. In den meisten Fällen wird die Konfiguration der Netzwerkkarte bereits bei der Installation vorgenommen. Wenn eine Karte später eingebaut oder das System mit einer zweiten Karte erweitert wird, muss die Konfiguration manuell erfolgen. Das Kommando ifconfig wird benutzt, um einem Netzwerkinterface die benötigten Einstellungen zuzuweisen. Loopback - ist ein „virtuelles“ Netzwerkinterface. Dieses bezieht sich immer auf den Rechner selbst und hat die IP-Adresse: 127.0.0.1. Interface: lo Ethernet - um zwei oder mehrere Rechner miteinander zu vernetzen, verwendet man eine Netzwerkkarte, Standard ist dabei der Einsatz von Ethernet-Karten. Interface: eth0, eth1, eth2 ... PPP - „Point-to-Point Protocol“ (Punkt-zu-Punkt-Protokoll), zur Verwndung über serielle Verbindungen, wie zum Beispiel Modemstrecken, ISDN usw. Interface: ppp0, ppp1, ppp2 ... Wenn der Kernel die installierte Netzwerkkarte nicht erkennt, muss das passende Modul geladen werden. Dies kann temporär mit dem Kommando insmod oder modprobe durchgeführt werden. Wenn das richtige Modul gefunden wurde, müssen die nötigen Werte in die Datei /etc/modules oder /etc/conf.modules eingetragen werden. 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 Ruft man nun ifconfig mit dem Namen des Interfaces, eth0 für die erste, eth1 für die zweite Karte usw., sowie mit der gewünschten IP-Nummer auf, ergibt sich folgende Veränderung: # /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 nun auch die Informationen zur Ethernetkarte aus. Die Werte für die Netzmaske, Broadcast Adresse usw. wurden automatisch gesetzt. Wenn man bei diesen Werten andere Einstellungen benötigt, so müssen diese ebenfalls mit ifconfig gesetzt weren: # /sbin/ifconfig eth0 192.109.42.23 netmask 255.255.255.240 Dies verändert die zuvor angegebenen Werte. Wenn man ein Interface komplett deaktivieren will, benutzt man die Option down: # /sbin/ifconfig eth0 down Wenn die Netzwerkkarte bereits bei der Installation eingerichtet wurde, findet man bereits die notwendigen Werte in der 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 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 wir der Netzwerkkarte die eigenen Einstellungen mitgeteilt haben, müssen wir dem Linux-Kernel noch beibringen, die IP-Pakete auch an die richtige Stelle zu schicken. 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 wir bisher nur das Loopback Device konfiguriert haben, wird das Ergebnis folgendes sein: # /sbin/route Kernel IP routing table Destination Gateway Use Iface 127.0.0.0 * 2 lo Genmask Flags Metric Ref 255.0.0.0 U 0 0 Dies bedeutet, dass alle IP-Pakete für das Netzwerk 127 über das Loopback Device (lo) geschickt werden sollen. Wenn wir nun eine Netzwerkkarte konfiguriert haben, müssen wir 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 Use Iface 127.0.0.0 * 255.0.0.0 2 lo 192.109.42.0 * 255.255.255.0 137 eth0 Flags Metric Ref U 0 0 U 0 0 Dies führt dazu, dass alle IP-Pakete für das (Class C) Netz 192.109.42.xxx über das Interface "eth0" zu erreichen sind. Wenn wir darüberhinaus zwei Netzwerke miteinander verbinden wollen, müssen wir dies über ein sogenanntes gateway oder über einen router tun. Wenn über das neue Interface nur ein bestimmtes Netzwerk zu erreichen ist, und wir die Adresse des Gateways für dieses Netz kennen, müssen wir die RoutingTabelle um genau diesen Eintrag ergänzen. Wir erreichen dies mit der Option -net: # route add -net 193.174.1.0 gw 192.109.42.17 Dies bedeutet, dass das Netz 193.174.1.0 (Class C) über das Gateway 192.109.42.17 zu erreichen ist, setzt aber auch voraus, dass 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 Use Iface 127.0.0.0 * 2 lo Genmask Flags Metric Ref 255.0.0.0 U 0 0 192.109.42.16 0 eth0 0.0.0.0 0 eth0 0.0.0.0 255.255.255.240 U 0 0 192.109.42.17 0.0.0.0 1 0 UG Sehen wir uns die Einträge im einzelnen einmal an: die erste Zeile bezieht sich auf das Loopback Device (127.0.0.0, lo). Wenn wir 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 wir eine Änderung an dieser Datei vornehmen, können wir 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 unser Netz. In dieser Datei werden IPNummern verwendet. Wenn wir das Kommando route aufrufen um uns die Routing Tabelle anzeigen zu lassen, werden wir bemerken, dass dort die Namen der Rechner und Netze verwendet werden. Wir können die Ausgabe der IP-Nummern mit der Option -n hinter dem Kommando route erzwingen. In der Datei /etc/hosts finden wir 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.