Ich habe nie ganz verstanden, ob es möglich ist, eingehenden Datenverkehr mit einer Rate zu begrenzen . Mir ist klar, dass es keine direkte Methode gibt, mit der ich die Übertragungsrate des Remoteservers für Pakete steuern kann (es sei denn, Sie haben die Kontrolle über beide Endpunkte). Unter Berücksichtigung dieser Einschränkung kann ich mithilfe von Download-Managern jedoch erfolgreich Download-Geschwindigkeitsbeschränkungen festlegen ?
Gibt es eine Verbindung zwischen TCP-Zeitlupenstart und ratenbegrenztem eingehendem Datenverkehr? Ist es möglich, mit den von slow-start beschriebenen Methoden die Rate des Sendens von Paketen durch den Absender künstlich zu begrenzen?
Als zusätzliche Überlegung sollte beachtet werden, dass der Server, auf dem Traffic Shaping implementiert werden soll, die PPPoE-Verbindung selbst herstellt und als Router für den Rest des Netzwerks fungiert.
Update: Die bisherigen Antworten geben einen guten Überblick über die Fragen, die ich gestellt habe, aber ich weiß immer noch nicht, wie Download-Manager den eingehenden Datenverkehr begrenzen können und ob es möglich ist, eine ähnliche Strategie auf einem zu implementieren Linux-Gateway-Box.
quelle
Antworten:
Die Download-Manager arbeiten höchstwahrscheinlich wie im Trickle-Paper beschrieben .
Wenn Sie gelegentlich ein einzelnes Programm auf einem UNIX-System zeitlich beschränken müssen, ist eine einfache Lösung schwierig . Reales Traffic Shaping, wie Sie es an einem Gateway durchführen würden, kann mit durchgeführt werden
tc
. Dies ist in Kapitel 9 dokumentiert . Warteschlangendisziplinen für die Bandbreitenverwaltung des Linux Advanced Routing & Traffic Control HOWTO.quelle
Im Fall eines 56k-Modems im Vergleich zu einer 4 Mbit / s-DSl-Leitung gibt es (normalerweise) keine Formgebung, die den Geschwindigkeitsunterschied bewirkt, sondern lediglich einen Unterschied in der Geschwindigkeit der Verbindung.
Der Grund, warum es schwierig ist, den eingehenden Verkehr zu beeinflussen, ist, dass das Übertragungsmedium keinen Puffer enthält. Sie akzeptieren entweder die eingehenden Bits oder sie gehen verloren. Damit der Datenverkehr eine Schnittstelle verlässt, können Sie Pakete so oft puffern und neu anordnen, wie Sie möchten (oder zumindest bis zum verfügbaren Pufferspeicher im Gerät).
Für Protokolle, die eine Schicht über TCP haben (ich weiß nicht, ob dies bei Torrents der Fall ist), wäre es eine einfache Angelegenheit, Anfragen nach weiteren Daten zu steuern. Andernfalls müsste die Anwendung mit dem Betriebssystem kommunizieren, um das ACKing der Pakete zu verzögern. Die meisten UDP-basierten Protokolle verfügen zwangsläufig über eine ACK / Resend-Logik im app-spezifischen Protokoll, sodass es an diesem Punkt fast trivial ist, diese zu beschleunigen.
Ein möglicher Weg wäre, den Verkehr aus dem Internet auf der LAN-Seite Ihres DSL-Routers zu formen, da Sie zu diesem Zeitpunkt einen Ausgangsport formen würden.
quelle
Ich kann nicht antworten, warum Sie keine Lösungen gefunden haben, die es erlauben, eingehende Daten zu formen (und keine, die mir nicht bekannt sind), aber wie schnell der Absender Daten empfangen kann, weiß der Empfänger:
Das grundlegende Design von TCP / IP besteht darin, dass für jedes Paket, das die Quelle an das Ziel sendet, darauf gewartet werden muss, dass das Ziel (mit einem
ACK
Paket) antwortet , dass es das Paket empfangen hat.Wenn Sie also einen 4-Mbit / s-Absender und einen 56-Kbit / s-Empfänger haben, muss der Absender zwischen dem Senden von Paketen warten, damit der Empfänger auf jedes Paket antwortet Niveau).
Was passiert also, wenn der Absender bereits 56 KBit / s Daten sendet und dann versucht, etwas mehr zu senden?
Das Paket geht verloren. (Nun, möglicherweise im Puffer eines Switches in der Warteschlange, aber wenn sich dieser füllt, geht das Paket verloren.) Da das Paket verloren gegangen ist, empfängt der Empfänger es nie und sendet daher nie ein
ACK
Paket. Da der Absender diesesACK
Paket nie empfängt (weil es nie gesendet wurde, aber auch verloren gehen oder das Netzwerk unterbrochen werden könnte), muss der Absender das zusätzliche Paket erneut senden . Es sitzt und versucht, das Paket erneut zu senden, bis es durch ist und dieACK
Antwort darauf zurückkommt.Um es noch einmal zusammenzufassen: Sobald der Absender die Bandbreite des Empfängers ausgeschöpft hat, muss er das nächste Paket anhalten und erneut senden, bis genügend Bandbreite zur Verfügung steht, damit es durchkommt. Dadurch wird die Sendegeschwindigkeit effektiv auf das Maximum reduziert, mit dem der Client empfangen kann. (Und es gibt Optimierungsmethoden, um die Anzahl der erneuten Sendevorgänge eines Pakets in diesem Fall zu verringern. Dabei verlangsamt sich der Absender grundsätzlich jedes Mal, wenn ein Paket erneut gesendet werden muss. Dies würde jedoch den Rahmen dieser vereinfachten Beschreibung sprengen.
quelle
Sie können dies mit einer ifb-Schnittstelle tun.
Mit einer ifb-Schnittstelle können Sie den Eingangsfluss von eth0 (oder was auch immer) zum Ausgang in ifb0 leiten (zum Beispiel) und dort die Grenzwertregeln anwenden.
Überprüfen Sie diese URL der Linux Foundation: http://www.linuxfoundation.org/collaborate/workgroups/networking/ifb
Und diese Skripte, die den Zu- und Abgang von Banden beschränken: https://github.com/rfrail3/misc/blob/master/tc/traffic-control.sh
quelle
Schauen Sie sich wondershaper an: http://lartc.org/wondershaper/
In Bezug auf eingehenden Verkehr:
quelle
benutze UFW (Uncomplicated Fire Wall) http://ubuntuforums.org/showthread.php?t=1260812
Dieser Thread zeigt ein einfaches Beispiel, bei dem standardmäßig IPs mit 6 Treffern innerhalb von 30 Sekunden verweigert werden:
sudo ufw limit ssh/tcp
Auch ein "erweiterter" Befehl mit festgelegten Werten für Zeit und Trefferzahl
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
quelle