Zusammenfassung

  • Der experimentelle RFC 1545 vom November 1993 schlug LPRT und LPSV vor: FTP sollte die Familie einer Datenadresse sowie Länge von Hostadresse und Port ausdrücklich übermitteln. Der bisherige PORT-Befehl verwendete sechs Dezimal-Oktette, vier für den Host und zwei für den Port.
  • Antwort 228 meldete langen Passivmodus; 521 trennte eine verstandene Langadress-Anfrage von einer nicht unterstützten Adressfamilie. RFC 1639 ersetzte die Erstfassung im Juni 1994 und präzisierte andere Netzwerkfamilien und Transport-Schnittstellen.

Die Datei passte, die Adresse nicht

FTP führt zwei Gespräche. Über die Steuerverbindung werden Befehle und Antworten ausgetauscht. Eine gesonderte Datenverbindung trägt die Datei oder das Verzeichnis. Im RFC 959 bezeichnet PORT die Anschrift für diese zweite Verbindung. Die Schreibweise war ein kleines, festes Formular: h1,h2,h3,h4,p1,p2. Vier Oktette bildeten die 32-Bit-Internetadresse des Hosts, zwei Oktette den 16-Bit-TCP-Port. Jedes Oktett erschien als Dezimalzahl, Kommas trennten die Felder. Für IPv4 über TCP war das eine handliche Visitenkarte.

Die Visitenkarte war nur so flexibel wie ihre sechs Zeilen. Zu Beginn der 1990er Jahre wurden mehrere Möglichkeiten für das nächste Internetprotokoll geprüft. Manche Adressen konnten länger oder variabel lang sein. Auch ein Transportselektor musste nicht ewig auf sechzehn Bit beschränkt bleiben. Selbst wenn eine Netzarchitektur ein neues Ziel kannte, musste FTP dieses Ziel im Steuerdialog an den Partner übergeben. Genau dort steckte die frühere Architektur in der Anwendung fest.

Im November 1993 erschien David Piscitellos experimenteller RFC 1545: FTP Operation Over Big Address Records, kurz FOOBAR. Ein Name wie ein Platzhalter aus dem Labor, aber eine genaue Anweisung für die Leitung. LPRT begann mit dem Kennwert einer Adressfamilie. Danach folgten die Länge der Hostadresse, die Hostadresse selbst, die Länge der Portadresse und schließlich die Portadresse. Alle Werte wurden als vorzeichenlose dezimale Oktette mit Kommas gesendet. Der Empfänger musste die Grenzen nun nicht mehr aus „vier plus zwei“ erraten; der Befehl lieferte einen eigenen Maßstab.

Für den Passivmodus gab es LPSV. Der Server sollte auf einer Datenadresse lauschen und mit 228 Entering Long Passive Mode antworten. In dieser Antwort standen Familie, Längen, Hostadresse und Port. Nur die vom Client gelieferte Adresse zu vergrößern hätte wenig geholfen, wenn die Gegenrichtung weiterhin in das alte Formular gepresst worden wäre. FOOBAR erweiterte die Sprache beider Seiten des Datenkanals.

Die Antwort 521 war ein kleines, aber wichtiges Unterscheidungsmerkmal. Ein Server konnte LPRT oder LPSV verstehen und doch die verlangte Adressfamilie nicht beherrschen. Er gab dann die Familien an, mit denen er arbeiten konnte. Syntaxfehler behielten die vorhandenen Codes 500 und 501. Eine falsch gebaute Nachricht und eine verständliche Nachricht mit unbekanntem Netztyp waren damit zwei verschiedene Fälle. Die Wahl einer gemeinsamen Familie wurde möglich, weil der Partner seine Fähigkeiten offenlegte.

Die im Text genannten Familien zeigen einen Moment offener Optionen: IP, ST Datagram Mode, SIP, TP/IX, PIP und TUBA. Piscitello sah zudem einen Grund, die Portlänge mitzuschicken. TP/IX erwog längere Transportselektoren. Wer nur die Hostadresse vergrößerte, hätte beim nächsten Schritt am festen TCP-Portfeld angeklopft. RFC 1545 ließ sogar verschiedene Familien für Steuer- und Datenverbindung zu. Der Übergang zum nächsten Netz konnte aus gemischten Teilen bestehen, statt auf ein einziges Umschaltdatum zu warten.

Der Vorschlag wurde zügig überarbeitet. RFC 1639 erklärte RFC 1545 im Juni 1994 für obsolet. Die Werte 0 bis 15 blieben IP-bezogenen Versionsnummern vorbehalten; 16 bis 255 waren für andere von IANA zugewiesene Netzwerkschichtprotokolle verfügbar. Novell IPX stand bei 16. Die Revision erwähnte auch ausdrücklich FTP über Transport-Schnittstellen jenseits von TCP. Aus dem Ausweg für eine größere IP-Adresse wurde ein Adressbuch mit mehreren Alphabeten.

Die eigentliche historische Pointe steht in PORT h1,h2,h3,h4,p1,p2. In dieser unscheinbaren Syntax stecken zwei Annahmen: 32 Bit für den Host, 16 Bit für den Port. Eine neue Internetarchitektur hätte sie nicht automatisch aus dem Programm entfernt. FOOBAR schrieb Familie und Länge ins Protokoll und gab dem Gegenüber eine Antwortmöglichkeit. Bei einem Netzumbau können sechs alte Kästchen mehr Widerstand leisten als ein ganzer Stapel Zukunftspläne.