Skip to content

RFC959_FTP_deutsch_erweitert

paule32 edited this page Dec 20, 2025 · 1 revision

RFC 959 – File Transfer Protocol (FTP)

Erweiterte deutsche Übersetzung mit Antwortcodes, Kernel-Notizen und ASCII-Diagrammen

(inoffizielle, technische Übersetzung – Original: RFC 959, Public Domain)


0. Zielgruppe & Kontext

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.


1. Grundarchitektur (Architecture Overview)

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

2. Sitzungs-Zustände (Session States)

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


3. Vollständige FTP-Antwortcodes (Reply Codes)

1xx – Positive vorläufige Antworten

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

2xx – Positive Abschlussantworten

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

3xx – Positive Zwischenantworten

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

4xx – Temporäre Fehler

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

5xx – Permanente Fehler

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

4. Kernel-Implementationsnotizen (C / freestanding)

4.1 Parser für Steuerverbindung

  • ASCII-only
  • Zeilenende: \r\n
  • Maximale Zeilenlänge: 512 Bytes inkl. CRLF
#define FTP_MAX_LINE 512

Kernel-Hinweis: Niemals dynamisch allozieren im Netzwerkpfad.


4.2 Kommando-Dispatcher

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


4.3 Zustandsprüfung

if (session->state < FTP_STATE_AUTHENTICATED) {
    ftp_reply(530); // Not logged in
    return;
}

Wichtig: RFC-konforme Fehlercodes verwenden, kein generisches „ERROR“.


4.4 Datenverbindung (Active / Passive)

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.


5. Minimaler FTP-Server-Zustandsautomat (ASCII)

        +------ USER ------+
        |                  |
        v                  |
   +---------+         +--------+
   | CONNECT | ----->  | AUTH   |
   +---------+         +--------+
        |                  |
        | QUIT             | RETR/STOR
        v                  v
   +---------+         +----------+
   |  CLOSE  | <-----  | TRANSFER |
   +---------+         +----------+

6. Sicherheitsbetrachtung (Security)

  • Klartext-Passwörter
  • Keine Integrität
  • Keine Verschlüsselung

Empfehlung: Für moderne Systeme:

  • FTPS (TLS)
  • oder SFTP (SSH, kein FTP)

7. Fazit für Kernel-Projekte

✔ 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)

Clone this wiki locally