6.3 FTP

6.3.1. Architektur und Protokoll

FTP (File Transfer Protocol) stellt den Internet-Standard für die Übertragung von Files von einem Internet-Host zu einem anderen dar. Dies ist nicht mit dem entfernten Zugriff auf Files (wie z.B. über das Netzwerk-Filesystem NFS) zu verwechseln, der durch FTP nicht unterstützt wird. Die grundlegende Verwendung von FTP sollten Sie bereits kennen. In diesem Abschnitt geht es daher um seine interne Arbeitsweise.

Wie Sie sehen, verwendet FTP zwei TCP-Verbindungen für die Fileübertragung (die Richtung der Verbindungsaufnahme ist jeweils rot dargestellt):

  1. Steuerverbindung (control connection)

    Als erstes baut der Klient diese Verbindung zum Server auf, der in der Regel über den well-known FTP-Port 21 erreichbar ist. Sie bleibt die gesamte Sitzungszeit erhalten und dient dem Klienten zum Senden von Kommandos an den Server und dem Server zum Senden von Antworten auf diese Kommandos.

  2. Datenverbindung (data connection)

    Die Datenverbindung wird meist für jede Datenübertragung neu aufgebaut und nach deren Beendigung wieder abgebaut. Bei den Daten kann es sich entweder um Files oder das Ergebnis von Kommandos (beispielsweise ein Directory-Listing) handeln.

    Anmerkung:

    Die Datenverbindung ist eine normale TCP-Verbindung. Die darüber transferierten Daten unterliegen seitens FTP keinerlei Fehlerkontrolle. FTP verläßt sich bezüglich der Erkennung und Behebung von Übertragungsfehlern voll auf die entsprechenden Mechanismen von TCP und den von ihm zur Verfügung gestellten zuverlässigen Bytestrom.

    Beachten Sie, daß die durch TCP realisierte Fehlerbehandlung keinen Schutz vor zielgerichteten Manipulationen eines Angreifers bietet. Wer also die Integrität, Authentizität und ggf. auch die Vertraulichkeit der per FTP übertragenen Dateien sicherstellen will, muß hierfür durch die Anwendung geeigneter kryptographischer Verfahren selbst sorgen (z.B., indem man die Dateien mittels PGP verschlüsselt und digital signiert). Im Kapitel 8 werden wir uns ausführlich mit Fragen der Netzwerk-Sicherheit beschäftigen.

Natürlich arbeitet der Nutzer in der Regel nicht direkt mit den Kommandos und Antworten, die über die Steuerverbindung ausgetauscht werden. Diese Aufgabe wird von dem Protokoll-Interpreter (Klientenseite) bzw. dem Protokoll-Interface (Serverseite) übernommen. Das Nutzer-Interface setzt auf den Protokoll-Interpreter auf und kann von einer einfachen Kommandozeile (mit Nutzerkommandos, die den Kommandos auf der Steuerverbindung ähneln) bis hin zur grafischen Benutzerschnittstelle reichen. Zusätzlich werden die Antworten des Servers durch das Nutzer-Interface in einer entsprechenden Darstellung aufbereitet.

FTP-Kommandos auf der Steuerverbindung

Für die Kommandos auf der Steuerverbindung wird der ASCII-Zeichensatz des NVT (Network Virtual Terminal) verwendet, d.h., jede Zeile ist mit der Zeichenfolge CR, LF abzuschließen. Jedes der reichlich 30 Kommandos besteht aus 3 oder 4 großen ASCII-Zeichen, gefolgt von optionalen Parametern, wobei nicht immer alle Kommandos implementiert sind. Einige dieser Kommandos werden Sie im FTP-Praktikum näher kennenlernen.

Nachfolgend wollen wir ausgewählte Kommandos kurz beschreiben:

FTP-Antworten auf der Steuerverbindung

