FTP - File Transfer Protocol

FTP ist ein Kommunikationsprotokoll, um Dateien zwischen zwei unterschiedlichen Computersystemen zu übertragen. Die Übertragung findet nach dem Client-Server-Prinzip statt. Ein FTP-Server stellt dem FTP-Client Dateien zur Verfügung. Der FTP-Client kann Dateien auf dem FTP-Server ablegen, löschen oder herunterladen. Mit einem komfortablen FTP-Client arbeitet man ähnlich, wie mit einem Dateimanager.

FTP gibt es seit 1971 und ist damit das älteste und solideste Protokoll des Internets. Seit 1985 hat sich praktisch nichts mehr an den Übertragungsmechanismen geändert.

Das File Transfer Protocol (FTP) im Schichtenmodell

Schicht Dienste / Protokolle / Anwendungen
Anwendung FTP HTTP DNS SNMP
Transport TCP UDP
Internet IP (IPv4 / IPv6)
Netzzugang Ethernet, ...

Wie funktioniert FTP?

FTP-Client und -Server-Prinzip
Die Kommunikation findet nach dem Client-Server-Prinzip statt. Zusätzlich erzeugt FTP zwischen Client und Server zwei logische Verbindungen. Die erste Verbindung ist der Steuerkanal (command channel) über den TCP-Port 21. Dieser Kanal dient ausschließlich zur Übertragung von FTP-Kommandos und deren Antworten. Die zweite Verbindung ist der Datenkanal (data channel) über den TCP-Port 20. Dieser Kanal dient ausschließlich zur Übertragung von Daten. Über den Steuerkanal tauschen Client und Server Kommandos aus, die eine Datenübertragung über den Datenkanal einleiten und beenden.
Der Steuerkanal wird vom FTP-Client aufgebaut. Steht der Steuerkanal wird der Datenkanal vom FTP-Server initiiert. Befindet sich der FTP-Client hinter einem NAT-Router oder einer Firewall kommt die Verbindung nicht zustande. Die Verbindungsanforderung vom Server an den Client wird von der Firewall bzw. dem Router abgeblockt. Für diesen Fall gibt es das passive FTP, bei dem der Client den Datenkanal initiiert.

FTP Active Mode / Aktives FTP

FTP Active Mode
Der FTP-Client kontaktiert den FTP-Server auf dem Port 21 (Command) und übermittelt die Port-Nummer, mit der der Server die Datenverbindung (Data) herstellen kann. Im Anschluss nimmt der FTP-Server auf diesem Port Kontakt mit dem FTP-Client auf. Die FTP-Verbindung ist hergestellt.

FTP Passive Mode / Passives FTP

FTP Passive Mode
Da ein FTP-Client in der Regel hinter einer Firewall sitzt, kommt die vom FTP-Server initiierte Datenverbindung (Data) nicht zustande. Die Firewall verhindert alle aktiven Verbindungen, die von außerhalb initiiert werden. Aus diesem Grund wurde der Passive Mode eingeführt. Damit können auch FTP-Clients, die hinter einer Firewall sitzen FTP-Verbindungen herstellen. Nach dem die Verbindung auf Port 21 des Servers aufgebaut ist, bekommt der FTP-Client eine Portnummer vom Server, auf der die Datenverbindung aufgebaut werden kann. Der FTP-Client kontaktiert den Server dann auf diesem Port. Weil der Client die Verbindung initiiert, verhindert die Firewall diese Verbindung nicht mehr. Im Passive Mode wird dann der Port 20 des FTP-Servers nicht gebraucht.

Video: Erklärung von aktivem und passivem FTP

FTP-Verbindung

Am Anfang jeder FTP-Verbindung steht die Authentifizierung des Benutzers. Danach erfolgt der Aufbau des Steuerkanals über Port 21 und des Datenkanals über Port 20. Wenn die Dateiübertragungen abgeschlossen sind, werden die Verbindungen vom Benutzer oder vom Server (Timeout) beendet.

Das FTP-Protokoll kennt zwei verschiedene Übertragungsmodi. Den ASCII-Modus und den Binary-Modus. Die beiden Modi unterscheiden sich in der Art der Codierung. Der ASCII-Modus wird zur Übertragung von reinen Text-Dateien verwendet. Hier muss die Zeilenstruktur des Textes umcodiert werden. Bei diesem Vorgang wird der Zeichensatz dieser Datei an das Zielsystem angepasst. Der Binary-Modus überträgt die Dateien byteweise ohne die Daten zu ändern. Dieser Modus wird am häufigsten genutzt. Vorzugsweise natürlich bei Binär-Dateien.
Die Fehlerkontrolle bei der Datenübertragung überlässt FTP komplett dem TCP-Protokoll. Kommt es doch zu einem Verbindungsabbruch, sieht die FTP-Spezifikation die Wiederaufnahme von unterbrochenen Übertragungen vor. Die Header der einzelnen Datenpakete enthalten Restart-Markierungen. Versucht der FTP-Client die Übertragung wieder aufzunehmen, gleichen Client und Server die Markierungen ab. Anschließend wird die Übertragung wieder aufgenommen.

