Iperf

Fiche logiciel validé
  • Création ou MAJ importante : 23/04/10
  • Correction mineure : 11/03/13
Mots-clés
Pour aller plus loin
  • Fiches logiciel PLUME connexes : NfSen

Iperf : mesure de bande passante d'un réseau IP

Description
Fonctionnalités générales

IPerf est un logiciel de mesure de performance réseau, disponible sur de nombreuses plateformes (Linux, BSD, Mac, Windows…). Il se présente sous la forme d’une ligne de commande à exécuter sur deux machines disposées aux extrémités du réseau à tester.

Il permet de mesurer la bande passante, la latence, la gigue et la perte de datagrammes.

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 utilisant le protocole TCP (mais il est également possible d’utiliser le mode UDP avec l’option -u).

Autres fonctionnalités

Supporte IPV6 (utiliser l'option -V pour spécifier une adresse IPv6) et le muliticast.
Permet de tester des réseaux WiFi.
Permet de détecter des problèmes sur des câbles réseaux dans un LAN en mesurant des performances asymétriques d'un poste de travail vers plusieurs autres machines du même réseau.

Interopérabilité

Iperf n'est pas interopérable avec d'autres logiciels. Il n'est pas conseillé de faire des tests avec des versions différentes d'iperf aux deux extrémités.

Contexte d'utilisation dans mon laboratoire/service

Test de réseau filaire ou sans fil, d'entreprise ou domestique.

Iperf est utile dans de nombreux cas. Lors de la résolution d'un problème dont le réseau est une cause possible, un test Iperf judicieux peut rapidement mettre en évidence s'il y a ou non réellement un problème réseau.

Exemples :

  • si un utilisateur se plaint des performances de sa machine vis-à-vis d'une application hébergée sur un serveur, un test iperf TCP entre sa machine et le serveur permettra de déterminer si le problème est lié au réseau ou à la couche applicative.

  • si un utilisateur se plaint d'une lenteur généralisée des accès de sa machine, des tests iperf mettront en évidence des éventuels problèmes réseaux. Si les résultats de tests effectués dans les deux sens montrent une forte asymétrie en termes de performances ou de pertes avec plusieurs machines, c'est souvent le signe d'un câble réseau défectueux.

Limitations, difficultés, fonctionnalités importantes non couvertes

Il est important d'utiliser Iperf à bon escient, la valeur des résultats est proportionnelle à la pertinence de la mesure par rapport au problème qu'on veut résoudre. Si vous voulez résoudre un problème entre une machine A et une machine B, mesurer les performances entre la machine A et une machine C apporte peu d'informations si C n'est pas directement sur le chemin de routage ou de commutation de A et B.

Lors de tests dans les deux sens, il vaut mieux utiliser l'option "-r" (tradeoff) plutôt que "-d" (duplex). En effet, lors d'un test full duplex à de hauts débits, la CPU des machines aux deux extrémités est très sollicitée et fausse largement la mesure. Avec l'option "-r", le test est d'abord fait dans un sens, puis il est lancé dans l'autre sens. Le résultat est plus pertinent.

Attention à la bande passante en UDP : si vous émettez un flux de 1Gbits/s vers une destination à l'extérieur de votre réseau, votre liaison WAN va devoir écouler ce flux. Si le débit de votre liaison est inférieur (c'est très souvent 10 fois moins), vous allez couper l'accès à Internet sur tout le site.

Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

Packages existants pour Ferdora, RedHat, CentOS, Debian, Mandriva.

Plates-formes

Linux
FreeBSD
Irix
MacOS X
Windows (installer kperf )
OpenBSD
Solaris

Logiciels connexes

Jperf: Interface graphique en java pour IPerf: http://sourceforge.net/projects/jperf

Autres logiciels aux fonctionnalités équivalentes

ttcp : beaucoup plus ancien et limité

Environnement de développement
Type de structure associée au développement

Equipe de développement de "University of Illinois".

Eléments de pérennité

La dernière version de Iperf date de Avril 2008.

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums

FAQ: http://sourceforge.net/mailarchive/forum.php?forum...
Liste de diffusion en anglais : iperf-users [at] lists [dot] sourceforge [dot] net
Archive de la liste: http://archive.ncsa.uiuc.edu/lists/iperf-users/
Liste de diffusion en français : http://www.services.cnrs.fr/wws/info/perf-reseau ; cette liste n'est pas centrée sur Iperf mais a pour objectif de traiter toutes les questions relatives aux problèmes des performances réseau.

Documentation utilisateur
Divers (astuces, actualités, sécurité)

Dans les exemples ci-dessous, nous allons considérer que nous allons utiliser deux machines nommées C (avec comme adresse IP: IPC) et S (avec comme adresse IP: IPS).

Exemple pour mesurer la bande passante disponible entre S et C

Attention, cette méthode mesure la bande passante au moment du test. Ce dernier dure par défaut 10 secondes et utilise le protocole TCP sur le port 5001.

