Socket-Programmierung: Sie einige ISPs verhängen geschwindigkeitsbestimmend auf dem FTP-Upload?

StackOverflow https://stackoverflow.com/questions/150886

  •  02-07-2019
  •  | 
  •  

Frage

Ich versuche zur Zeit eines Kunden Problem mit einer FTP-Upload-Funktion in einem unsere Produkte zu debuggen. Mit dieser Funktion können Kunden Dateien (<1 MB) an einen zentralen FTP-Server für die Weiterverarbeitung laden. Der FTP-Client-Code wurde in-house in VB.NET geschrieben.

Der Kunde meldet, dass sie „Verbindung erzwungen durch Remote-Host“ Fehler erhalten, wenn sie versuchen, Dateien im Bereich von 300 KB bis 500 KB hochladen. Allerdings testeten wir dies im Hause mit vielen größeren Dateien (relativ gesehen), das heißt 3MB und auf und erhielten nie diesen Fehler. Wir hochgeladen auf den gleichen FTP-Server, der Client eine Verbindung mit den gleichen FTP-Anmeldeinformationen zu verwenden, der einzige Unterschied ist, dass wir es von unserem Büro haben.

Ich weiß, dass das TCP-Protokoll Flow-Control hat eingebaut, so dass es sollte keine Rolle spielen, wie viele Daten in einem einzigen Sendeaufruf gesendet wird, da das Protokoll selbst entsprechend drosseln wird dem Server des internen Grenzen übereinstimmen (wenn ich mich richtig erinnere ...)

Daher ist das einzige, was ich denken kann, ist, dass ein Zwischenwirt zwischen dem Client und dem Router künstlich geschwindigkeitsbestimmend ist, den Client und es trennt (wir die Dateidaten in einer Schleife in 512-Byte-Blöcken senden).

Dies ist die Schleife, die verwendet wird, um die Daten zu senden (Puffer ist ein Byte-Array der Dateidaten enthält):

            For i = 0 To buffer.Length - 1 Step 512
                mDataSocket.Send(buffer, i, 512, SocketFlags.None)
                OnTransferStatus(i, buffer.Length)
            Next

Ist es möglich, dass die Kunden ISP (oder ihre eigene Firewall) wird zur Einführung einer künstlichen Rate-Limit, wie viele Daten unserer Client-Code innerhalb einer bestimmten Zeit senden kann? Wenn ja, was ist der beste Weg, um diese Situation zu handhaben? Ich denke, die offensichtliche Lösung wäre eine Verzögerung in unserem Sendeschleife einzuführen, es sei denn, es gibt einen Weg dies auf Socket-Ebene zu tun.

Es scheint mir wirklich seltsam, dass ein ISP durch die Tötung der Client-Verbindung eine Rate-Grenzwertverletzung behandeln würde. Warum würden sie nicht verlassen, nur auf TCP / IP-internen Ablaufsteuerung / Drosselmechanismus?

War es hilfreich?

Lösung

Starten Sie eine Suche nach Comcast und BitTorrent. Hier ein Artikel .

Andere Tipps

Versuchen Sie, das Problem zu isolieren:

  • Lassen Sie den Kunden die gleiche Datei auf einem anderen Server hochladen. Vielleicht ist das Problem mit dem ... FTP-Client des Kunden.
  • Rufen Sie die Datei vom Client und laden Sie es sich mit Ihrem Kunden und sehen, ob Sie das Problem repro kann.

Am Ende, auch wenn eine 3MB Datei funktioniert gut, eine 500 KB-Datei wird nicht garantiert, weil die Frage zustandsabhängige sein könnte und geschieht, während die Dateiübertragung zu beenden.

Ja, ISPs können Grenzen Pakete verhängen Gutdünken (obwohl es ethisch fragwürdig ist). Mein ISP zum Beispiel hat kein Problem beim Schneiden jeden P2P-Verkehrs seiner Hardware erschnüffeln verwaltet. Seine genannt Traffic-Shaping .

Doch für FTP-Datenverkehr ist dies sehr unlikelly, aber man weiß ja nie. Die Sache ist, sie fallen nie Ihre Steckdosen mit Traffic Shaping, sie nur Pakete. Das TCP-Protokoll ist auf jeder Birne Seite behandelt, so dass Sie alle Pakete dazwischen fallen kann und die Buchse am Leben hält. In einigen Fällen, wenn einer der Computer abstürzt, bleibt die Buchse am Leben, wenn Sie nicht versuchen, es zu benutzen.

Ich glaube, Sie beste Wette eine schlechte Firewall / Proxy-Konfiguration auf der Client-Seite ist. Bessere Erklärungen hier .

Entweder das, oder eine fehlerhafte oder schlecht Router oder Kabel auf den Client-Installationen konfiguriert.

500k ist awefully in diesen Tagen klein, also würde ich ein wenig überrascht, wenn sie etwas, das kleine drosseln.

Ich weiß, dass Sie bereits Ihre Anfrage Chunking, aber können Sie bestimmen, ob Daten übertragen? Hat nicht der Code immer an dem gleichen Loop-Punkt? Sind Sie in der Lage an den FTP-Server-Logs zu suchen? Was ist mit einem gesamten Stack-Trace? Haben Sie versucht, den ISP kontaktieren und fragen sie, welche Politik sie haben?

Das heißt, unter der Annahme, dass einige Daten macht es durch, ein Gedanke ist, dass der ISP Traffic Shaping hat und die Regeln greifen, nachdem x Bytes geschrieben worden sind. Was könnte geschehen auf Daten> x das Socket-Timeout abläuft, bevor die Daten gesendet werden, eine Ausnahme zu werfen.

Beachten Sie FTP-Clients erstellen Sie einen anderen Anschluss für die Datenübertragung, aber wenn der Server die Steuerverbindung erkennt geschlossen ist, wird in der Regel die Datenübertragungsverbindung töten. So eine andere Sache zu prüfen, die Steuerverbindung sicherzustellen, noch am Leben ist.

Schließlich, FTP-Server in der Regel fortsetzbar Transfers unterstützen, so dass, wenn alle anderen Mittel des fehlschlagen, die ausgefallene Übertragung wieder aufnehmen könnte die einfachste Lösung sein.

Ich denke nicht, das ISP würde versuchen, eine 500 KB Dateiübertragung zu töten. Im keinen Experten in entweder Buchse Dingen oder auf ISPs ... nur in der Sache, meine Gedanken zu geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top