Tester la performance de votre réseau avec Iperf
Iperf est un des outils indispensable pout tout administrateur réseau qui se respecte. En effet, ce logiciel de mesure de performance réseau, diponible sur de nombreuses plateformes (Linux, BSD, Mac, Windows…), se présente sous la forme d’une ligne de commande à executer sur deux machines disposées aux extrémités du réseau à tester.
Iperf fonctionne comme un client/serveur selon le diagramme suivant:
Iperf doit être lancé sur deux machines se trouvant de part et d’autre du réseau à tester. La première machine lance Iperf en “mode serveur” (avec l’option -s), la seconde en “mode client” (option -c). Par défaut le test réseau se fait en utilsant le protocole TCP (mais il est également possible d’utiliser le mode UDP avec l’option -u).
Nous allons commencer par installer iperf en utilisant la commande suivante (sous Fedora):
# yum install iperf
Pour les autres système d”exploitation, vous pouvez vous rendre sur cette page.
Premier exemple d’utilisation
Ensuite, sur une des deux machines de test, nous allon slancer le serveur grâce à la commande suivante:
# iperf -s
Sur le client, il ne reste plus qu’a lancer le client en précisant l’adresse du serveur:
# iperf -c <adresse IP du serveur>
Vous devriez avoir le rapport qui s’affiche après 10 secondes de test.
————————————————————
Client connecting to 192.168.29.1, TCP port 5001
TCP window size: 65.0 KByte (default)
————————————————————
[ 3] local 192.168.29.157 port 50675 connected with 192.168.29.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 110 MBytes 92.6 Mbits/sec
Avec les options par défaut, le test est fait en TCP sur une durée de 10 secondes. Sur un réseau local vous devriez donc obtenir un valeur proche de la capacité de commutation de vos équipements (par exemple 92.6 Mbits/sec qui est une valeur proche de 100 Mbits/sec).
Pour afficher des rapports intermédiaires (par exemple toutes les secondes) , il suffit d’ajouter l’option (-i 1) sur le client et/ou le serveur.
# iperf -s -i 1
————————————————————
Server listening on TCP port 5001
TCP window size: 56.0 KByte (default)
————————————————————
[ 6] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 50692
[ 6] 0.0- 1.0 sec 10.1 MBytes 84.8 Mbits/sec
[ 6] 1.0- 2.0 sec 11.1 MBytes 93.0 Mbits/sec
[ 6] 2.0- 3.0 sec 11.2 MBytes 93.8 Mbits/sec
[ 6] 3.0- 4.0 sec 11.2 MBytes 93.9 Mbits/sec
[ 6] 4.0- 5.0 sec 11.2 MBytes 93.9 Mbits/sec
[ 6] 5.0- 6.0 sec 11.2 MBytes 93.8 Mbits/sec
[ 6] 6.0- 7.0 sec 11.2 MBytes 93.9 Mbits/sec
[ 6] 7.0- 8.0 sec 11.2 MBytes 93.8 Mbits/sec
[ 6] 8.0- 9.0 sec 11.2 MBytes 93.9 Mbits/sec
[ 6] 9.0-10.0 sec 11.2 MBytes 93.9 Mbits/sec
[ 6] 0.0-10.0 sec 111 MBytes 92.9 Mbits/sec
Une autre option de base est (-t) qui permet de fixer au niveau du client le temps du test (en secondes). Par exemple pour effectuer un test pendant 1 minute:
# ipert -c <adresse IP du serveur> -t 60
Exemple de test en utilisant le protocole UDP
Iperf permet également de générer un traffic de type UDP (-u). Dans ce cas là, il faut penser à fixer la bande passante cible (contrairement au protocole TCP, UDP ne peut pas faire de contrôle de flux). On utilise pour cela l’argument -b au niveau du client:
Sur le serveur:
# iperf -s -u
Sur le client:
# ipert -c <adresse IP du serveur> -u -b 512k
Ce couple de commandes va générer un test avec un flux réseau UDP de 512 Kbits/sec.
Comme vous pouvez le voir Iperf est également un bon outil de génération de flux. Je l’ai déjà testé pour générer un flux UDP constant pendant plusieurs jours.
Exemple de test en multicast (UDP)
Iperf peut fonctionner en mode multicast (-B). Il faut le lancer de la manière suivante:
Sur le serveur:
# iperf -s -u -B 226.10.11.12
Sur le/les clients:
# iperf -c 226.10.11.12 -u -T 32 -b 512k
Ce couple de commandes génére un flux multicast UDP (sur l’adresse 226.10.11.12, avec un TTL de 32) de 512 Kbits/sec.
Autres options
NOUVEAU: Consultez cet autre article (cliquez ici) pour une description des options avancés de Iperf.
Et bien entendu, il reste la fameuse commande:
# iperf –help
…pour avoir la liste complète des options. Si vous avez des questions, n’hésitez pas !
Sur le même sujet
Pour mes propres besoins, j’ai ecrit un programme nommé SJitter permettant, comme le fait Iperf (c’est à dire sous la forme d’un client/serveur), de mesurer la gigue réseau (ou jitter en anglais). Paramètre très important si vous souhaitez mettre en place de la voie sur IP sur votre réseau.