Sur la machine S: # iperf -s
Sur la machine C: # iperf -c IPS
Résultat (à lire sur la machine S):
————————————————————
Server listening on TCP port 5001TCP window size: 56.0 KByte (default)
————————————————————
[ 6] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 54334
[ 6] 0.0-10.0 sec 112 MBytes 93.7 Mbits/sec

Exemple pour générer un débit réseau entre C et S

On génère ici un flux en utilisant le protocole UDP et en fixant la bande passante à 1 Megabits par seconde. Le test dure par défaut 10 secondes.
Il est possible de choisir l’unité de mesure de débit avec l’option -b et en collant les lettres suivantes aux débits :

* b: bits par seconde
* k: kilobits par seconde
* m: megabits par seconde
* g: gigabits par seconde

Pour un débit en octets par seconde, il faut utiliser ces lettres en majuscule.

Sur la machine S: # iperf -s -u
Sur la machine C: # iperf -c IPS -u -b 4m
Résultat (à lire sur la machine S):
————————————————————
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 41.1 KByte (default)
————————————————————
[ 5] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 49617
[ 5] 0.0-10.0 sec 4.77 MBytes 4.00 Mbits/sec 0.066 ms 0/ 3403 (0%)

Exemple pour générer un débit réseau entre C et S pendant 10 heures

Il peut être utile de générer un flux réseau plus long pour tester par exemple une liaison Internet pendant les heures d’utilisation. Nous allons donc utiliser l’option -t pour fixer la durée du test précédent à 10 heures (103600=36000 secondes).

Sur la machine S: # iperf -s -u
Sur la machine C: # iperf -c IPS -u -b 4m -t 36000
Résultat (à lire sur la machine S):
————————————————————
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 41.1 KByte (default)
————————————————————
[ 5] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 49617
[ 5] 0.0-36000.0 sec 4.77 MBytes 4.00 Mbits/sec 0.066 ms 0/ 999403 (0%)

Il est également possible d’ajouter l’option -i 3600 pour avoir un rapport intermédiaire toutes les heures (13600=3600 secondes).

Sur la machine S: # iperf -s -u
Sur la machine C: # iperf -c IPS -u -b 4m -t 3600
Résultat (à lire sur la machine S):
————————————————————
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 41.1 KByte (default)
————————————————————
[ 5] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 49617
[ 5] 0.0-3600.0 sec 4.77 MBytes 4.00 Mbits/sec 0.066 ms 0/ - (0%)
[ 5] 3600.0-7200.0 sec 4.77 MBytes 4.00 Mbits/sec 0.066 ms 0/ - (0%)…
[ 5] 0.0-36000.0 sec 4.77 MBytes 4.00 Mbits/sec 0.066 ms 0/ 999403 (0%)

Exemple pour générer 2 flux réseau entre S et C

Il est parfois utile de générer plusieurs flux UDP simultanément pour simuler une application. IPerf permet cela grâce à l’option -P et en donnant le nombre de flux à générer. L’exemple suivant génère 4 flux TCP entre S et C (simulation d’un serveur Web par exemple).

Sur la machine S: # iperf -s
Sur la machine C: # iperf -c IPS -P 4
Résultat (à lire sur la machine S):
————————————————————
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 64978
[ 7] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 64979
[ 8] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 64980
[ 9] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 64981
[ 7] 0.0-10.0 sec 28.0 MBytes 23.5 Mbits/sec
[ 8] 0.0-10.0 sec 28.0 MBytes 23.4 Mbits/sec
[ 9] 0.0-10.0 sec 28.1 MBytes 23.5 Mbits/sec
[ 6] 0.0-10.0 sec 28.1 MBytes 23.5 Mbits/sec
[SUM] 0.0-10.0 sec 112 MBytes 93.8 Mbits/sec

Exemple pour optimiser une connexion TCP entre S et C

Le protocole TCP, bien que capable pour s’adapter aux réseaux large bande, a été conçu lorsque les débits étaient beaucoup moins importants. Les valeurs par défaut des fenêtres TCP (taille des paquets envoyés dans des trames TCP) ne sont pas forcement adaptées aux réseaux actuels. IPerf permet de jouer avec la taille de ces fenêtres avec l’option -w. L’exemple suivant génère un flux TCP avec une taille de fenêtre de 130 kilo octets.

Sur la machine S: # iperf -s
Sur la machine C: # iperf -c IPS -w 128k
Résultat (à lire sur la machine S):
————————————————————
Client connecting to 192.168.29.1, TCP port 5001
TCP window size: 128 KByte (WARNING: requested 130 KByte)
————————————————————
[ 3] local 192.168.29.157 port 65066 connected with 192.168.29.1 port 5001
[ 3] 0.0-10.0 sec 112 MBytes 93.5 Mbits/sec

Exemple pour découvrir la taille du MTU entre S et C

Le MTU est la taille maximale du paquet pouvant être transmis sur la couche réseau sans être segmenté. La découverte de cette valeur peut être utile à l’optimisation de votre réseau et des applications qui tourne dessus. IPerf permet d’obtenir cette valeur grâce à l’option -m (à lancer sur le serveur).

