Wie funktioniert ein Download-Geschwindigkeitsbegrenzer in einem Büro in TCP / IP-Begriffen?

8

Angenommen, ein Büro von Personen möchte HTTP-Downloads auf maximal 40% der Bandbreite ihrer Internetverbindungsgeschwindigkeit beschränken, damit kein anderer Datenverkehr blockiert wird.

Wir sagen "es wird in Ihrer Firewall nicht unterstützt" und sie sagen die unvermeidliche Zeile "Früher konnten wir dies mit unserem Netgear / DLink / DrayTek tun".

Wenn man darüber nachdenkt, ist ein Download wie folgt:

HTTP GET request
Server sends file data as TCP packets
Client acknowledges receipt of TCP packets
Repeat until download finished.

Die Geschwindigkeit hängt davon ab, wie schnell der Server Daten an Sie sendet und wie schnell Sie diese bestätigen.

Um die Download-Geschwindigkeit zu begrenzen, haben Sie zwei Möglichkeiten:

1) Weisen Sie den Server an, Daten langsamer an Sie zu senden - und ich glaube, es gibt keine Protokollfunktion, die dies in TCP oder HTTP anfordert.

2) Bestätigen Sie Pakete langsamer, indem Sie die Upload-Geschwindigkeit begrenzen und die Upload-Geschwindigkeit verringern.

Wie machen Geräte diese Einschränkung? Gibt es einen Standardweg?

TessellatingHeckler
quelle
Die Begrenzung der Geschwindigkeit, mit der empfangene Pakete aus der Firewall in das LAN gelangen, führt zu langsameren Bestätigungen, und die Überlastungsbehandlung im TCP-Stack des sendenden Servers drosselt die Sendegeschwindigkeit. Vielen Dank. Ich kann es mit tessting so zum Laufen bringen. Ich habe mehrere Antworten positiv bewertet, kann aber nur eine als Antwort markieren.
TessellatingHeckler

Antworten:

11

TCP selbst implementiert die Überlastungskontrolle.

Diese Ratenbegrenzer werfen einfach Pakete über das Limit hinaus. TCP kümmert sich darum und stellt sicher, dass alle Pakete in der richtigen Reihenfolge ankommen. Der Client bestätigt die verworfenen Pakete nicht und sie werden vom Server erneut gesendet.

Der TCP-Stack des Servers sendet die Pakete erneut und wählt auch die Senderate ein wenig zurück, da er feststellt, dass zwischen ihm und dem Client eine Überlastung besteht. Es wird wieder schneller, bis der Ratenbegrenzer wieder Pakete verwirft, und so weiter.

Shane Madden
quelle
Daher sollte ich eine QoS-Richtlinienrate anwenden, die begrenzt, wie schnell die Firewall HTTP-Verkehr auf der / LAN / -Schnittstelle ausspuckt. Und dann lassen Sie TCP einfach damit umgehen. "Es wird auch ein bisschen zurück auf seine Sendegeschwindigkeit wählen" ist ein weiterer Teil, den ich vermisst habe.
TessellatingHeckler
2
Ja, das ist richtig. Der Server könnte einfach weiterhin Daten auf Ihren Link werfen und diese sättigen, bevor die QoS angewendet wurde. Solange es sich jedoch um einen guten TCP-Bürger handelt, stellt seine Senderate ein ungefähres Gleichgewicht mit der Rate her, mit der seine Daten tatsächlich durch den Link gelangen Ratenbegrenzung.
Shane Madden
Ja, TCP implementiert eine eigene Überlastungskontrolle, die jedoch nicht unbedingt so effektiv ist. Jeder, der Erfahrung mit Torrents hat, weiß das. Grundsätzlich fallen die meisten Implementierungen der TCP-Überlastungskontrolle aus, wenn Hunderte von aktiven Verbindungen im Netzwerk vorhanden sind.
user606723
1
@ user606723 Wenn Torrents ein Problem darstellen, sollten Sie an Ihrem Ausgang einen Paket-Shaper verwenden, um diesen Datenverkehr zu verwerfen. Dadurch wird der Torrenter vom Tracker abgeschnitten und andere Personen, die denselben Torrent herunterladen, können Ihren Eingang nicht mit Verbindungen überfluten. Problem gelöst.
MDMarra
1
@ user606723 Warum ja, die Überlastungskontrolle wird einen harten Kampf haben, wenn Tausende von Verbindungen mit schnell startendem TCP ständig initiiert werden, da neue Verbindungen nichts über den Status der Verbindung wissen, die sie aufbauen. Hunderte von aktiven Verbindungen? Vielleicht wird das eine langsame Heimverbindung blockieren.
Shane Madden
5

