Welches ist unter FTP, HTTP, SSH usw. die schnellste Methode zur Übertragung von Dateien über ein Netzwerk, wenn eine konstante Breitband-Internetverbindung vorhanden ist?
Antworten
Zu viele Anzeigen?Unter diesen 3 ist HTTP. Der effektive Akt der "Übertragung der Datei" hat die gleiche Geschwindigkeit, aber:
FTP erfordert zu viel "Konversation", um eine Sitzung zu stabilisieren, und stellt parallele Verbindungen her, um Daten zu übertragen; all dieses "Reden" braucht etwas mehr Zeit, um mit der Übertragung von Dateien zu beginnen. Aus dem gleichen Grund kann es zu Problemen mit Firewalls und Routern kommen, weil FTP zufällige Ports öffnet, insbesondere wenn der FTP-Client den "passiven Modus" nicht unterstützt.
HTTP ist objektiver: Sie stellen eine Verbindung her, sagen, was Sie wollen, und erhalten es als Antwort. Kein Bla bla bla bla.
SSH ist kein Übertragungsprotokoll. SSH steht für "Secure Shell". Wenn Sie SSL meinen, ist es ebenfalls kein Übertragungsprotokoll, sondern eine Sicherheitsschicht, die üblicherweise zur Verkapselung von HTTP-Sitzungen verwendet wird.
Aber vielleicht geht es gar nicht darum, was schneller ist, die eigentliche Frage ist: Was wollen Sie tun? Je nach Ihrem Problem kommt vielleicht keine dieser Optionen in Frage.
Verwenden Sie Socket.SendFile(), wenn Sie können. Das ist der einfachste Weg, eine Datei von Punkt A nach Punkt B zu bringen. Ohne zu wissen, was Sie genau erreichen wollen, ist es wirklich schwer, eine bessere Empfehlung zu geben. FTP ist wahrscheinlich das, was ich sonst verwenden würde, und System.Net hat ein ziemlich gutes FtpClient-Objekt, das Sie verwenden können, und die Beispiele dokumentieren es ziemlich gut. HTTP und FTP verwenden beide TCP, so dass Sie wahrscheinlich keinen signifikanten Geschwindigkeitsunterschied zwischen ihnen sehen werden, und HTTP hat normalerweise Header mit anderem potenziellen Verhalten (versuchen Sie, eine Datei mit Expect-100 Continue und ohne Anmeldeinformationen auf einen Server hochzuladen, der AUTH erfordert, und sehen Sie, was mit Ihren Verbindungen passiert). Mit Socket.SendFile(), da Sockets per Definition protokollunabhängig sind, könnten Sie möglicherweise die Datei über UDP oder TCP mit demselben Code senden, aber ich würde das nur empfehlen, wenn Sie über ein LAN senden, wo der Paketverlust praktisch 0 ist. UDP über das Internet ist keine gute Idee.
Haben Sie die Kontrolle über beide Endpunkte und alle dazwischen liegenden Firewalls? FTP ist weniger Firewall-freundlich als die anderen Optionen. SSH-basierte Tools (sftp, scp) sind ziemlich gut, aber einige ISPs sind dafür bekannt, verschlüsselten Datenverkehr zu drosseln oder anderweitig zu stören (Comcast, ich schaue Sie an!). Haben Sie rsync in Betracht gezogen? Bei meiner Arbeit benutzen wir das, um große Datenmengen über lange Internetverbindungen zu übertragen.