Sur la machine S: # iperf -s -m
Sur la machine C: # iperf -c IPS
Résultat (à lire sur la machine S):
————————————————————
Client connecting to 192.168.29.1, TCP port 5001
TCP window size: 56.0 KByte (default)
————————————————————
[ 3] local 192.168.29.157 port 65066 connected with 192.168.29.1 port 5001
[ 3] 0.0-10.0 sec 112 MBytes 93.5 Mbits/sec[ 3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

Exemple pour tester un flux de type VoIP entre C et S

Les paquets de type voix sur IP ont les caractéristiques suivantes : protocole UDP et taille des paquets petite (bien inférieure au MTU). Le meilleur moyen de tester un flux de type VoIP avec IPerf est d’utiliser les options -l (taille du datagramme) et -w (taille maximale du buffer recevant les datagrammes) en fixant une valeur de datagramme inférieure à celle du buffer.

Sur la machine S: # iperf -s -u -l 32k -w 128k -i 1
Sur la machine C: # iperf -c IPS -u -b 1m -l 32k -w 128k
Résultat (à lire sur la machine S):
————————————————————
Server listening on UDP port 5001
Receiving 32768 byte datagrams
UDP buffer size: 128 KByte
————————————————————
[ 3] local 192.168.29.157 port 5001 connected with 192.168.29.125 port 32778
[ 3] 0.0- 1.0 sec 96.0 KBytes 786 Kbits/sec 0.003 ms 0/ 3 (0%)
[ 3] 1.0- 2.0 sec 128 KBytes 1.05 Mbits/sec 0.008 ms 0/ 4 (0%)
[ 3] 2.0- 3.0 sec 128 KBytes 1.05 Mbits/sec 0.017 ms 0/ 4 (0%)
[ 3] 3.0- 4.0 sec 128 KBytes 1.05 Mbits/sec 0.021 ms 0/ 4 (0%)
[ 3] 4.0- 5.0 sec 128 KBytes 1.05 Mbits/sec 0.023 ms 0/ 4 (0%)
[ 3] 5.0- 6.0 sec 96.0 KBytes 786 Kbits/sec 0.022 ms 0/ 3 (0%)
[ 3] 6.0- 7.0 sec 128 KBytes 1.05 Mbits/sec 0.152 ms 0/ 4 (0%)
[ 3] 7.0- 8.0 sec 128 KBytes 1.05 Mbits/sec 0.142 ms 0/ 4 (0%)
[ 3] 8.0- 9.0 sec 128 KBytes 1.05 Mbits/sec 0.115 ms 0/ 4 (0%)
[ 3] 9.0-10.0 sec 128 KBytes 1.05 Mbits/sec 0.098 ms 0/ 4 (0%)
[ 3] 0.0-10.5 sec 1.25 MBytes 1.00 Mbits/sec 0.116 ms 0/ 40 (0%)

Remarque : bien que Iperf soit disponible sur de nombreuses plate-forme (Linux, BSD, Mac, Windows), l’option -l ne fonctionne pas toujours quand vous utiliser des OS différents entre le client et le serveur.

Exemple pour utiliser IPerf sur un port différent

Par défaut, Iperf utilise le numéro de port 5001 (TCP et/ou UDP). Selon votre configuration (notamment au niveau des ACL des routeurs/firewalls), il peut être utile d’utiliser un autre port, pour cela, il faut passer par l’option -p. L’exemple suivant permet de générer un flux réseau TCP entre S et C sur le port 80 (port Web standard).

Sur la machine S: # iperf -s -p 80
Sur la machine C: # iperf -c IPS -p 80
Résultat (à lire sur la machine S): ————————————————————
Server listening on TCP port 80
TCP window size: 56.0 KByte (default)

————————————————————
[ 6] local 192.168.29.1 port 5001 connected with 192.168.29.157 port 54334
[ 6] 0.0-10.0 sec 112 MBytes 93.7 Mbits/sec

IPerf en multicast

Iperf peut fonctionner en mode multicast (-B). Il faut le lancer de la manière suivante:

Sur le serveur:

$ iperf -s -u -B 225.0.1.2

Sur le client:

$ iperf -c 225.0.1.2 -u -b 3M

Cela génère un flux multicast UDP (sur l’adresse 225.0.1.2 de 3 Mb/sec.)

Commentaires

iperf lien plus valables

Bonjour,

Attention les liens vers la doc utilisateur ne sont plus valables
=>
Documentation utilisateur

http://dast.nlanr.net/docs.html#guides
http://dast.nlanr.net/Projects/Iperf/iperfdocs_1.7...

A+
Sophie

Mise à jour

Bonjour,

Merci pour votre retour, nous allons mettre la fiche à jour et corriger ces liens.

Bonne journée, Gilian.

Responsable thématique précédent

Cette fiche a d'abord été suivie par le responsable thématique Jacquelin Charbonnel. Gilian Gambini l'a reprise en février 2012.