Eine Besonderheit von FTP ist der frei Zugriff für alle Besucher: das Anonymous-FTP. Da das FTP-Protokoll Anmelde-orientiert arbeitet, kann der Besucher als Benutzername "anonymous" angeben und ein Passwort frei wählen. Zum guten Ton gehört die Verwendung einer gültigen E-Mail-Adresse.
Nach erfolgreicher Anmeldung kann der Besucher sich in der Verzeichnisstruktur frei bewegen. Im Regelfall ist das Löschen von Dateien nicht möglich. Der Upload von Dateien ist nur über ein spezielles, für den Besucher ständig leeres Verzeichnis möglich. Der Download ist innerhalb der restlichen Verzeichnisse jederzeit möglich.

FTP-Befehle

FTP-Befehle gibt es für das Senden, Empfangen, Löschen und umbenennen von Dateien, das Einrichten, Löschen und Wechseln von Verzeichnissen.
Die Kommunikation zwischen FTP-Client und FTP-Server findet als Austausch von textbasierten Kommandos statt. In der einfachsten Form ist der FTP-Client ein Terminal-Programm über das der Benutzer sich mit dem Server verständigt. Inzwischen verwendet man Programme, die ähnlich wie ein Dateimanager mehr Komfort bieten. Z. B. die Unterscheidung zwischen Text-Dateien und Binär-Dateien. Dazu gibt es zwei verschiedene Übertragungsmodi, die vor der Übertragung eingeleitet werden müssen. Gute FTP-Clients erkennen anhand der Datei-Endung den Datei-Typ und kümmern sich automatisch um die Einleitung des richtigen Übertragungsmodus.

Kommando Beschreibung
ABOR Vorhergehendes Kommando abbrechen
ACCT Benutzerkennung
ALLO Speicher für folgende Operation anfordern
APPE Hereinkommende Daten an eine existierende Datei anhängen
CDUP Wechsel zum Vatervereichnis
CWD Wechsel des Arbeitsverzeichnisses
DELE Datei löschen
HELP Hilfeinformationen ausgeben
LIST Verzeichnisliste übertragen
MKD Verzeichnis anlegen
MODE Übertragungsmodus festlegen
NLST Verzeichnisinhalt übertragen
NOOP Keine Operation
PASS Benutzerpasswort
PASV Passive FTP-Verbindung anfordern.
PORT Port Adresse
PWD Momentanes Verzeichnis zurückliefern
QUIT Verbindung beenden
REIN Verbindung beenden und neu starten
REST Transfer neu starten
RETR Datei vom Server kopieren
RMD Verzeichnis löschen
RNFR Alter Name für umzubenennende Datei
RNTO Neuer Name für umzubenennende Datei
SITE liefert Serverspezifische Informationen
SMNT ein Dateisystem mounten
STAT Status zurückliefern
STOR Datei zum Server kopieren
STOU Datei unter anderem Namen zum Server kopieren
STRU Dateistruktur
SYST Betriebssystem bestimmen
TYPE Typ der Daten
USER Benutzername

FTP-Status-Codes

Jeder, vom FTP-Client, gesendete Befehl führt zu einer Rückmeldung des FTP-Servers in Form eines Status-Codes und einer Meldung im Klartext.
Der Status-Code ist eine 3-stellige Nummer, die für den FTP-Client Informationen über die Verfügbarkeit der angeforderten Daten enthält. Z. B. wird über den Status-Code eine Fehlermeldung übermittelt.
Die Status-Codes sind in 5 Gruppen unterteilt, die über den HTTP-Response eine Grundaussage treffen.