Die Antworten (Replies) bestehen aus einer dreistelligen ASCII-Zahl mit einem wahlweise folgenden Text. Die Zahl ist für die weiterverarbeitende Software (Nutzer-Interface) und der Text als zusätzliche Nutzerinformation bestimmt. Die meisten FTP-Klienten geben allerdings beide Informationen aus. Die folgende Tabelle zeigt die Bedeutung der ersten beiden Stellen des Reply-Codes:

Reply-Code Beschreibung
1-- Positive Preliminary reply: Die angewiesene Aktion wurde begonnen, aber vor einem neuen Kommando ist auf eine weitere Antwort zu warten.
2-- Positive Completion reply: Die angewiesene Aktion wurde erfolgreich beendet, ein neues Kommando darf gesendet werden.
3-- Positive Intermediate reply: Das Kommando wurde akzeptiert, allerdings werden zu seiner Ausführung zusätzliche Informationen benötigt, die der Klient in einem weiteren Kommando senden sollte.
4-- Transient Negative Completion reply: Das Kommando wurde zurückgewiesen, und die damit verbundene Aktion wurde nicht ausgeführt. Die Fehlerbedingung ist allerdings temporär, so daß das zu einem späteren Zeitpunkt wiederholte Kommando möglichwerweise akzeptiert und erfolgreich ausgeführt werden kann.
5-- Permanent Negative Completion reply: Das Kommando wurde nicht akzeptiert und sollte wegen einer permanenten Fehlerbedingung nicht wiederholt werden.
-0- Syntax: signalisiert z.B. Syntaxfehler, nicht implementierte oder überflüssige Kommandos.
-1- Information: Antworten auf Anforderungen von Informationen, z.B. durch STAT und HELP.
-2- Connections: Antworten, die sich auf die Daten- oder Steuerverbindung beziehen.
-3- Authentication and accounting: Antworten für den Login-Vorgang, d.h. die Authentifizierung gegenüber dem Server durch Angabe von Nutzerkennzeichen und Paßwort, sowie das Accounting.
-4- Unspecified
-5- File system: Angaben zum Status des Dateisystems beim Server.
Verbindungs-Management

Eine Datenverbindung wird aus einem der folgenden drei Gründe aufgebaut:

  1. Übertragung eines Files vom Klienten zum Server
  2. Übertragung eines Files vom Server zum Klienten
  3. Übertragung eines Directory-Listings vom Server zum Klienten
Der Punkt 3, die Übertragung eines Directory-Listings über die Datenverbindung, müßte uns doch etwas verwundern - dazu ist doch eigentlich die Steuerverbindung gedacht. Auf der Datenverbindung existieren jedoch keinerlei Beschränkungen hinsichtlich der Größe des Listings (Zeilenlänge, Zeilenanzahl). Gleichzeitig ist es dem Klienten auf einfache Weise möglich, die Ausgaben in ein File umzuleiten.

Wie wir bereits gesehen haben, bleibt die Steuerverbindung über die gesamte Sitzungszeit erhalten, die Datenverbindung wird dagegen für jede Übertragung aufgebaut und danach wieder abgebaut. Dies ist nach der Protokoll-Beschreibung nicht zwingend, wird aber z.B. von den typischen UNIX-Implementierungen so gehandhabt. Das Schließen der Datenverbindung signalisiert das Ende der aktuell übertragenen Datei. Ein Filetransfer umfaßt dabei folgende Schritte:

  1. Die Erzeugung der Datenverbindung befindet sich unter der Kontrolle des Klienten, da dieser ein Kommando sendet, das den Aufbau der Datenverbindung erfordert (z.B. ein File vom Server holen).

  2. Der Klient wählt einen freien Port als das klientenseitige Ende der Datenverbindung aus und führt ein Passive Open durch. Dies bedeutet, daß der Klient auf den Aufbau der Verbindung zu diesem Port durch den Server (Active Open) wartet.

  3. Der Klient sendet die zu verwendende Portnummer mittels des PORT-Kommandos an den Server.

  4. Der Server empfängt über die Steuerverbindung die Portnummer und führt ein Active Open zu diesem Port der Klientenmaschine aus. Als serverseitiges Ende der Datenverbindung wird stets der Port 20 verwendet.