Die beste Beschreibung, die ich je gehört habe und die Sinn für die inhärente Drosselungsmethode von TCP machte, stammt aus einem kürzlich veröffentlichten Security Now-Podcast . Um Steve Gibson zu zitieren:

Da TCP dieses sehr clevere Protokoll ist, führt es nach allgemeiner Vereinbarung einen sogenannten "langsamen Start" durch. Es wird im Allgemeinen die Erlaubnis erteilt, eine bestimmte Anzahl von Paketen ohne Bestätigung zu senden. Die Idee ist also, dass wir hier einfach etwas bewegen. Und normalerweise ist diese Zahl zwei. Wenn TCP gestartet wird, können zwei Pakete nacheinander gesendet werden. Ohne dass der erste bestätigt wird, wird der zweite gesendet. Aber dann wartet es. Und dann lautet die Regel für die Drosselung, dass wir die Anzahl der nicht bestätigten Pakete für jede Bestätigung, die wir erhalten, um eins erhöhen können.

Denken wir also darüber nach. Wir erlauben, dass die Anzahl der nicht bestätigten Pakete für jede Bestätigung, die wir erhalten, um eins erhöht wird. Also senden wir zuerst zwei Pakete als vereinbarten Start ab. Sie werden anerkannt. Wir haben also unsere erste Bestätigung. Wir erlaubten uns, zwei zu schicken. Mit dem Erhalt dieser ersten Bestätigung erhöhen wir diese um eins bis drei. So können wir jetzt drei weitere Pakete ohne weitere Bestätigung versenden. Wenn eine Bestätigung für das, was wir zuvor gesendet haben, zurückkommt, erhöhen wir diese auf vier. Dies ist als "Überlastungsfenster" bekannt. Es ist kein Fenster, das jemals in der Leitung gesendet wurde, das heißt, es ist nicht wie das Empfangsfenster, das 16 Bit des TCP-Headers enthält und angibt, wie viele Daten wir voraussenden können. Dieser ist - es ist ein Fenster. Es'

Wenn wir die Anzahl der nicht bestätigten Pakete, die wir senden dürfen, jedes Mal, wenn wir eine Bestätigung erhalten, um eins erhöhen, werden wir irgendwann ein Limit erreichen. Und das Schöne an diesem System ist, dass wir, wenn wir versuchen, Pakete schneller als das schwächste Glied zu senden, buchstäblich eine Verbindung zwischen Routern herstellen, irgendwann den Punkt finden, an dem das schwächste Glied unterbrochen wird. Es löscht die Pakete, die wir senden möchten, weil wir versuchen, sie zu schnell zu senden. Bestätigungen vom anderen Ende hören also auf, weil die Daten nicht mehr durchkommen.

Und was TCP tut, ist, wenn es nicht empfangen wurde - und dies variiert in den Strategien. Im Laufe der Zeit hat sich die Strategie, die tatsächliche Strategie zur Vermeidung von Überlastungen, stark verändert. Es gibt Namen wie Tahoe und Reno und eine ganze Reihe anderer, die Sie sehen werden, wenn Sie googeln und Wikipediaing betreiben, die genau angeben, wie sich das Verhalten verhält. Die Idee ist jedoch, dass der Absender seine Sendegeschwindigkeit schnell senkt, wenn er feststellt, dass seine Daten nicht mehr eingehen, weil ihm Bestätigungen fehlen. Normalerweise teilt es es in zwei Hälften. Es verkleinert es also dramatisch und erhöht es dann wieder.

