Im passiven FTP-Modus habe ich gelesen, dass der Server eine zufällige Portnummer an den Client sendet, wo er einen Datenkanal einrichten kann.
Anschließend erstellt der Client einen Datenkanal von seiner zufälligen Portnummer zu dieser vom Server gesendeten Portnummer.
Meine Frage ist, warum der Server eine zufällige Portnummer an den Client sendet. Warum kann der Client auf der Serverseite keinen Datenkanal direkt zu Port 20 einrichten?
Antworten:
So wurde das FTP-Protokoll für den passiven Modus entwickelt. Es war wahrscheinlich keine gute Idee, da ich nicht glaube, dass dieses Modell jemals in einem anderen Protokoll wiederholt wurde (und das gilt umso mehr für den aktiven FTP-Modus).
Am Datenverbindungsport gibt es kein Protokoll. Alles, was der Server weiß - das einzige, was Informationen in dieser Verbindung enthält - ist die Portnummer, mit der Sie eine Verbindung herstellen.
Wenn Sie jedes Mal eine Verbindung zu demselben Port herstellen, kann der Server nicht erkennen, für welche Datei Sie eine Verbindung herstellen. Die Portnummer dient als Verbindung zwischen einer Übertragungsanforderung an der Steuerverbindung und einer Datenverbindung - die Portnummer ist in der Antwort auf den
PASV
Befehl enthalten.Wenn zwei Clients gleichzeitig eine Übertragung anfordern und der Server eine Verbindung an einem einzelnen Port akzeptiert, kann der Server nicht erkennen, welche Datei übertragen werden soll. Natürlich könnte der Server eine Client-IP für die Entscheidung verwenden (tatsächlich überprüfen viele FTP-Server aus Sicherheitsgründen, ob die Client-IP mit der auf der Steuerverbindung verwendeten IP übereinstimmt).
Aber das würde nicht funktionieren für:
Teilweise kopiert von meiner Antwort auf Warum erfordert der passive FTP-Modus einen Portbereich im Gegensatz zu nur einem Port? bei Serverfehler.
quelle
Normalerweise sendet der Server keinen zufälligen Port, sondern einen freien aus einem definierten (nach Installation) Bereich / Pool - für den Client sieht dies zufällig aus. Dieser Port muss an die Firewall weitergeleitet werden, für die ein Bereich definiert werden muss.
Leider ist FTP uralt. Ich denke, die alten Server konnten die Datensitzungen mehrerer Clients nur nach Port unterscheiden. Im Allgemeinen ist es besser, auf aktuellere Protokolle umzusteigen, bei denen alles in einer einzigen Socket-Sitzung ordentlich verpackt ist.
quelle