Wie wird die Bandbreite auf einer Linux-Netzwerkschnittstelle gedrosselt?

Antworten:

32

Das von iproute gesteuerte Netem- Kernel-Modul.

Sie müssen Netem mit dem Kernel kompilieren:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Sobald das Netem-Modul geladen ist, können Sie mit iproute's tc folgende Dinge tun:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50% Paketverlust, zusätzliche Verzögerung von 50 ms)

bortzmeyer
quelle
Ja, dies ist in der Tat ein sehr gutes Modul für diese Dinge. Ich kann nicht glauben, dass bis jetzt niemand darauf geantwortet hat ...
Ich benutze dies zum Testen von Servern vor Ort (auf localhost), da es seit Jahren in allen Distributionen Standard ist. Zum Hinzufügen einer Verzögerung von 20 ms "tc qdisc add dev lo root handle 1: 0 netem delay 20 ms" und zum Entfernen von "tc qdisc del dev lo root"
pixelbeat 30.08.09
1
Kurzer Hinweis: Das Kernelmodul ist sch_netem. Im Allgemeinen muss es nicht manuell geladen werden, sondern wird bei Bedarf automatisch geladen.
Sleske
Hier ist der Arbeitslink linuxfoundation.org/collaborate/workgroups/networking/netem
Lee Chee Kiam
Meine Version von netem (Ubuntu 13.10) hat auch die Möglichkeit , die Bandbreite mit der begrenzen rateOption: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Beachten Sie, dass für einige Geräte wie lo(für den Zugriff auf localhost), müssen Sie auch die Warteschlangenlänge einzustellen: ifconfig lo txqueuelen 1000. Siehe serverfault.com/a/394949/76090
z0r 20.11.13
27

Client-Seite, richtig?

rieseln sollte machen was du willst. Wenn Sie Ubuntu (oder Debian, glaube ich) sudo apt-get install trickleausführen , können Sie es mit installieren und dann ausführen. trickle -s -d 10 -u 10 firefox(oder so, ich habe es eine Weile nicht mehr benutzt) würde Firefox ausführen und die Download- und Upload-Geschwindigkeit auf 10 Kilobyte pro Sekunde begrenzen.

Bernard
quelle
Danke für diesen Tipp. Aus irgendeinem Grund würde Rinnsal mit Firefox nicht funktionieren, aber mit Google-Chrome hat es einwandfrei funktioniert. (Ubuntu 9.10 64bit)
Tom
6
Erhaltungsarbeiten durch Abfangen von Aufrufen zum Verknüpfen von Standardbibliotheksfunktionen für TCP-Übertragungen - Wenn in einer App diese Funktionen zur Kompilierungszeit statisch verknüpft sind, kann dies nicht funktionieren.
David Spillett
16

Ich habe einen Weg gefunden, um zu verhindern, dass meine Box die gesamte im Netzwerk verfügbare Bandbreite mit einem Tool namens "Wondershaper" in Ubuntu aufnimmt. Ich hoffe, es gibt es auch in anderen Linux-Destros. Ich kann die Bandbreite, die mein Linux-Heimcomputer verbrauchen kann, mit dem folgenden Befehl begrenzen.

sudo wondershaper eth0 1000 200

Dies begrenzt das Download-Limit auf 1000 Kilobits und das Uplaod auf 200 Kilobits. Weitere Informationen / Optionen finden Sie auf den Manpages von wondershaper.

Harry
quelle
1
Dies ist nicht ganz das, wonach das OP sucht (es geht darum, die Bandbreite zu schonen und die Verbindung nicht absichtlich zu beeinträchtigen), aber dennoch gut zu wissen.
sleske
1
Übrigens: Es ist ein Paket wondershaperin Debian.
sleske
Diesmal hatten wir im Büro Probleme mit der Bandbreitensättigung, es gab ein Backing, das ich nicht unterbrechen konnte, und ich konnte dies in zwei einfachen Zeilen beheben: # apt-get install wondershaper then # wondershaper eth0 9999999 500 Nochmals vielen Dank!
Orange80
4
wondershaper scheint allerdings einige mathematische Probleme zu haben. Um einen Up / Down-Pfad von 1 MBit / s zu erreichen, haben wir 28096 anstelle von 1024 verwendet. Keine Ahnung, warum dies passiert ist.
boatcoder
Zum Zurücksetzen verwenden Sie:sudo wondershaper clear eth0
Léo Lam
8