Dies bedeutet im Wesentlichen, dass der Verlust von Paketen die Signalisierungsfunktion für "Wir können die Daten nicht schneller senden" ist und dass die TCP-Absender an jedem Ende einer Verbindung im gesamten Internet immer sozusagen "sie" sind. Sie versuchen, schneller als die maximale Geschwindigkeit zu fahren, die zwischen den beiden Endpunkten verfügbar ist, dh das schwächste Glied, wo immer dies ist, und sie schieben es immer an die Grenze. Angesichts der Tatsache, dass es irgendwo einen Punkt gibt, der schwächer ist als ihre Fähigkeit, Pakete zu senden, werden sie ihn finden, weil sie Pakete herauspumpen werden. Solange Daten gesendet werden müssen und eine Verbindung mit hoher Bandbreite besteht, erhöht der Absender die Sendegeschwindigkeit, dh die Anzahl der ausstehenden Pakete, die Pakete, die als Bestätigungen im laufenden Betrieb verfügbar sein dürfen Komm zurück, bewegt diese Zahl aggressiv weiter nach oben, bis sie zu weit gedrückt wird. Dann zieht es sich viel zurück und bewegt sich dann wieder vorwärts.

Das ist es also, was tatsächlich zwischen TCP-Verbindungen passiert, bei denen ich wahrscheinlich nicht weiß, wie viel Prozent, aber der weitaus größte Prozentsatz des Datenverkehrs im Internet erfolgt über TCP-Verbindungen. Alle unsere Betriebssysteme im Kernel, im sogenannten TCP-Stack, haben diese Zähler. Und wenn wir eine Datei senden, wenn wir eine große Datei hochladen oder eine Webseite erhalten, macht der Server am anderen Ende dasselbe. Es werden auf individueller Verbindungsbasis so viele Pakete wie möglich gepusht, die noch nicht bestätigt wurden, und die Paketrate erhöht, bis sie den Punkt erreicht, an dem sie zu versagen oder zu stottern beginnen. Dann zieht es sich zurück, um die Wiederherstellung zu ermöglichen, und beginnt dann wieder mit der Arbeit.

Und das ist eine Art Selbstdrosselsystem, das angesichts der Einschränkungen, ich meine, wirklich irgendwie funky und grob wirkt. "

Driftbauer
quelle
3

Um die Download-Geschwindigkeit zu begrenzen, haben Sie zwei Möglichkeiten:

1) Weisen Sie den Server an, Daten langsamer an Sie zu senden - und ich glaube, es gibt keine Protokollfunktion, die dies in TCP oder HTTP anfordert.

2) Bestätigen Sie Pakete langsamer, indem Sie die Upload-Geschwindigkeit begrenzen und die Upload-Geschwindigkeit verringern.

3) Ihr Router / Firewall-Gerät speichert eingehende Daten in einem QoS-Bucket und leert diesen Bucket nur mit der von Ihnen angeforderten Rate. Eingehende Daten passen sich dieser Geschwindigkeit an, da Computer im Inneren den Empfang nur mit dieser Geschwindigkeit bestätigen. Außerdem funktioniert das gelegentlich (absichtlich) verworfene Paket sehr gut, um eine Verbindung zu verlangsamen.

Wenn Sie versuchen, ein Gerät zu finden, das dies handhabt, suchen Sie in der Konfiguration / Dokumentation nach QoS (Quality of Service). Hierfür eignen sich auch Linux- (oder BSD-) Boxen.

Jeff Ferland
quelle
Das macht fast Sinn - also besteht die Technik darin, die Bestätigungsrate zu begrenzen und dies zu tun, indem Sie dem LAN-Gerät so tun, als würde der Server langsamer senden als er wirklich ist? Es wird also zuerst einen Burst geben, der die Verbindung füllt, dann nicht danach?
TessellatingHeckler
1
@TessellatingHeckler Ja, das war's. Außerdem sollte der "Burst" kein sehr großer Burst mit freundlicher Genehmigung von en.wikipedia.org/wiki/Slow-start sein .
Jeff Ferland
2

