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?
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
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
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.
- Verbindungsmeldung vom FTP-Client.
- Verbindungsmeldung vom FTP-Client.
- Der FTP-Server meldet mit dem Status-Code 220, dass die FTP-Verbindung hergestellt ist.
- Der FTP-Client teilt dem FTP-Server mit, welcher Benutzer sich anmelden will.
- Der FTP-Server fordert von diesem Benutzer das Passwort an.
- Der FTP-Client schickt dem FTP-Server das Passwort.
- Ist das Passwort richtig, meldet der FTP-Server dem Client den erfolgten Login (Status-Code 230).
- Der FTP-Client teilt dem FTP-Server mit, dass er den Datentransfer neu starten soll.
- Der FTP-Server meldet den Status-Code 350 zurück und erwartet weitere Angaben zur Ausführung des Befehls.
- Der FTP-Client teilt dem FTP-Server mit, dass er den Datentransfer neu starten soll.
- Der FTP-Server meldet den Status-Code 350 zurück und erwartet weitere Angaben zur Ausführung des Befehls.
- Mit dem Befehl SYST fragt der FTP-Client nach dem Betriebssystem auf dem der FTP-Server läuft.
- Der FTP-Server meldet das Betriebssystem zurück (Status-Code 215). In diesem Fall handelt es sich um ein UNIX-Betriebssystem.
- Mit dem Befehl PWD fordert der FTP-Client das aktuelle Verzeichnis an.
- Der FTP-Server meldet das aktuelle Verzeichnis (Status-Code 257). In diesem Fall lautet es "/".
- Verbindungsmeldung des FTP-Client, dass der Login erfolgreich war.
- Mit dem Befehl PORT teilt der Client dem Server mit, dass er den zweiten Port für den Datenkanal verwenden möchte.
- Der FTP-Server meldet die erfolgreiche Ausführung des Kommandos (Status-Code 200).
- Mit dem Befehl TYPE A setzt der FTP-Client die nachfolgende Datenübertragung auf den ASCII-Modus.
- Der FTP-Server meldet den Erfolg zurück (Status-Code 200).
- Mit dem Befehl LIST fordert der FTP-Client die aktuelle Verzeichnisliste an.
- Der FTP-Server meldet den Start der Datenübertragung (Status-Code 150).
- Der FTP-Server meldet das erfolgreiche Ende der Datenübertragung (Status-Code 226).
- Mit dem Befehl CWD wechselt der FTP-Client in das Verzeichnis "sites".
- Der FTP-Server meldet den Erfolg zurück (Status-Code 250).
- Mit dem Befehl PWD fordert der FTP-Client das aktuelle Verzeichnis an.
- Der FTP-Server meldet das aktuelle Verzeichnis (Status-Code 257). In diesem Fall lautet es "/".
- Mit dem Befehl PORT teilt der Client dem Server mit, dass er den zweiten Port für den Datenkanal verwenden möchte.
- Der FTP-Server meldet die erfolgreiche Ausführung des Kommandos (Status-Code 200).
- Mit dem Befehl TYPE A setzt der FTP-Client die nachfolgende Datenübertragung auf den ASCII-Modus.
- Der FTP-Server meldet den Erfolg zurück (Status-Code 200).
- Mit dem Befehl LIST fordert der FTP-Client die aktuelle Verzeichnisliste an.
- Der FTP-Server meldet den Start der Datenübertragung (Status-Code 150).
- Der FTP-Server meldet das erfolgreiche Ende der Datenübertragung (Status-Code 226).
- Verbindungsmeldung des FTP-Client, das die Verbindung getrennt wird.