Im folgenden Bild ist dies für den Schritt 3 dargestellt, d.h., der Klient hat einen freien Port (1071) für die Datenverbindung ausgewählt, teilt dies nun dem Server mittels des PORT-Kommandos mit (Portnummer: 4 × 256 + 47 = 1071, IP-Adresse: 134.109.192.162) und wartet am Port 1071 (Passive Open) auf den Verbindungsaufbau seitens des Servers:

Der Server hat nun das PORT-Kommando empfangen und baut daraufhin eine TCP-Datenverbindung (Active Open) zum Klienten an dessen Port 1071 auf:

Wir haben gesehen, daß auf der Klientenseite sowohl für die Steuerverbindung als auch jede neue Datenverbindung stets neue Portnummern verwendet werden. Ein FTP-Server nutzt dagegen immer dieselben Portnummern (21 und 20), kann aber dennoch gleichzeitig Verbindungen zu vielen Klienten unterhalten, von denen mehrere oder alle auf ein und demselben Rechner ablaufen können. Sofern die Klienten unter einem Multitasking-Betriebssystem ausgeführt werden, können auch mehrere von ihnen gleichzeitig mit demselben Server kommunizieren.

Die übertragenen Daten (Kommandos, Antworten, Dateiinhalte etc.) geraten dabei nicht durcheinander, da bekanntlich jede TCP-Verbindung durch das aus den IP-Adressen und den Portnummern beider Kommunikationspartner bestehende Quadrupel eindeutig bestimmt ist, das im vorliegenden Fall folgende Elemente enthält:

Die Socket-API gestattet den Applikationen eine sehr einfache Unterscheidung der von ihnen unterhaltenen TCP-Verbindungen, da jeder Verbindung eindeutig ein Socket zugeordnet wird. Die korrekte Trennung der verschiedenen Datenströme erfolgt dabei durch die TCP-Implementierung.

Für den Fall identischer IP-Adressen der Klienten (beispielsweise hat ein Nutzer mehrere FTP-Sitzungen zum selben Server offen) stellt das Betriebssystem sicher, daß keine Portnummer doppelt vergeben wird und somit eine Unterscheidung der TCP-Verbindungen möglich ist.

Sonderfunktionen


Vertiefung:

Eine genaue Spezifikation des FTP-Protokolls einschließlich aller Sonderfunktionen finden Sie im

In bestimmten Situationen wird zur reinen Fileübertragung statt FTP das TFTP (Trivial File Transfer Protocol; RFC 783) verwendet. Wie der Name schon vermuten läßt, handelt es sich hierbei um ein sehr einfaches, leichtgewichtiges Protokoll. Es basiert auf UDP (User Datagram Protocol) und stellt als einzige Funktionalität die Übertragung von Files zwischen Klient und Server zur Verfügung (kein Directory-Listing, keine Benutzerauthentifizierung). Der Grund dafür ist, daß dieses Protokoll zum Booten von plattenlosen Workstations eingesetzt wird und die TFTP-Implementation daher im Boot-ROM untergebracht werden muß.

Jede Übertragung beginnt mit der Anforderung, ein File zu lesen oder zu schreiben, wodurch implizit auch eine TFTP-Verbindung angefordert wird. Wenn der Server den Wunsch des Klienten akzeptiert, so wird das File in Blöcken zu 512 Byte übertragen. Jedes dieser Datenpakete muß durch die Gegenseite bestätigt werden, bevor ein neues Paket gesendet werden darf (Stop-and-Wait-Protokoll). Das Fileende wird durch ein Datenpaket gekennzeichnet, das weniger als 512 Byte enthält. Die offizielle Spezifikation des TFTP ist im

enthalten.


© Uwe Hübner, Heino Gutschmidt, Holger Trapp, 24.2.1999