# 1.112.1

# Grundlagen von TCP/IP

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:

- `/etc/services`
- ftp
- telnet
- host
- ping
- dig
- traceroute
- whois

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.

### Die TCP/IP Protokollfamilie

TCP/IP hält sich nicht an das OSI-Schichtenmodell, es hat ein eigenes Modell, das sich nicht eins zu eins übertragen lässt.

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 Netzzugriffsschicht mit ihren Protokollen

In dieser Schicht arbeiten, wie oben schon erwähnt, beinahe alle Protokolle von Netzhardware, von einfachen seriellen Verbindungen bis zu Hochleistungssysteme mit Glasfaserkabeln. Ein typisches Beispiel soll hier näher betrachtet werden, das Protokoll IEEE-802.3, das Protokoll des Ethernet. Das hier dargestellte Protokoll ist das der 10Mbit Version von Ethernet, die moderneren Versionen unterscheiden sich in Kleinigkeiten, die aber nicht technisch relevant sind.

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.

### Die Vermittlungsschicht und das InternetProtokoll (IP)

Die Vermittlungs- oder auch Internetschicht hat ein allumfassendes Protokoll, das zum Transport der Daten zuständig ist, das Internet Protokoll (IP). Daneben arbeitet noch ein weiteres wichtiges Protokoll auf dieser Schicht, das für technische Informationen statt für Daten zuständig ist, das Internet Control Message Protokoll (ICMP).

#### Das Internet Protokoll (IP)

Das Internet-Protokoll ist für die Vermittlung zwischen zwei Rechnern zuständig. Hier wird mit den IP-Adressen gearbeitet, statt mit den physikalischen Adressen im Netzwerk. Die zentrale Aufgabe des IP ist das Versenden und Empfangen von Daten, die für diesen Zweck wieder mal in Pakete aufgeteilt werden müssen. Die Pakete des IP werden Datagramme genannt und beinhalten neben den eigentlichen Daten wieder verschiedenste Steuerinformationen.

- Der Aufbau von IP-Datagrammen

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:

- Es definiert die Datagramm-Struktur, die die Grundlage für allen Datenverkehr im TCP/IP-Netz darstellt.
- Es definiert die IP-Adress-Schematik, von der später noch die Rede sein wird.
- Es bewegt Daten zwischen der Transportschicht und der Netzzugriffsschicht.
- Es routet Datagramme zu externen Rechnern.
- Es teilt Datenströme in Datagramme um sie zu versenden und baut aus empfangenen Datagrammen wieder Datenströme zusammen.

#### Das Internet Controll Message Protocol

Das Internet Control Message Protocol (ICMP) ist ein integraler Bestandteil von IP und dient zur Übermittlung technischer Meldungen, die übers Netz gehen, aber nicht über die IP-Schicht hinauskommen müssen. D.h., daß dieses Protokoll in der Lage ist, Pakete zu schicken, die nicht an ein Transportprotokoll der Transportschicht gebunden sind, sondern eben nur von Vermittlungsschicht zu Vermittlungsschicht gehen.

Die Aufgaben, die dieses Protokoll zu erfüllen hat sind hier kurz aufgelistet:

Flußkontrolle
  Wenn ein Rechner Datagramme so schnell schickt, daß der Empfänger sie nicht rechtzeitig verarbeiten kann, so schickt der Empfänger über ICMP eine Meldung an den Sender, daß die Sendungen vorübergehend stoppen sollen. Nachdem der Empfänger alle anstehenden Datagramme verarbeitet hat, schickt er wieder eine Meldung, daß er wieder empfangsbereit ist.
Erkennen von unerreichbaren Zielrechnern
  Wenn ein Gateway erkennt, daß ein bestimmter Rechner nicht erreichbar ist, so schickt er an den Absender des Paketes eine Destination unreachable Meldung über ICMP
Routenoptimierung
  Wenn ein Gateway erkennt, daß er einen Umweg darstellt, so schickt er an den Absender eine Meldung, in der die schnellere Route steht. Der Absender (bzw. seine IP-Schicht) kann dann das nächste Paket schon über den besseren Weg übermitteln.
Überprüfen von erreichbaren Hosts
  Mit Hilfe des ICMP Echo Message kann ein Rechner überprüfen ob ein Empfänger ansprechbar ist. Das ping-Kommando nutzt diese Echo-Meldung.

### Der Aufbau von IP-Adressen

#### Das IP-Adressen Format

Jeder Rechner im Netz hat eine (Host) oder mehrere (Gateway) eindeutige IP-Adressen. Streng genommen hat eigentlich jede Netzwerkschnittstelle eine solche Adresse. Dabei handelt es sich um die Adressen, die in den IP-Datagrammen angegeben werden. Aus der Aufteilung des IP-Datagramms geht schon hervor, daß diese Adressen 32 Bit breite Zahlen sind. In der Regel werden diese Zahlen in vier Oktetts dargestellt.

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.

