Beschreibung: Prüfungskandidaten sollten ein richtiges Verständnis der Netzwerk-Grundlagen demonstrieren können. Dieses Lernziel beinhaltet das Verständnis von IP-Adressen, Netzwerkmasken und ihrer Bedeutung (d.h. Bestimmung einer Netzwerk- und Broadcast-Adresse für einen Host auf Grundlage seiner Subnetzmaske in "dotted quad" oder abgekürzter Notation oder die Bestimmung der Netzwerk-Adresse, Broadcast-Adresse und Netzwerkmaske bei gegebener IP-Adresse und Anzahl von Bits). Dies deckt auch das Verstehen der Netzwerkklassen und klassenloser Subnetze (CIDR) und der für private Netzwerke reservierten Adressen ab. Ebenfalls enthalten ist das Verständnis der Funktion und Anwendung der Default Route. Weiters enthalten ist das Verstehen der grundlegenden Internet-Protokolle (IP, ICMP, TCP, UDP) und der gebräuchlicheren TCP- und UDP-Ports (20, 21, 23, 25, 53, 80, 110, 119, 139, 143, 161).
Die wichtigsten Dateien, Bezeichnungen und Anwendungen:
Dieses Kapitel ist wenig Linux-spezifisch, sondern bezieht sich auf das Verständnis von TCP/IP im Allgemeinen. Natürlich werden die jeweiligen Linux-Techniken auch mit erwähnt, wo sie anfallen, wichtig ist jedoch das fundierte Verständnis der Technik von IP-Netzwerken, von Netzadressen usw. Ich beginne hier also mit ein paar ausführlichen Abschnitten über diese Themen. Abschließend werden noch die hier aufgeführten Programme besprochen.
Jede der vier Schichten des TCP/IP Schichtenmodells verfügt über ein bzw. mehrere Protokolle, die den Umgang mit den jeweiligen Daten regeln. Unter Protokollen werden hier Regelsammlungen bezeichnet, die in sogenannten RFCs (Request for comment) veröffentlicht werden.
Das Entscheidende an der Konstruktion von TCP/IP sind die beiden mittleren Schichten, die Transport- und die Vermittlungsschicht. Hier arbeiten immer die gleichen Protokolle. In der Transportschicht stehen zwei zur Verfügung, eins für verbindungsorientierten Datenverkehr (TCP) und eins für verbindungslosen Datentransfer (UDP). In der Vermittlungsschicht arbeitet nur ein Protokoll in der Datenübertragung (IP), so steht also eine einheitliche und verbindliche Übertragungsform zur Verfügung.
In der obersten und untersten Schicht können so die verschiedensten Protokolle arbeiten, von denen die beiden mittleren Schichten nichts wissen müssen. In der Anwendungsschicht können so Standardprotokolle wie etwa FTP (Dateiübertragung), TELNET (Terminal EmuLation über NET), HTTP (WWW-Seiten), SMTP (E-Mail) oder NNTP (News) arbeiten, aber auch eigens entwickelte Protokolle etwa für ein Schachspiel übers Netz. Jedes dieser Anwendungsprotokolle hat eine Identitätsnummer zugewiesen bekommen, die sogenannte Portnummer. Mit Hilfe dieser Portnummer kann das Transportprotokoll wissen, an welche Anwendung in der Anwendungsschicht es Daten weitergeben soll. Unter Linux ist die Liste aller bekannten Portnummern in der Datei /etc/services zu finden.
Die unterste Schicht übernimmt die Steuerung der Netzhardware, also die der Netzwerkkarten o.ä. Diese Schicht kann mit beinahe jedem beliebigen Protokoll arbeiten, wie etwa die IEEE 802.3 802.4 802.5 oder FDDI, ATP aber auch mit PPP oder SLIP auf seriellen oder mit PLIP auf paralelle Schnittstellen.
Um die Funktion des Netzsystems genau zu verstehen ist ein Wissen über die einzelnen Schichten und Protokolle unabdingbar. Anhand einiger Beispiele sollen hier die einzelnen Aufgaben der Schichten erklärt werden.
Die Aufgabe des IEEE-802.3 Protokolls ist es, Daten, die von der Vermittlungsschicht kommen, in Pakete zu packen, und diese Pakete dann über die Netzhardware zu verschicken. Umgekehrt nehmen sie Pakete vom Netz entgegen und geben sie gegebenenfalls an die Vermittlungsschicht weiter. Der Inhalt der Daten spielt dabei keinerlei Rolle.
Physikalisch gesehen, ist ein Ethernet eine parallele elektrische Verbindung aller Rechner, die an einem Netzsegment hängen. Das heißt, wenn ein Rechner einem anderen Rechner ein Paket schickt, so bekommen alle angeschlossenen Rechner dieses Paket. Anhand einer (weltweit eindeutigen) Adresse, die jede Netzwerkkarte besitzt, kann dann aber entschieden werden, ob das Paket tatsächlich für diesen Rechner bestimmt ist. Jedes Paket, das über ein IEEE-802.3 Protokoll verschickt wird enthält sowohl diese Adresse des Absenders, als auch die des Empfängers. Alle angeschlossenen Rechner im Netz (genauer gesagt, alle angeschlossenen Netzwerkkarten im Netz) empfangen das gesendete Paket, aber nur die Netzwerkkarte, die tatsächlich die Adresse aufweist, die im Paket als Empfängeradresse angegeben ist, gibt das Paket entpackt an die Vermittlungsschicht weiter. Diese Adressen sind die sogenannten MAC-Adressen.
Die detaillierte Darstellung des IEEE 802.3 Frameformat ist hier einsehbar.
Natürlich gibt es noch viele weitere Protokolle auf der Netztzugriffsschicht, etwa ppp und slip für die serielle Anbindung an ein IP-Netz, oder andere Hardware-Netzfamilien wie Token Ring. Diese Darstellung ist also nur ein Beispiel von vielen.
Wenn Pakete (Datagramme) im Internet verschickt werden oder zumindest eine etwas komplexere Topologie in einem lokalen Netz existiert, so müssen Datagramme oft über Gateways geroutet werden. Das heißt, sie müssen durch verschiedene Rechner hindurch zum Empfänger geleitet werden. Auch diese Aufgabe erfüllt das IP-Protokoll, so daß solche Pakete im Gateway nie über die IP-Schicht hinweg kommen:
Zusammenfassend kann man sagen, das IP hat folgende Aufgaben:
Die Aufgaben, die dieses Protokoll zu erfüllen hat sind hier kurz aufgelistet:
Die hexadezimale IP-Adresse 954C0C04 wird also in seine vier Oktetts (Bytes) aufgeteilt, die durch Punkte getrennt werden. Dadurch entsteht hexadezimal 95.4C.0C.04 oder die bekanntere, dezimale Form: 149.76.12.4.
IP-Adressen werden zentral vergeben, das heißt, es sollten nicht einfach beliebige Kombinationen verwendet werden. Im Prinzip ist es in reinen lokalen Netzen möglich, beliebige Adressen zu benutzen, sobald ein Anschluß ans Internet besteht, müssen aber zentral vergebene Adressen benutzt werden. Jedes Land der Erde unterhält dazu ein NIC (Network Information Center), das für die Adressvergabe zuständig ist.
Je nachdem, welcher Teil der Gesamtadresse als Netz- und welcher als Hostadresse gilt, entstehen unterschiedliche Obergrenzen für die mögliche Anzahl von Netzen bzw. Hosts pro Netz. Weil ja alle Adressen im Internet einmalig sein müssen, kommt es heute bereits zu Engpässen bei der Adressvergabe. Ein neuer Standard (IP6) ist schon in Arbeit, der dann 128 Bit breite Adressen verwenden soll.
Die Frage, welcher Teil der Adresse Netzadresse ist wird durch Adressklassen gelöst. Es existieren fünf Klassen, von denen aber nur drei relevant sind, die anderen beiden dienen der Forschung und Experimentierarbeit. Die Klassen sind:
Netz klasse | Netzadressen breite | Hostadressen breite | Max Anzahl Netze | Max Anzahl Hosts/Netz | Startadresse | Endadresse |
---|---|---|---|---|---|---|
A | 1 | 3 | 126 | 16777214 | 1.0.0.0 | 126.0.0.0 |
B | 2 | 2 | 16382 | 65534 | 128.0.0.0 | 191.255.0.0 |
C | 3 | 1 | 2097150 | 254 | 192.0.0.0 | 223.255.255.0 |
Die Adressen von 224.0.0.0 bis 255.255.255.255 sind für zukünftige Verwendungen reserviert, werden aber wohl nie zur Geltung kommen, weil demnächst das IPV6 kommen wird das diese Erweiterungen schon beinhaltet.
Um Konflikte mit lokalen TCP/IP Netzen und dem Internet zu vermeiden, gibt es für jede Klasse einige Adressen, die nicht im Internet geroutet werden. Sie sind ausschließlich für lokale Netze gedacht und sollten auch immer Verwendung finden, wenn es um die Frage der IP-Adressen geht und kein echter Internetanschluß vorliegt. Diese Adressen sind:
Wo immer lokale Netze ohne direkte Anbindung des ganzen Netzes ans Internet vorliegen, werden Adressen aus diesem Pool verwendet.
Es gibt auch zwei reservierte Netzadressen mit Sonderbedeutung. Das sind die Adressen 0.0.0.0 und 127.0.0.0 Die erste ist die sogenannte default route (voreingestellte Route) und die andere das sogenannte Loopback.
Das Netz 127.0.0.0 bedeutet intern im Netz immer das lokale Netz, egal welche reale Adresse es hat. Gewöhnlich steht dann auch noch die Adresse 127.0.0.1 als loopback interface des jeweiligen Hosts zur Verfügung. Jedes Paket, das darauf ausgegeben wird kommt sofort wieder an, als käme es aus einem Netz. Damit kann z.B. Software entwickelt werden, für Netze, auf einem Rechner, der nicht an eins angeschlossen ist.
Die Adresse 0.0.0.0 hat eine Bedeutung für das Routing. Jedes Datagramm, das an eine Adresse geschickt wird, zu der keine Route bekannt ist, wird an die default route geschickt. Diese voreingestellte Route weist dann zum nächsten Gateway, der schon wissen wird, wohin er das Paket senden soll. Falls er keine Route kennt, die zum entsprechenden Ziel führt, so hat auch er eine default route, an die er das Paket dann schickt...
Die Netzmaske (Netmask) ist wie die Adresse eine 32 Bit Zahl, die in vier Oktetts aufgeteilt ist. Jedes Bit dieser Maske, das gesetzt ist (1), bestimmt daß das entsprechende Bit in der Adresse ein Teil der Netzadresse ist. Zum Verständnis am Besten mal ein Beispiel:
Die B-Klasse Adresse 149.76.0.0 wird normalerweise gewertet als Adresse, deren erste 2 Bytes als Netzadresse gelten, und deren letzte 2 Bytes als Hostadresse. Die Netmask würde also einfach berechnet:
Netzadresse Hostadresse 149.76.0.0 --> 10010101.01001100.00000000.00000000 Netmask 11111111.11111111.00000000.00000000 --> 255.255.0.0Wollen wir jetzt dieses Netz in mehrere Unternetze aufteilen, so können wir z.B. das dritte Byte als Unternetzadresse und das letzte Byte als Hostadresse werten. Für die Netmask käme folgendes Bild heraus:
Netzadresse Hostadresse 149.76.0.0 --> 10010101.01001100.00000000.00000000 Netmask 11111111.11111111.11111111.00000000 --> 255.255.255.0Die Netzmaske kann entweder in dieser Form angegeben werden (dotted quad) oder als verinfachte Angabe, indem einer IP-Adresse einfach die Anzahl der Bits angegeben wird, die Netzadressenbits sind. Die folgenden Adressenangaben sind also äquivalent:
Dotted Quad | Vereinfacht |
---|---|
192.168.100.1 Netmask 255.255.255.0 | 192.168.100.1/24 |
175.12.34.56 Netmask 255.255.0.0 | 175.12.34.56/16 |
Schwieriger wird es, wenn wir etwa ein C-Klasse Netz in weitere Unternetze aufteilen wollen. Hier muß dann jede Adresse errechnet werden, je nach der Aufteilung. Die Netmask wäre dann entsprechend auch nicht mehr nur 255 sondern würde sich aus anderen Zahlen zusammensetzen. Nochmal ein Beispiel:
Das C-Klasse Netzwerk 192.168.200.0 soll in vier Unternetze aufgeteilt werden. Um vier Netze anzusprechen benötigen wir zwei Bits der Hostadresse für die Subnetzangabe:
Subnetzbits || Netzadresse VV 192.168.200.0 --> 11000000.10101000.11001000.00000000 Netmask 11111111.11111111.11111111.11000000 --> 255.255.255.192Statt der üblichen 255.255.255.0 haben wir jetzt also 255.255.255.192 als Netzmaskierung (oder - vereinfacht /26 weil die ersten 26 Bits der Adresse jetzt die Netzadresse sind). Damit weiß IP, daß diese Adresse kein normales C-Klasse Netz ist. Allerdings müssen wir jetzt auch bei der Vergabe der einzelnen Rechneradressen aufpassen, daß die verwendeten Zahlen im jeweiligen Netz liegen:
Subnetz 0 Netzadresse 0 -> 00000000 Hostadressen 1 -> 00000001 2 -> 00000010 3 -> 00000011 ... Broadcast 63 -> 00111111 Subnetz 1 Netzadresse 64 -> 01000000 Hostadressen 65 -> 01000001 66 -> 01000010 67 -> 01000011 ... Broadcast 127 -> 01111111 Subnetz 2 Netzadresse 128 -> 10000000 Hostadresse 129 -> 10000001 130 -> 10000010 131 -> 10000011 ... Broadcast 191 -> 10111111 Subnetz 3 Netzadresse 192 -> 11000000 Hostadresse 193 -> 11000001 194 -> 11000010 195 -> 11000011 ... Broadcast 255 -> 11111111Netzadressen und Broadcast errechnen sich nach der Regel
Beiden Protokollen gemeinsam ist die Verwendung sogenannter Portnummern. Dieses System beruht auf der Tatsache, daß es mehrere Verbindungen über ein Transportprotokoll gleichzeitig geben kann. So kann ein Rechner beispielsweise gleichzeitig über FTP Daten von einem anderen Rechner kopieren und via TELNET auf dem gleichen Rechner eingeloggt sein. Das erfordert es, daß das Transportprotokoll in der Lage ist, zu unterscheiden, welche Pakete an FTP und welche an TELNET adressiert sind. Diese Adressierung übernehmen die Portnummern. Die Standard-Internet-Protokolle haben festgelegte Portnummern (definiert in /etc/services).
UDP wird überall dort verwendet, wo entweder die Datenmenge so klein ist, daß es sich nicht lohnen würde, einen großen Header zu benutzen, weil der größer als die eigentlichen Daten wäre oder wo die Anwendungen selbst noch Überprüfungen des Paketinhaltes vornehmen.
Lohnenswert ist der Einsatz auch dort, wo reine Frage-Antwort Mechanismen auftreten. Dort ist kein verbindungsorientiertes Protokoll nötig, weil ja nach dem Senden einer Frage klar ist, wenn nach einer bestimmten Zeit keine Antwort eingeht, so wird das Paket verlorengegangen sein und die Frage muß nochmal gestellt werden.
Wichtig ist die Feststellung, daß das UDP-Protokoll keinen Datenstrom verarbeitet, sondern Datagramme direkt. Es stellt also keinerlei Mechanismen zur Verfügung um einen Datenstrom in Pakete aufzuteilen und wieder zusammenzubauen.
TCP bietet einen verlässlichen Datentransfer durch die Verwendung eines Mechanismus, der Datenpakete (sogenannte Segmente) solange an einen Empfänger schickt, bis der eine Bestätigung des Empfangs rückmeldet. Dabei überprüft der Empfänger auch wieder eine Prüfsumme, erst wenn die richtig ist, schickt er das Signal des Empfangs.
TCP ist verbindungsorientiert, d.h., daß dieses Protokoll nicht einfach Daten losschickt wie UDP sondern zuerst einen Handshake durchführt, um sich mit dem Empfänger über dessen Bereitschaft zu synchronisieren. Das Prinzip ist einfach, eine TCP Übertragung beginnt immer erst mit der Nachfrage ob der Empfänger bereit ist (SYN). Der Empfänger sendet ein entsprechendes Signal (SYN.ACK) und erst nachdem dieses Signal erhalten wurde startet TCP die Übertragung der Segmente.
TCP ist streamorientiert, d.h., daß es seine Daten als kontinuierlichen Datenstrom ansieht. Durch die Verwendung von Sequenznummern kann das empfangende TCP die Segmente wieder in richtiger Reihenfolge zusammenbauen und sie wieder zu einem Datenstrom formieren.
Damit diese Anwendungen sich nicht gegenseitig stören, hat jede Anwendung eine eigene Portnummer. Sie dient als Adresse, an die die Transportschicht einen Datenstrom oder eine UDP-Meldung weiterleitet.
Die wichtigsten Portnummern sollte man parat haben, um die LPI102-Prüfung abzulegen. Es sind
Port | Protokoll | Transportprotokoll | Beschreibung |
---|---|---|---|
20 | FTP-Data | TCP | Datenkanal einer FTP-Verbindung. |
21 | FTP | TCP | Kontrollkanal einer FTP-Verbindung. |
22 | SSH | TCP oder UDP | SecureShell (Verschlüsselter Login) |
23 | TELNET | TCP | Terminal Emulation over Network |
25 | SMTP | TCP | Simple Mail Transfer Protocol |
53 | DNS | TCP oder meist UDP | Nameserver |
80 | WWW/HTTP | meist TCP oder UDP | Hypertext Transfer Protokoll |
110 | POP3 | TCP oder UDP | Post Office Protocol zum Holen von Mails |
119 | NNTP | TCP | Net News Transfer Protocol |
139 | NetBIOS-SSN | TCP oder meist UDP | Windows Netzwerk Sitzungsdienste |
143 | IMAP2 | TCP oder UDP | Interim Mail Access Protocol (verschlüsselt) |
161 | SNMP | UDP | Simple Network Management Protocol |
Um ping von vorneherein auf eine bestimmte Anzahl von Paketen zu beschränken, gibt es den Parameter -c, mit dem die Anzahl der zu sendenden Pakete angegeben werden kann:
ping -c4 foo.bar.comsendet 4 Pakete an den Rechner foo.bar.com. Wenn ping mindestens eine Antwort erhält, so gibt es in diesem Fall eine 0 zurück, ansonsten einen Wert ungleich 0. Somit kann ping auch in Scripts benutzt werden, um festzustellen, ob ein bestimmter Rechner verfügbar ist.
Der einzig nötige Parameter für traceroute ist der Name oder die IP-Adresse des Zielrechners.
Wird statt einem Domainnamen eine IP-Adresse eingegeben, so wird umgekehrt der passende Domainnamen ausgegeben, sofern er existiert und ermittelbar ist.
Wenn nicht nur die Information über die IP-Adresse eines Domainnamens gesucht wird, kann der Parameter -a angegeben werden, der alle verfügbaren Informationen über einen Rechner anfordert und darstellt.
dig . nserfragt werden oder dig kann eine Liste aller Nameserver für eine bestimmte Zone erfragen. An sich werden alle vier Programme (host, dig, nslookup und nsquery) im Alltag dazu benutzt, explizit einen Nameserver abzufragen.
Im einfachsten Fall wird whois nur mit dem Parameter der Domain aufgerufen, über die Informationen erfragt werden sollen:
whois lpi.orggibt als Ausgabe
Registrant: Linux Professional Institute Inc. 78 Leander St. Brampton, ON L6S 3M7 CA Domain Name: LPI.ORG Administrative Contact: Silberman, Wilma nic@lpi.org 78 Leander St. Brampton, ON L6S 3M7 CA (905) 874-4822 Technical Contact: starnix, DNS dns@starnix.com 175 Commerce Valley Dr. W. Thornhill, ON L3T 7P6 CA (416) 410-9342 ...
Wie bei Telnet, so gibt es auch hier einen Server (ftpd) und einen Client (ftp, xftp, Netscape), die miteinander kommunizieren. Früher war es üblich, mit der FTP-eigenen Kommandosprache zu arbeiten, heute gibt es graphische Frontends, die FTP wesentlich konfortabler machen.
FTP besitzt zwei Übertragungsmodi, Text und Binärformat. Heute ist es üblich, alle Übertragungen im Binärformat vorzunehmen, es entstehen so weniger Probleme beim Umgang mit Textdateien, die 8 Bit Zeichensätze verwenden (Umlaute...).
Die klassische Art, FTP zu nutzen war interaktiv, mit der FTP-eigenen Kommandosprache. Dabei war fast der Eindruck einer kleinen Terminalsitzung zu erahnen, um sich im Dateibaum zu bewegen und dort Dateien zu kopieren. Die wichtigsten Befehle von FTP sind:
Eine große Bedeutung im Internet hat anonymes FTP (ohne Username und Passwort), das als Möglichkeit verwendet wird, um Public-Domain-Software downzuloaden.
Auf Unix-Systemen wird heute das Kommando rlogin verwendet, das in etwa die gleiche Funktionalität besitzt, wie Telnet, dabei aber die Unix Eigenheiten besser unterstützt. In heterogenen Umgebungen, die nicht nur aus Unix-Systemen bestehen ist Telnet aber flexibler. Sicherer ist allerdings die Anwendung von ssh statt Telnet, da es die gesamte Kommunikation (inklusive der Login-Prozedur und Passwortübergabe) verschlüsselt abwickelt. Telnet überträgt alles, auch das Passwort unverschlüsselt.
Eine Telnetsitzung wird gewöhnlich durch den Client mit dem Befehl
telnet Hostnamegestartet. Das Programm stellt dann eine TCP-Verbindung mit dem gewünschten Host her und kommuniziert dort mit dem Telnet-Daemon telnetd. Dieser Daemon stellt jetzt ein sogenanntes Pseudo-Terminal (oder auch Network Virtual Terminal - NVT) zur Verfügung. Dieses Terminal lässt sich genauso steuern, wie eine Unix-Konsole, so daß auch bildschirmorientierte Programme via Telnet benutzt werden können (z.B. vi, mc, ...)