-
Notifications
You must be signed in to change notification settings - Fork 0
RFC959_FTP_deutsch_erweitert
(inoffizielle, technische Übersetzung – Original: RFC 959, Public Domain)
Diese Version richtet sich explizit an:
- Kernel- / OS-Entwicklung
- freestanding C (CKernel)
- eigene TCP/IP-Stacks
- Emulatoren / Lernimplementierungen
Hinweis: Fokus liegt auf korrektem Protokollverhalten, nicht auf Benutzerkomfort.
FTP verwendet zwei getrennte TCP-Verbindungen:
-
Steuerverbindung (control connection)
- Port: 21/TCP
- persistent
- ASCII-basiert (CRLF)
-
Datenverbindung (data connection)
- Port 20/TCP (aktiv) oder dynamisch (passiv)
- kurzlebig
- binär oder ASCII
+------------+
| DISCONNECTED |
+------------+
|
| TCP connect :21
v
+------------+
| CONNECTED |
+------------+
|
| USER/PASS
v
+------------+
| AUTHENTICATED |
+------------+
|
| RETR / STOR / LIST
v
+------------+
| TRANSFER |
+------------+
|
| 226 / error
v
+------------+
| AUTHENTICATED |
+------------+
Kernel-Hinweis: Zustandsautomat strikt einhalten, sonst Protokollverletzung.
| Code | Bedeutung (Deutsch) | Englisch |
|---|---|---|
| 110 | Wiederstart-Markierung | Restart marker reply |
| 120 | Dienst bereit in n Minuten | Service ready in n minutes |
| 125 | Datenverbindung offen, Übertragung startet | Data connection open |
| 150 | Datei-Status OK, öffne Datenverbindung | File status okay |
| Code | Bedeutung (Deutsch) | Englisch |
|---|---|---|
| 200 | Kommando OK | Command okay |
| 202 | Kommando nicht implementiert | Command not implemented |
| 211 | Systemstatus | System status |
| 212 | Verzeichnisstatus | Directory status |
| 213 | Dateistatus | File status |
| 214 | Hilfe-Meldung | Help message |
| 215 | Systemtyp | NAME system type |
| 220 | Dienst bereit | Service ready |
| 221 | Verbindung wird geschlossen | Service closing control connection |
| 225 | Datenverbindung offen, keine Übertragung | Data connection open |
| 226 | Übertragung abgeschlossen | Closing data connection |
| 227 | Passiver Modus | Entering Passive Mode |
| 230 | Benutzer angemeldet | User logged in |
| 250 | Aktion abgeschlossen | Requested file action okay |
| 257 | Pfadname erstellt | Pathname created |
| Code | Bedeutung (Deutsch) | Englisch |
|---|---|---|
| 331 | Benutzername OK, Passwort erforderlich | User name okay |
| 332 | Account erforderlich | Need account |
| 350 | Weitere Information nötig | Requested file action pending |
| Code | Bedeutung (Deutsch) | Englisch |
|---|---|---|
| 421 | Dienst nicht verfügbar | Service not available |
| 425 | Keine Datenverbindung | Can't open data connection |
| 426 | Verbindung abgebrochen | Connection closed |
| 450 | Aktion nicht ausgeführt | Requested file action not taken |
| 451 | Lokaler Fehler | Local error |
| 452 | Unzureichender Speicher | Insufficient storage |
| Code | Bedeutung (Deutsch) | Englisch |
|---|---|---|
| 500 | Syntaxfehler | Syntax error |
| 501 | Syntaxfehler Parameter | Syntax error in parameters |
| 502 | Kommando nicht implementiert | Command not implemented |
| 503 | Falsche Befehlsreihenfolge | Bad sequence of commands |
| 504 | Parameter nicht implementiert | Command not implemented |
| 530 | Nicht angemeldet | Not logged in |
| 532 | Account erforderlich | Need account |
| 550 | Datei nicht verfügbar | File unavailable |
| 551 | Aktion abgebrochen | Requested action aborted |
| 552 | Speicherlimit erreicht | Exceeded storage allocation |
| 553 | Ungültiger Dateiname | File name not allowed |
- ASCII-only
- Zeilenende:
\r\n - Maximale Zeilenlänge: 512 Bytes inkl. CRLF
#define FTP_MAX_LINE 512Kernel-Hinweis: Niemals dynamisch allozieren im Netzwerkpfad.
Empfohlenes Schema:
typedef enum {
FTP_CMD_USER,
FTP_CMD_PASS,
FTP_CMD_RETR,
FTP_CMD_STOR,
FTP_CMD_QUIT,
FTP_CMD_UNKNOWN
} ftp_cmd_t;Lookup via Stringvergleich (case-insensitive).
if (session->state < FTP_STATE_AUTHENTICATED) {
ftp_reply(530); // Not logged in
return;
}Wichtig: RFC-konforme Fehlercodes verwenden, kein generisches „ERROR“.
Active Mode (PORT):
- Server verbindet sich zum Client
- Problematisch hinter NAT
Passive Mode (PASV):
- Server öffnet Port
- Client verbindet sich
Kernel-Hinweis: PASV ist einfacher und sicherer zu implementieren.
+------ USER ------+
| |
v |
+---------+ +--------+
| CONNECT | -----> | AUTH |
+---------+ +--------+
| |
| QUIT | RETR/STOR
v v
+---------+ +----------+
| CLOSE | <----- | TRANSFER |
+---------+ +----------+
- Klartext-Passwörter
- Keine Integrität
- Keine Verschlüsselung
Empfehlung: Für moderne Systeme:
- FTPS (TLS)
- oder SFTP (SSH, kein FTP)
✔ Einfacher Protokollaufbau
✔ Gut dokumentierter Zustandsautomat
✘ Unsicher
✘ Firewall-problematisch
Ideal für Lernzwecke, Debugging, frühe OS-Stacks.
(Ende – Erweiterte deutsche technische Fassung von RFC 959)
(c) 2025 by Jens Kallup - paule32.