Ich möchte Paketverzögerung und -verlust für UDP
und TCP
unter Linux simulieren , um die Leistung einer Anwendung zu messen. Gibt es eine einfache Möglichkeit, dies zu tun?
linux
tcp
throttling
George Stocker
quelle
quelle
Antworten:
netem nutzt Funktionen, die bereits in Linux- und Userspace-Dienstprogrammen integriert sind, um Netzwerke zu simulieren. Darauf bezieht sich Marks Antwort mit einem anderen Namen.
Die Beispiele auf ihrer Homepage zeigen bereits, wie Sie das erreichen können, wonach Sie gefragt haben:
Beachten Sie, dass Sie verwenden sollten,
tc qdisc add
wenn Sie keine Regeln für diese Schnittstelle haben odertc qdisc change
wenn Sie bereits Regeln für diese Schnittstelle haben. Der Versuch,tc qdisc change
auf einer Schnittstelle ohne Regeln zu verwenden, führt zu dem FehlerRTNETLINK answers: No such file or directory
.quelle
tc -p qdisc ls dev eth0
die aktuell definierten Regelntc qdisc del dev eth0 root
Für verworfene Pakete würde ich einfach iptables und das Statistikmodul verwenden .
Oben wird ein eingehendes Paket mit einer Wahrscheinlichkeit von 1% verworfen. Seien Sie vorsichtig, alles über 0,14 und die meisten von Ihnen TCP-Verbindungen werden höchstwahrscheinlich vollständig blockieren.
Werfen Sie einen Blick auf man iptables und suchen Sie nach "Statistik" für weitere Informationen.
quelle
DROP
bei ausgehenden Verbindungen auf lächerliche Weisesend()
Operationen zurückgegeben werdenEPERM
, anstatt nur Pakete zu verwerfen (wie es sollte).iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
Einer meiner Kollegen benutzt dazu tc. Weitere Informationen finden Sie in der Manpage. Ein Beispiel für die Verwendung finden Sie hier .
quelle
iptables (8) verfügt über ein Statistik-Übereinstimmungsmodul, mit dem jedes n-te Paket abgeglichen werden kann. Um dieses Paket zu verwerfen, fügen Sie einfach -j DROP hinzu .
quelle
Dieses Tutorial zu Netzwerkphysik-Simulationen enthält eine C ++ - Klasse im Beispielcode zur Simulation von Latenz und Paketverlust in einer UDP-Verbindung und kann als Anleitung dienen. Siehe die Variablen für öffentliche Latenz und packetLoss der Connection- Klasse in der Datei Connection.h des herunterladbaren Quellcodes .
quelle
Ich habe es nicht selbst ausprobiert, aber diese Seite enthält eine Liste der Plugin-Module, die unter Linux 'integriertem iptables IP-Filtersystem ausgeführt werden. Eines der Module heißt "n-te" und ermöglicht es Ihnen, eine Regel einzurichten, mit der eine konfigurierbare Rate der Pakete verworfen wird. Könnte zumindest ein guter Anfang sein.
quelle
Sie können http://snad.ncsl.nist.gov/nistnet/ ausprobieren. Es ist ein ziemlich altes NIST-Projekt (letzte Version 2005), aber es funktioniert für mich.
quelle
Ein einfach zu verwendendes Tool zur Injektion von Netzwerkfehlern ist Saboteur . Es kann simulieren:
quelle
Eines der am häufigsten verwendeten Tools in der wissenschaftlichen Gemeinschaft zu diesem Zweck ist DummyNet . Nachdem Sie das
ipfw
Kernelmodul installiert haben, führen Sie einfach die folgenden Befehle aus, um eine Laufzeitverzögerung von 50 ms zwischen zwei Computern einzuführen:Um auch 50% der Paketverluste einzuführen, müssen Sie Folgendes ausführen:
Hier mehr Details.
quelle