Je voudrais simuler le retard et la perte de paquets pour UDP
et TCP
sur Linux afin de mesurer les performances d'une application. Existe-t-il un moyen simple de procéder?
linux
tcp
throttling
George Stocker
la source
la source
Réponses:
netem tire parti des fonctionnalités déjà intégrées à Linux et aux utilitaires de l'espace utilisateur pour simuler les réseaux. C'est en fait ce à quoi la réponse de Mark fait référence, sous un nom différent.
Les exemples sur leur page d'accueil montrent déjà comment vous pouvez réaliser ce que vous avez demandé:
Notez que vous devez l'utiliser
tc qdisc add
si vous n'avez pas de règles pour cette interface outc qdisc change
si vous avez déjà des règles pour cette interface. Tenter d'utilisertc qdisc change
sur une interface sans règles donnera l'erreurRTNETLINK answers: No such file or directory
.la source
tc -p qdisc ls dev eth0
tc qdisc del dev eth0 root
Pour les paquets perdus, j'utiliserais simplement iptables et le module statistique .
Ci-dessus supprimera un paquet entrant avec une probabilité de 1%. Soyez prudent, tout ce qui dépasse 0,14 et la plupart d'entre vous, les connexions TCP seront probablement bloquées complètement.
Jetez un oeil à man iptables et recherchez "statistique" pour plus d'informations.
la source
DROP
sur les connexions sortantes, lessend()
opérations reviennent plutôt ridiculementEPERM
, plutôt que de simplement supprimer des paquets (comme il se doit).iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
Un de mes collègues utilise tc pour ce faire. Reportez-vous à la page de manuel pour plus d'informations. Vous pouvez voir un exemple de son utilisation ici .
la source
iptables (8) possède un module de correspondance statistique qui peut être utilisé pour faire correspondre chaque nième paquet. Pour supprimer ce paquet, ajoutez simplement -j DROP .
la source
Ce didacticiel sur les simulations physiques de réseau contient une classe C ++ dans l' exemple de code pour simuler la latence et la perte de paquets dans une connexion UDP et peut être utile. Voir les variables de latence publique et packetLoss de la classe Connection trouvées dans le fichier Connection.h du code source téléchargeable .
la source
Je ne l'ai pas essayé moi-même, mais cette page contient une liste de modules d'extension qui fonctionnent dans le système de filtrage IP iptables intégré à Linux. L'un des modules est appelé "nième" et vous permet de mettre en place une règle qui supprimera un taux configurable des paquets. Ce pourrait être un bon point de départ, au moins.
la source
Vous pouvez essayer http://snad.ncsl.nist.gov/nistnet/ C'est un projet NIST assez ancien (dernière version 2005), mais cela fonctionne pour moi.
la source
Saboteur est un outil d'injection de pannes réseau facile à utiliser . Il peut simuler:
la source
L'un des outils les plus utilisés dans la communauté scientifique à cette fin est DummyNet . Une fois que vous avez installé le
ipfw
module du noyau, afin d'introduire un délai de propagation de 50 ms entre 2 machines, exécutez simplement ces commandes:Afin d'introduire également 50% des pertes de paquets, vous devez exécuter:
Voici plus de détails.
la source