Twitter:
Rss:
15 commentaires
Suite au mail d’un lecteur:
la qualité d’un lien réseau peut être caractérisée par plusieurs variables:
- taux de perte de paquets (iperf peut te donner cette information)
- délais de transit (iperf peut te donner cette information)
- valeur de la gigue (tu peux la calculer en fonction des informations donnée par Iperf avec l’option -i ou bien utiliser un autre logiciel comme SJitter qui te donnera une valeur moyenne)
En fonction de ton réseau tu peux en déduire si tu as un problème ou pas. Quelques exemples:
Sur un réseau local: Perte < 0.5%, délais < 10 ms, Gigue < 5 ms
Sur un réseau Wan: Perte < 1%, délais < 40 ms, Gigue < 10 ms
Sur Internet (ou VPN sur Internet): Perte < 2%, délais < 100 ms, Gigue < 30 ms
je voulais savoir si il ya une possiblité de prgrammer en java des requettes iperf avec un model client serveur?
@monalisa: à ma connaissance, il n’y a pas de version java d’Iperf mais seulement une interface utilisateur ecrite en Java pour lancer Iperf. Bref la seule solution à ton problème est de lancer depuis ton code java la commande systeme iperf.
merci nicoLargo,
Pour les besoins de mon projet je pense que SJitter est plus intéressant que Iperf, mais je ne sais pas comment je doit faire pour récupérer les données quand j’envoie une requête SJitter ,
je m’explique: dans mon projet je doit développer une application de monitoring sur un réseau, en java, donc je doit interroger des machines a distance, j’ai penser a installer SJitter sur le serveur et développer une commande avec java qui me permet de lancer SJitter vers des utilisateurs sur le réseau déjà identifier (avec l’adresse IP), mais je ne sais pas comment faire pour récupérer ces données pour les analyser avec la même application java.
(si y a moyen que SJitter enregistre les données récupérer sur un fichier .txt ( par exemple )pour que je puisse faire la lecture avec mon application sur ce fichier?)
crd,
@monalisa: sjitter comme iperf sont des outils de test de performance réseau mais pas des applications de monitoring. Mais si tu veux les utiliser quand même pour controler l’evolution des caractéristiques d’un lien à travers le temps, tu peux lancer sjitter dans une commande système et rediriger la sortie vers un fichier texte.
Par exemple: -n 100 -b 200 > /tmp/output.txt
# sjitter -c
Il ne reste plus alors qu’a analyser la sortie du fichier .txt avec ton programme java.
bonjour,
j’ai suivi les instructions a la lettre, est ça marche trés bien merci bc.
mais je voulais savoir si je peut lancer iperf sur des routeur Cisco?
si non, y a t’il un moyen pour tester est recuperer les valeurs que je cherche (taux de perte de paquets, délais de transit, la gigue).
#monalisa: il n’existe pas de serveur (ni de client ) comme Iperf ou Sjitter pouvant être lancé sur les IOS des routeurs Cisco. Ta seule chance est d’utiliser des requêtes SNMP mais je doute que tu trouves ces informations dans la MIB Cisco.
Les routeurs font parties de l’infrastructure réseau, au même titre que les switchs et les modems. Le plus simple est d’installer un client/serveur (Iperf ou Sjitter) sur une machien derriere ton routeur pour tester ton lien.
bonjour,
une question sur iperf, sous unix on utilisant la commande awk comme l’exemple :
iperf -c `@serveur` -u -t280 -b16K -S0x88 | awk ‘/%/ {sub(/%/,”",$13) ; sub(/\(/,”",$13) ; sub(/\)/,”",$13) ; {print $9,$13}}’ > $HOME/result/iperf
je peut recuperer les valeurs est les enregister sur une base de donnée (postgres).
mais le probleme que j’ai eu c’est pour le serveur (iperf -s), puisque le serveur reste a l’ecoute du port jusqu’a a ce qu’on arrete le process
mais je demande si vous avez un script ou connaisser un moyen pour integrer directement les mesures recolté sur une base de donnée sans passer par un fichier txt
merci
@monalisa: il n’existe pas à ma connaissance de moyen pour rediriger automatiquement des resultats d’un Iperf vers une base de donnée. Il faut comme tu l’as fais passer par un script. Par contre je pense qu’il serait plus propre de passer par un script Perl qui te permettra de lancer Iperf (via une commande system()) et de recuperer le resultat dans une socket que tu pourras intégrer directement dans une base de donnée (par exemple en utilisant la librairie DBI).
Je n’ai rien sous le coude… il va falloir que tu codes par toi même…
j’ai un routeur wifi(borne wifi) et un pc portable.
Je voudrais générer untrafiic de ce pc et qui fait un boucle pour revenir au même pc.
le pc et le routeur relié au un reseau local .
@MMZ: Si j’ai bien compris, tu veux essayer de tester ta connectivité Wifi avec 1 seul PC… Le plus simple et je pense la seule solution (mais je peux me tromper) est de brancher ton portable avec un cable Ethernet sur ton routeur Wifi et de te connecter en même temps en Wifi sur ta borne. Decalre deux adresse IP différentes sur ton interface Wifi et ton interface Ethernet. Tu devrais alors pouvoir faire les tests entre ces deux interfaces et donc en déduire la qualité Wifi de ta borne.
est ce que je peux utiliser sjitter sur windows?
Quelle est la formule à utiliser pour calculer le gigue en utilisant iperf?
merci
Je ne pense pas adapter Sjitter sous WIndows pour l’instant. Je logiciel étant sous licence libre, si quelqu’un a l’envie de le faire il n’y a aucun problème…
Iperf permet avec l’option -i de données l’écart de réception entre deux paquets. Il faut ensuite prendre ces valeurs et lui appliquer le calcul décrit dans la RFC 1889.
Bonjour
j’utlise iperf 2.0 sur windows, quand je tape :
iperf -s -u -B 226.10.11.12
il me renvoie l’erreur suivante:
bind failed: cannot assign requested adress
multicast join failed: invalid argument
recvfrom failed : invalid argument
pouvez vous m’aider svp.