Status-Codes Beschreibung
100-199 Die Status-Codes aus diesem Bereich weisen auf eine erfolgreiche Ausführung des Kommandos hin. Der Server erwartet aber vom Client die Fortführung durch einen weiteren Befehl.
200-299 Die Status-Codes aus diesem Bereich weisen auf eine erfolgreiche Ausführung des Kommandos hin.
300-399 Die Status-Codes aus diesem Bereich weisen auf eine erfolgreiche Ausführung des Kommandos hin. Der Server erwartet zur weiteren Ausführung weitere Angaben um die Bearbeitung abzuschließen.
400-499 Die Status-Codes aus diesem Bereich weisen auf die Nichtausführung des Kommandos hin. Es handelt sich aber um ein temporäres Problem. Eventuell wird bei erneuter Ausführung des Kommandos, die Bearbeitung erfolgreich abgeschlossen.
500-599 Die Status-Codes aus diesem Bereich weisen auf die Nichtausführung des Kommandos hin. Die erneute Ausführung würde zur selben Fehlermeldung führen.
Status-Code Meldung Englisch Meldung Deutsch
110 Restart marker reply Markierung für Wiederaufnahme der Übertragung
120 Service ready in x minutes Dienst steht in x Minuten zu Verfügung
125 Data connection already open; transfer starting Datenverbindung besteht bereits; beginne mit der Übertragung
150 File status okay; about to open data connection Dateistatus OK; Datenverbindung wird aufgebaut
200 Command okay Befehl OK
202 Command not implemented Befehl nicht implementiert
211   Antwort für Systemstatus oder Hilfefunktion des Systems
212   Verzeichnisstatus
213   Dateistatus
214   Meldung der Hilfefunktion
215 NAME system type Angabe des Systemtyps
220 Service ready for new user Dienst bereit für neuen Benutzer
221 Service closing control connection Steuerverbindung des Dienstes wird getrennt; Benutzer wird abgemeldet
225 Data connection open; no transfer in progress Datenverbindung hergestellt; derzeit keine Übertragung
226 Closing data connection. Requested file action successful Datenverbindung wird getrennt
227 Entering Passive Mode Passiver Modus aktiviert
230 User logged in, proceed Benutzer angemeldet, bitte fortfahren
250 Requested file action okay, completed Angeforderter Vorgang OK, beendet
257 "PATH" created "PFAD" wurde erstellt
331 User name okay, need password Benutzername OK, Kennwort erforderlich
332 Need account for login Benutzerkonto zur Anmeldung erforderlich
350 Requested file action pending further information Mehr Informationen für Dateivorgang erforderlich
421 Service not available, closing control connection Dienst nicht verfügbar, Steuerverbindung wird getrennt
425 Can't open data connection Datenverbindung kann nicht hergestellt werden
426 Connection closed; transfer aborted Verbindung getrennt; Übertragung abgebrochen
450 Requested file action not taken; File unavailable Angeforderter Dateivorgang wurde nicht ausgeführt; Datei nicht verfügbar
451 Requested action aborted: local error in processing Angeforderter Vorgang abgebrochen: Lokaler Fehler bei der Bearbeitung
452 Requested action not taken; Insufficient storage space in system Angeforderter Vorgang nicht ausgeführt; Nicht genügend Speicherplatz auf System
500 Syntax error Befehl nicht erkannt
501 Syntax error in parameters or arguments Syntaxfehler bei den Parametern
502 Command not implemented Befehl nicht implementiert
503 Bad sequence of commands Ungültige Befehlsabfolge
504 Command not implemented for that parameter Befehl für diesen Parameter nicht implementiert
530 Not logged in Nicht angemeldet
532 Need account for storing files Zum Speichern von Dateien Anmeldung erforderlich
550 Requested file action not taken; File unavailable Angeforderter Dateivorgang wurde nicht ausgeführt; Datei nicht verfügbar
551 Requested action aborted: page type unknown Angeforderter Vorgang abgebrochen: Unbekannter Seitentyp
552 Requested file action aborted: Exceeded storage allocation Angeforderter Dateivorgang abgebrochen: Nicht genügend Platz in aktuellem Verzeichnis oder Datensatz
553 Requested action not taken: File name not allowed Angeforderter Vorgang nicht ausgeführt: Unzulässiger Dateiname

Beispiel einer FTP-Sitzung

1: ~ Verbinde...
2: ~ Verbunden mit 212.227.84.222, warte auf Antwort...
3: < 220 FTP Server ready.
4: > USER beispiel
5: < 331 Password required for beispiel.
6: > PASS ********
7: < 230 User beispiel logged in.
8: > REST 1
9: < 350 Restarting at 1. Send STORE or RETRIEVE to initiate transfer
10: > REST 0
11: < 350 Restarting at 0. Send STORE or RETRIEVE to initiate transfer
12: > SYST
13: < 215 UNIX Type: L8
14: > PWD
15: < 257 "/" is current directory.
16: ~ Login erfolgreich.
17: > PORT 192,168,168,12,4,182
18: < 200 PORT command successful
19: > TYPE A
20: < 200 Type set to A
21: > LIST
22: < 150 Opening ASCII mode data connection for file list
23: < 226 Transfer complete.
24: > CWD sites
25: < 250 CWD command successful.
26: > PWD
27: < 257 "/sites" is current directory.
28: > PORT 192,168,168,12,4,183
29: < 200 PORT command successful
30: > TYPE A
31: < 200 Type set to A
32: > LIST
33: < 150 Opening ASCII mode data connection for file list
34: < 226 Transfer complete.
35: ~ Verbindung getrennt