#### Netz- und Hostadressen

Die Aufteilung der IP-Adressen in vier Oktette hat noch einen anderen wesentlichen Grund. Das Internet besteht zum großen Teil nicht aus vernetzten Einzelrechnern, sondern aus Computernetzen, die miteinander über das Internet kommunizieren können. Die IP-Adresse ist immer aufgeteilt in eine Netz- und eine Hostadresse. Diese Eigenschaft spielt für das Routing eine wesentliche Rolle, weil immer davon ausgegangen werden kann, daß IP-Adressen mit der gleichen Netzadresse im lokalen Netz sind.

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:

Klasse A
  10.0.0.0
Klasse B
  172.16.0.0 bis 172.31.0.0
Klasse C
  192.168.0.0 bis 192.168.255.0

Wo immer lokale Netze ohne direkte Anbindung des ganzen Netzes ans Internet vorliegen, werden Adressen aus diesem Pool verwendet.

#### Spezielle Adressen

Die Adressen, deren Hostadressenbits alle auf 0 oder 1 gesetzt sind, haben eine Sonderbedeutung. Alle auf Null gesetzt meint das jeweilige Netz selbst, alle auf 1 gesetzt, meint alle angeschlossenen Hosts. Das ist die sogenannte Broadcast-Adresse. So bedeutet die Adresse 149.76.255.255 nicht eine bestimmte Adresse im Netz 149.76.0.0 sondern alle Rechner, die an diesem Netz hängen.

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...

#### Subnetze und die Netmask

Ein Teil der Host Adresse kann auch intern als Subnetzadresse gewertet werden um große Netze nochmal zu trennen. So kann also der Host mit der Nummer 12.4 im B--Klasse Netz 149.76 auch uminterpretiert werden, in den Host Nummer 4 im Subnetz 12 des Netzwerks 149.76. Welche Bits der 32 Bit Adresse als Netz- und welche als Hostadresse gewertet werden wird in der sogenannten Netzmaske festgelegt.

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.0

Wollen 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.0

Die 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.192

Statt 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 -> 11111111

Netzadressen und Broadcast errechnen sich nach der Regel

- Alle Bits der Hostadresse auf 0 ist die Netzadresse.
- Alle Bits der Hostadresse auf 1 ist die Broadcastadresse.

Nur daß eben die Hostadresse jetzt nur noch aus den letzten 6 Bits besteht.

### Die Transportschicht (TCP und UDP)

