IPerf: des exemples…

Date: 7/01/2008 | Catégories: Open-source,Planet-libre,Reseau | Tags: ,

Nous commençons l'année 2008 avec un billet regroupant des exemples d'utilisation d'IPerf, l'outil en ligne de commande indispensable pour tester un réseau informatique.

Pour rappel, IPerf est un logiciel client/serveur, il faut donc deux machines positionner aux deux extremités du réseau à tester pour fonctionner (pour l'installation et une rapide introduction, vous pouvez consulter ce billet).

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 parseconde

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 (10*3600=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 (1*3600=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 important. Les valeurs par défaut des fenêtres TCP (taille des paquets envoyé dans des trames TCP) ne sont pas forcement adapté 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 on les caractéristiques suivantes: protocole UDp et taille des paquets petites (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 datagram) et -w (taille maximale du buffer recevant les datagras) en fixant une valeur de datagram inférieure à celle du buffer.

Sur la machine S: # iperf -s -u -l 32 -w 128k -i 1

Sur la machine C: # iperf -c IPS -u -b 1m -l 32 -w 128k

Résultat (à lire sur la machine S):

------------------------------------------------------------

Server listening on UDP port 5001

Receiving 32 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


Voici donc quelques exemple d'utilisation d'Iperf, si vous en avez d'autres, les commentaires sont ouverts !

  • Un fidèle lecteur de votre blog, je ne peux que vous encouragez dans votre talent.

  • @eric: merci beaucoup pour le compliment. Bonne année et bonne lecture libre 2008 !

  • Oliv

    Merci pour les exemples. Il y a juste un truc que je me demande: iperf n’est plus developpe? A-t’il un successeur?

  • @oliv: c’est vrai que la dernière version de Iperf date de début 2005. Les personnes en charge de la maintenance de ce logiciel ne veulent plus la faire évoluer (donc pas de nouvelles fonctions) par contre ils sont ouvert à la correction des bugs.

    Je ne connais pas de logiciel du même type (c’est à dire multi plate-forme, en ligne de commande…), mais je suis preneur si vous avez des pistes.

    A

  • Couepel

    Du bon boulot, qui sert encore (et toujours). Merci.
    A quoi bon faire moins bien ?

  • Tourab mehdi

    Hello

    J’utilise Iperf pour mesurer la bande passante entre 02 sites distants reliés par un Vpn.

    La liaison du premier est une connexion SDSL 2Mits/s
    La liaison du deuxième est une connexion SDSL 15M /s (Il s’agit d’un centre d’hébergement)

    Coté client j’utilise la commande iperf –c IP_serveur –t 600 –i 60. Le résultat est >= à 9 Mbits /s à chaque mesure.

    Je ne comprends pas le résultat ne devrait pas dépasser 2Mbits/s ?

  • @Tourab mehdi: Peux tu me dire ou est le client et ou est le serveur ?

  • Pingback: E-jul.com » Quelques outils open-source pour administrer son réseau()

  • Marco

    Bonjour, et Merci et Bravo pour tes docs.

    Afin de tester mes switchs, je voudrais simuler le déploiement d’une image ghost de 15Go avec iperf.

    Je lance donc sur le serveur :
    # iperf -s -u -B 226.10.11.12

    Puis sur les machines clientes :
    # iperf -c 226.10.11.12 -u -T 32 -t 120 -b ??

    Est-ce que je dois jouer sur la bande passante cible ?
    Merci d’avance 😉

  • @Marco – Oui, tu dois fournir à Iperf une bande passante cible à atteindre. En effet UDP, contrairement à TCP n’a pas de contrôle de flux, c’est le client qui dicte la cadence.

    Dans ton cas, le plus représentatif est de mesurer la consommation de bande passante lors de l’utilisation de ton logiciel qui diffuse les images ghosts puis de configurer une bande passante équivalent ou légèrement supérieure lors de ton test Iperf (avec l’option -b). Tu peux également faire une vraie simulation en utilisant l’option « -F nondufichierghost ».

    Tu as intérêt d’avoir un réseau solide car 15 Go à 10 Mbps, cela va prendre au minimum 3h30 🙂

    Tiens nous informé du résultat…

  • Marco

    @NicoLargo – hé hé c’est justement pour tester mon réseau… J’ai des nouveaux switch gigabits tout beaux. Hélas ils semblent être tout pourri, en fait :P. Ils ne tiendraient pas la charge du ghost.

    Je vais essayer de reproduire la charge avec iperf, mais ce sera pour jeudi prochain, parce que là, les gens, ils bossent 😀

    Donc à priori la commander à lancer depuis le client :

    # iperf -c 226.10.11.12 -u -b 10m -F /images/image.ghost

    La suite jeudi 😉

  • @Marco – Exact pour la ligne de commande.

    Pour le reste, regarde dans la doc de tes switchs si ils n’ont pas le support de protocole comme GMRP pour optimiser au mieux la diffusion multicast. En gros seul les ports ou un client ghost est connecté diffuseront le flux multicast…

  • pascal VP

    Il est également possible d’ajouter l’option -i 3600 pour avoir un rapport intermédiaire toutes les heures (1*3600=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):

    la commande sur la machine C: ne serait pas plutot iperf -c IPS -u -b 4m -i 3600

  • Pingback: Mesurer le débit dans son réseau avec NutTCP()

  • Free Spirit

    Salut Nicolargo….
    voilà mon problème….je voulet tester iperf entre 2 postes connectés à internet …je savai que les routeurs fonts un NAT alors j’ai repris les @ fournies par les routeurs et j’ai essayer..résultat?…et bin les paquets envoyer mais sans réponse de part et d’autre..
    alors ..mes questions sont :
    est il possible de réaliser un test iperf entre client/server pas sur LAN mais sur internet? et si c’est possible que doit je faire??
    j’ai cherché pour la solution VPN….mais je comprend pas le fonctionnement : le logiciel VPN va t il me fournir les @ip ??…est ce que je peut exécuter iperf sur ce réseau?? si oui alors comment…????

    • @Free Spirit: tu n’as fait que la moitié du chemin. Il faut effectivement utilisé les adresses IP publiques des routeurs dans les lignes de commandes Iperf. Par contre quand les paquets vont arriver sur le routeur en question il faut qu’il sache les rediriger vers ton PC. C’est en configurant le PAT (port address translation) de ton routeur que tu vas y arriver.

      Prenons l’exemple suivant:

      PC (@A) < -> RTR (@B) < -> Internet < -> RTR (@C) < -> PC (@D)

      Sur le routeur RTR (@C): Configurer le PAT pour rediriger les paquets arrivant sur l’adresse IP publique (@C) et sur le port 5000 (port par défaut d’Iperf) vers le PC (@D)
      Sur le PC serveur (@D): iperf -s
      Sur le PC client (@A): iperf -c @C

      Et voili.

      Pour avoir le retour du rapport sur le PC (@A) il fait effectuer la configuration inverse sur le routeur RTR (@B).

  • Condor34

    Bonjour

    Excellent développement. Maintenant, en application de ces exemples, en lançant un iperf -c, j’obtiens un débit de 600Mbits/sec vers mon NAS. En ajoutant un -w 130k, j’obtiens alors un débit de 954 Mbits/sec !

    Etant sous windows 7 x64, que dois-je faire pour optimiser cette connexion ? (je précise que les jumbo frames sont à 9000)

    Merci

  • Sopey

    Bonsoir, j’ai un serieu probleme
    je veux envoyer en meme temps 3 flux different :
    exemple 1 flux sur port 80, 1 flux sur les port 5001-5002, 1 flux le port 21