Analyse der FTP-Sitzung

Die Analyse bezieht sich auf die oben dargestellte FTP-Sitzung. Die Aufzeichnung stellt den Login-Vorgang dar und das Wechseln in ein Unterverzeichnis. Danach loggt sich der Benutzer wieder aus.

  1. Verbindungsmeldung vom FTP-Client.
  2. Verbindungsmeldung vom FTP-Client.
  3. Der FTP-Server meldet mit dem Status-Code 220, dass die FTP-Verbindung hergestellt ist.
  4. Der FTP-Client teilt dem FTP-Server mit, welcher Benutzer sich anmelden will.
  5. Der FTP-Server fordert von diesem Benutzer das Passwort an.
  6. Der FTP-Client schickt dem FTP-Server das Passwort.
  7. Ist das Passwort richtig, meldet der FTP-Server dem Client den erfolgten Login (Status-Code 230).
  8. Der FTP-Client teilt dem FTP-Server mit, dass er den Datentransfer neu starten soll.
  9. Der FTP-Server meldet den Status-Code 350 zurück und erwartet weitere Angaben zur Ausführung des Befehls.
  10. Der FTP-Client teilt dem FTP-Server mit, dass er den Datentransfer neu starten soll.
  11. Der FTP-Server meldet den Status-Code 350 zurück und erwartet weitere Angaben zur Ausführung des Befehls.
  12. Mit dem Befehl SYST fragt der FTP-Client nach dem Betriebssystem auf dem der FTP-Server läuft.
  13. Der FTP-Server meldet das Betriebssystem zurück (Status-Code 215). In diesem Fall handelt es sich um ein UNIX-Betriebssystem.
  14. Mit dem Befehl PWD fordert der FTP-Client das aktuelle Verzeichnis an.
  15. Der FTP-Server meldet das aktuelle Verzeichnis (Status-Code 257). In diesem Fall lautet es "/".
  16. Verbindungsmeldung des FTP-Client, dass der Login erfolgreich war.
  17. Mit dem Befehl PORT teilt der Client dem Server mit, dass er den zweiten Port für den Datenkanal verwenden möchte.
  18. Der FTP-Server meldet die erfolgreiche Ausführung des Kommandos (Status-Code 200).
  19. Mit dem Befehl TYPE A setzt der FTP-Client die nachfolgende Datenübertragung auf den ASCII-Modus.
  20. Der FTP-Server meldet den Erfolg zurück (Status-Code 200).
  21. Mit dem Befehl LIST fordert der FTP-Client die aktuelle Verzeichnisliste an.
  22. Der FTP-Server meldet den Start der Datenübertragung (Status-Code 150).
  23. Der FTP-Server meldet das erfolgreiche Ende der Datenübertragung (Status-Code 226).
  24. Mit dem Befehl CWD wechselt der FTP-Client in das Verzeichnis "sites".
  25. Der FTP-Server meldet den Erfolg zurück (Status-Code 250).
  26. Mit dem Befehl PWD fordert der FTP-Client das aktuelle Verzeichnis an.
  27. Der FTP-Server meldet das aktuelle Verzeichnis (Status-Code 257). In diesem Fall lautet es "/".
  28. Mit dem Befehl PORT teilt der Client dem Server mit, dass er den zweiten Port für den Datenkanal verwenden möchte.
  29. Der FTP-Server meldet die erfolgreiche Ausführung des Kommandos (Status-Code 200).
  30. Mit dem Befehl TYPE A setzt der FTP-Client die nachfolgende Datenübertragung auf den ASCII-Modus.
  31. Der FTP-Server meldet den Erfolg zurück (Status-Code 200).
  32. Mit dem Befehl LIST fordert der FTP-Client die aktuelle Verzeichnisliste an.
  33. Der FTP-Server meldet den Start der Datenübertragung (Status-Code 150).
  34. Der FTP-Server meldet das erfolgreiche Ende der Datenübertragung (Status-Code 226).
  35. Verbindungsmeldung des FTP-Client, das die Verbindung getrennt wird.