Gibt es eine Möglichkeit, die Bandbreite einer Netzwerkkarte unter Linux zu beschränken? Ich möchte eine beliebig langsame Verbindung simulieren können.
Gibt es eine Möglichkeit, die Bandbreite einer Netzwerkkarte unter Linux zu beschränken? Ich möchte eine beliebig langsame Verbindung simulieren können.
Antworten:
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)
sch_netem
. Im Allgemeinen muss es nicht manuell geladen werden, sondern wird bei Bedarf automatisch geladen.
rate
Option: 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
Client-Seite, richtig?
rieseln sollte machen was du willst. Wenn Sie Ubuntu (oder Debian, glaube ich) sudo apt-get install trickle
ausfü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.
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.
wondershaper
in Debian.
sudo wondershaper clear eth0
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.
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.
Sie können den lokal installierten Squid-Proxy verwenden , um die Bandbreite zu begrenzen und beispielsweise eine Webseite auf langsamen Verbindungen zu testen:
Installieren Sie Squid Proxy von Ihrer Distribution - auf meinem Fedora war es so einfach wie yum install squid
.
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.
Tintenfisch starten :/etc/init.d/squid start
Konfigurieren Sie Ihren Browser so, dass er den Proxy-Server- localhost
Port verwendet 3128
.
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.