In der Transportschicht arbeiten zwei unterschiedliche Protokolle, TCP und UDP. Der wesentliche Unterschied zwischen beiden Protokollen ist, daß TCP verbindungsorientiert arbeitet und UDP verbindungslos.

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`).

#### User Datagram Protocol (UDP)

UDP ist ein sehr einfaches Protokoll, das Anwendungen die Möglichkeit bietet, direkten Zugriff auf die Datagramm-Services von IP zu nutzen. Das ermöglicht die Übermittlung von Daten mit einem Minimum an Protokollinformationen.

- Das UDP-Message Format

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.

#### Transmission Control Protocol (TCP)

TCP ist im Gegensatz zu UDP ein verbindungsorientiertes Protokoll, das Datenströme verarbeitet, die von der Anwendungsschicht kommen. TCP garantiert die Versendung von Daten durch eingebaute Handshake-Mechanismen.

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.

- Das TCP-Segment Format

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.

### Die Anwendungsschicht

Auf dieser Schicht laufen die Anwendungen, die übers Netz miteinander kommunizieren. In der Regel handelt es sich hier um Client/Server Paare, also um zwei verschiedene Programme, eins, das einen Dienst anbietet (server), ein anderes, das diesen Dienst in Anspruch nimmt (client).

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

### Programme in diesem Zusammenhang

Die geforderten Kenntnisse der ganz oben genannten Programme dient zunächst nur dafür, zu wissen, wozu welches Programm benutzt werden kann. Hier jeweils eine kurze Beschreibung über die Programme und ihre Anwendung:

#### ping

Das Programm ping benutzt das ICMP-Protokoll um herauszufinden, ob ein Rechner im Netz verfügbar ist. Dazu sendet es eine ICMP-Meldung (Typ 8) an den Zielrechner. Der Zielrechner gibt dann eine Kopie des Paketes mit dem Typ 0 (pong) zurück. Das wieder ankommende Paket wird auf die Standard-Ausgabe geschrieben. ping sendet ohne Unterlass weiter, bis es mit Strg-C abgebrochen wird.

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.com

sendet 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.

#### traceroute

Das Programm traceroute ermöglicht es, genau zu bestimmen, über welche Gateways ein Paket zu einem Zielrechner geroutet wird. Es schickt ein Paket an den nächsten Gateway (unsere default route), das das Lebensdauerfeld auf 0 gesetzt hat. Der Gateway schickt daraufhin eine ICMP-Fehlermeldung Typ 11 (`time-exceeded`) an uns zurück. Anschließend wird das selbe Paket mit einer Lebensdauer von 1 geschickt. Jetzt bleibt es beim nächsten Gateway hängen, auch der schickt eine ICMP-Typ 11 Fehlermeldung zurück. So wird die Lebensdauer jedesmal um eins erhöht und das Paket kommt so immer einen Gateway weiter. Aus den Fehlermeldungen der Gateways werden ihre IP-Adressen extrahiert und auf die Standard-Ausgabe geschrieben. Das Ganze wird solange wiederholt, bis der Zielrechner erreicht ist.

Der einzig nötige Parameter für traceroute ist der Name oder die IP-Adresse des Zielrechners.

#### host

Das Programm host wird benutzt, um Nameserverabfragen direkt von der Kommandozeile aus vorzunehmen. Es kann über sehr viele Kommandozeilenparameter genau eingestellt werden, wie und was gesucht werden soll. Der einzig notwendige Parameter ist der gesuchte Domainnamen. Die Antwort besteht in diesem Fall aus seiner IP-Adresse.

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, nslookup, nsquery

Auch diese Programme machen Nameserverabfragen. Sie unterscheiden sich in ihren Fähigkeiten und ihrer Anwendung. So bietet beispielsweise nslookup eine interaktive Abfrageshell. dig ist in der Lage auch komplexe Probleme zu lösen, so kann zum Beispiel die aktuelle Liste aller Root-Nameserver mit dem Befehl

      dig . ns

erfragt 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.

#### whois

whois sendet eine Nachfrage an eine RFC-812 Datenbank. In einer solchen Datenbank werden die Daten von Domaininhabern abgelegt. So kann mit whois herausgefunden werden, wer eine bestimmte Domain registriert hat, wer der Administrator davon ist usw. Die Menge der Ausgaben wird entweder durch die entsprechende Datenbank vorgegeben oder es wird über Kommandozeilenparameter genau angegeben, welche Information gesucht wird.

Im einfachsten Fall wird whois nur mit dem Parameter der Domain aufgerufen, über die Informationen erfragt werden sollen:

      whois lpi.org

gibt 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

      ...

#### ftp

Das File Transfer Protokoll dient zur Übertragung von Dateien über das Netzwerk. Es nutzt die TCP-Ports 21 (Kommandokanal) und 20 (Datenkanal) um über TCP/IP Dateien von einem Rechner zum anderen zu kopieren. Auch hier gibt es unter Unix Befehle (rcp), die besser auf das System abgestimmt sind, aber auch hier gilt, in heterogenen Netzen hat FTP den Vorteil.

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:

open Hostname
  Stellt eine Verbindung zum gewünschten Host her. Dabei wird ein Passwort abgefragt.
close
  Schließt eine bestehende Verbindung.
dir
  Zeigt das aktuelle Inhaltsverzeichnis.
cd Verzeichnis
  Wechselt in das angegebene Verzeichnis.
lcd Verzeichnis
  Wechselt das Verzeichnis auf der Client Seite (local change dir).
pwd
  Print Working Dir - gibt das aktuelle Verzeichnis an.
get Datei
  Kopiert eine Datei vom Server zum Client.
put Datei
  Kopiert eine Datei vom Client zum Server.
del Datei
  Löscht eine Datei auf dem Server.
binary
  Wechselt in den Binärmodus.
ascii
  Wechselt in den Textmodus.
quit
  Beendet FTP.

Moderne FTP-Clients wie Netscape oder xftp steuern diesen Vorgang über eine graphische Benutzeroberfläche, die den Umgang mit ftp stark vereinfacht.

Eine große Bedeutung im Internet hat anonymes FTP (ohne Username und Passwort), das als Möglichkeit verwendet wird, um Public-Domain-Software downzuloaden.

#### telnet

Telnet (Terminal EmuLation over NETwork) dient dazu, Zugriff auf einen, am Netz angeschlossenen Rechner in Form einer Terminalsitzung zu liefern. Auf Unix-Systemen läuft auf der Clientseite das Programm telnet, auf der Serverseite ein Daemon namens telnetd. Der Telnet-Service liegt auf dem TCP-Port 23.

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 Hostname

gestartet. 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, ...)