Eine sehr gute Erklärung für das Problem liefert das ProFTPD-Projekt :
Berücksichtigen Sie, was bei FTP-Übertragungen geschieht, die sehr lange dauern (entweder aufgrund sehr großer übertragener Dateien oder einer langsamen Verbindung): Sie haben eine TCP-Verbindung für die Steuerverbindung und eine separate TCP-Verbindung für die Datenübertragungsverbindung . Alle Bytes werden über die Datenverbindung übertragen, so dass die Datenverbindung sicherlich nicht inaktiv ist - aber während die Datenübertragung stattfindet, ist die Steuerverbindung inaktiv! Nehmen wir an, dass Ihre FTP-Verbindungen zwischen Client und Server über ein NAT-Gerät laufen.
Dass NAT möglicherweise nicht sehr intelligent ist; Möglicherweise wissen Sie nicht, dass die beiden verschiedenen TCP-Verbindungen Ihrer FTP-Sitzung miteinander zusammenhängen. Es wird nur eine untätige TCP-Verbindung und eine besetzte TCP-Verbindung angezeigt. Wenn diese FTP-Steuerverbindung zu lange im Leerlauf ist, kann sie vom NAT geschlossen werden (um wertvollen Speicherplatz in den Statustabellen für TCP-Verbindungen verfügbar zu halten, die tatsächlich Bytes übertragen müssen). (Es ist bekannt, dass einige NATs TCP-Verbindungen schließen, die nur 5 Minuten inaktiv waren.) Der FTP-Server erkennt, dass die FTP-Steuerverbindung geschlossen ist, und bricht die Datenübertragung ab. Was für ein Chaos!
Wenn der FTP-Server oder der FTP-Client TCP-Keepalives für die Steuerungsverbindung verwendet hatte, hätte dieses NAT möglicherweise die TCP-Keepalive-Tests erkannt und die Leerlauf-Kontrollverbindung nicht geschlossen.
Das ProFTPD-Projekt ist ein vollwertiger FTP-Server, der TCP-Keepalives vom Server selbst unterstützt.
Auf der Clientseite können Clients konfiguriert werden, um die TCP-Verbindung zum Server aufrechtzuerhalten, z. B. Filezilla.
Von Unix Stack Exchange :
Hier gibt es keine absolute Antwort, da das FTP-Protokoll selbst keinen solchen Mechanismus enthält.
Es gibt jedoch FTP-Protokollbefehle ohne wirkliche Bedeutungen in einer bestimmten Situation wie "NOOP", "LIST" oder "CWD", mit denen die FTP-Verbindung am Leben erhalten werden kann.
Es liegt also am Client selbst, einen solchen Mechanismus mit diesen "bedeutungslosen" Befehlen zu implementieren, um die Timeout-Timer auf der Serverseite zurückzusetzen. Natürlich müssen Sie diesen clientseitigen Mechanismus möglicherweise auch anpassen, um den Wert für die maximale Leerlaufzeit auf der Serverseite anzupassen.
Um Ihnen ein Beispiel zu geben, implementiert der bekannte Filezilla einen solchen Mechanismus (siehe Menüeintrag "Bearbeiten" -> "Einstellungen", dann unter "Verbindung" -> Registerkarte "FTP"):