NIST erstellt einen Netzwerksimulator namens NistNet.

http://snad.ncsl.nist.gov/nistnet/ (Link scheint tot)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

Mit NistNet können Sie einen Router erstellen, der eine Kommunikationsverbindung Ihrer Wahl emuliert.

Für den einfachsten Betrieb haben Sie es auf einer Box mit zwei Netzwerkkarten zwischen zwei Netzwerken.

Zum Beispiel hatte ich eine Anwendung, die über eine Satellitenverbindung funktionieren musste.

Daten können über eine 2-Mbit / s-Verbindung mit hoher Latenz übertragen werden. Die Steuerung musste über eine 128-Kbit / s-Verbindung mit derselben Latenz erfolgen.

NistNet hat dazu beigetragen, dass alles mit 128 KBit / s funktioniert.

Mit NistNet konnte ich nicht nur die Bandbreite, sondern auch die Latenz simulieren, und es werden auch Pakete für Sie verworfen, die eine ausgelastete oder unzuverlässige Verbindung simulieren.

Wenn Sie eine beliebige Verbindung simulieren möchten, beschränken Sie nicht nur die Bandbreite, sondern verlängern Sie auch die Latenz.

Vergessen Sie auch nicht, Pakete zu fragmentieren. Du kannst nette kleine MTUs auf den falschen Link setzen.

Durch Hinzufügen von Paket-Jitter durch IIRC können Sie herausfinden, ob Sie mit Paketen außerhalb der Reihenfolge zurechtkommen.

Tim Williscroft
quelle
NistNet wird schon lange nicht mehr aktualisiert, oder? IMO, der mit Abstand beste Weg ist das Netem-Modul, das bereits in allen neueren Kerneln vorhanden ist.
Möglicherweise können Sie einen Computer mit 2 Netzwerkkarten mithilfe einer VM simulieren.
Scott
Link funktioniert nicht
Hasen
Link funktioniert bei mir.
Tripleee
4

Ich habe in der Vergangenheit persönlich Wondershaper verwendet , obwohl es für einen umgekehrten Anwendungsfall geschrieben wurde - um das Beste aus Ihrer ADSL-Verbindung herauszuholen .

Ich muss allerdings die anderen hier erwähnten probieren.

Thomas Vander Stichele
quelle
3

Sie können den lokal installierten Squid-Proxy verwenden , um die Bandbreite zu begrenzen und beispielsweise eine Webseite auf langsamen Verbindungen zu testen:

  1. Installieren Sie Squid Proxy von Ihrer Distribution - auf meinem Fedora war es so einfach wie yum install squid.

  2. Fügen Sie Folgendes hinzu zu /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Dadurch wird die Bandbreite auf ca. 128 kbit / s (16000 Bps) begrenzt.

  3. Tintenfisch starten :/etc/init.d/squid start

  4. Konfigurieren Sie Ihren Browser so, dass er den Proxy-Server- localhostPort verwendet 3128.

Tometzky
quelle
3

Noch hat niemand ip_relay mit dem Namen "iprelay" in den Debian-Repositories erwähnt. Es fungiert als TCP-Proxy, anstatt Anrufe so abzufangen, wie es Rinnsal tut, und funktioniert mit jeder Anwendung, die einen Proxy (z. B. einen Webbrowser) verwenden oder einen benutzerdefinierten Zielport (Telnet, SSH, FTP, Curl) akzeptieren kann. und so weiter ).

Es ist etwas schwieriger einzurichten, funktioniert aber oft in Situationen, in denen kein Rinnsal auftritt.

CodeGnome
quelle
1
Das ist genau das, wonach ich suche! Vielen Dank. Ich bin froh, dass ich nach unten gescrollt und weitergelesen habe.
Jay R. Wren