Sie verwenden eine Firewall oder ein Gerät, das die QoS-Begrenzung (Quality of Service) unterstützt.

Sie können ein Linux-System als Office-Gateway erstellen und dazu Traffic Shaping verwenden. Es müssen nur mehrere Netzwerkkarten installiert werden, und dann zeigt jeder Computer auf ein Gateway.

Als Bonus können Sie einen Proxyserver darauf konfigurieren, um den Datenverkehr zu vereinfachen. So etwas wie Tintenfisch. Möglicherweise gibt es schlüsselfertige Routing-Appliance-Distributionen, die dies ebenfalls können.

Bart Silverstrim
quelle
Wie hilft QoS? Zu dem Zeitpunkt, an dem Ihr Gerät QoS auf einen Download anwenden kann, ist der eingehende Datenverkehr bereits über die Internetverbindung eingetroffen und hat ihn möglicherweise blockiert. QoS kann auf ausgehenden Verkehr angewendet werden, kann jedoch nichts gegen eingehenden Verkehr tun, da es zu spät ist, wenn der Verkehr angezeigt wird.
TessellatingHeckler
3
Es kann den Verkehr dort formen, wo Sie ihn steuern können. Es gibt keine Möglichkeit, einen Remote-Server anzuweisen, die Geschwindigkeit, mit der Sie die Daten abrufen, zu begrenzen, aber Sie können sie an Ihrem Eingangspunkt verringern. Andernfalls müssten Sie mit Ihrem Provider über die Gestaltung des Datenverkehrs in seinem Netzwerk zu Ihrem Feed sprechen.
Bart Silverstrim
Auch der Proxyserver kann dazu beitragen, eine Überlastung zu vermeiden. Andernfalls müssen Sie es am Eingangspunkt formen.
Bart Silverstrim
Meine ursprüngliche Frage war: Es sieht so aus, als könnten Sie sich am Eingangspunkt nicht formen, da jede Kontrolle, die Sie anwenden können, erfolgt, nachdem der Verkehr den Engpass durchlaufen hat. Wie geht eine Menge Technologie damit um? "QoS anwenden, z. B. unter Linux" und "Traffic Shaping verwenden" sind praktisch praktisch, aber ich habe nach einer Erklärung gesucht, wie dies möglicherweise helfen kann. (und jetzt haben einige in anderen Antworten).
TessellatingHeckler
@TessellatingHeckler: Die Methode , die Ich mag ermöglicht auch die Verwendung von ECN , die tatsächlich funktioniert dem sendende Server ohne Abwurf Pakete zu verlangsamen sagen. Bei dieser Methode wird der Ratenbegrenzer wie ROT auf Pakete angewendet, die auf der LAN-Schnittstelle verbleiben , anstatt zu versuchen, einen Eingangsfilter auf der WAN-Schnittstelle zu verwenden.
Zan Lynx
2

Das HTTP-Protokoll bietet keine Möglichkeit, die verwendete Bandbreite zu begrenzen, und selbst wenn dies der Fall wäre, wäre dies eine clientseitige Einstellung, auf die Netzwerkadministratoren keine Kontrolle haben könnten.

Die Bandbreitenbegrenzung (auch als "Quality of Service" bezeichnet) wird normalerweise auf Routern / Firewalls verwaltet, die den gesamten eingehenden und ausgehenden Verkehr zu / von einem Netzwerk verarbeiten. Mit denen, die dies unterstützen, können Sie normalerweise Richtlinien konfigurieren, z. B. "Jeder einzelne Client-Computer darf höchstens 10% der gesamten verfügbaren Bandbreite nutzen" oder "SMTP-Priorität vor FTP geben, damit E-Mails auch dann fließen können, wenn jemand einen starken Download ausführt." ".

Wie genau dies erreicht wird, hängt vom verwendeten Router / der verwendeten Firewall ab. Der einfachste Weg besteht jedoch darin, Pakete einfach wegzuwerfen, die die konfigurierten Grenzwerte überschreiten. TCP stellt sicher, dass sie erneut übertragen werden, und kann schließlich den Engpass überwinden.

Massimo
quelle