Utilisation avancée de Iperf

Date: 1/06/2007 | Catégories: Reseau | Tags: ,,,

Suite à ce premier article décrivant les fonctions de base, voici un complément d'informations sur l'utilisation du logiciel Iperf.

Changement de la taille des buffers

Par défaut, les buffer d'écriture et de lecture sont the 8000 octets. On peut utiliser la fonction '-l' pour modifier cette taille (taille minimum: 12 octets).

Par exemple, pour generer des paquets UDP (mais cela fonctionne aussi avec le protocole TCP) avec des buffers (in/out) de 40 octets.

Serveur:

# iperf -s -u -l 40

Client:

# iperf -c <adresse IP client> -u -l 40

Remarque: cela a pour effet de produire sur le réseau des paquets UDP de 40 octets (en tête UDp inclus), ce qui correspond à la moyenne de la taille des paquets utilisés avec les protocoles de VoIP de type SIP ou H.323).

Afficher la taille du MTU

Il est parfois utile de connaître la taille du MTU sur un chemin réseau (par l'exemple pour customize son stack IP en fonction de sa connection Internet). Iperf permet, grâce à l'option '-m' d'afficher cette valeur dans le rapport.

Serveur:

# iperf -s -m

Client:

# iperf -c <adresse IP client> -m

------------------------------------------------------------
Client connecting to 192.168.29.1, TCP port 5001
TCP window size: 65.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.29.157 port 51850 connected with 192.168.29.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 111 MBytes 93.0 Mbits/sec
[ 3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

Il est alors possible de tester le réseau en fixant cette valeur avec l'option '-M':

Serveur:

# iperf -s -M 40

Client:

# iperf -c <adresse IP client> -M 40

Faire un test bi-directionnel en UDP

Par défaut, lorsque l'on utilise le protocole UDP (option '-u'), les flux vont du client vers le serveur. Pour faire un test bi-directionnel (c'est à dire avec 2 flux simultanés, client->serveur et serveur->client), il suffit d'utiliser l'option '-d' au niveau du client. Si vous souhaitez que ce test se fasse de manière non simultané, il faut utiliser l'option '-r' en lieu et place de l'option '-d'.

# iperf -s -u

Client:

# iperf -c <adresse client> -u -d
... Client report:
[ 5] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 13.697 ms 0/ 893 (0%)
[ 7] Server Report:
[ 7] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.027 ms 0/ 891 (0%)

Faire un test avec plusieurs flux

Si vous souhaitez que Iperf génére non pas 1 seul flux réseau entre le client et le serveur mais plusieurs. Il faut fixer le nombre avec l'option '-P'. Par exemple pour génerer 5 flux UDP simultanés entre le client et le serveur, il faut utiliser les commandes suivantes:

Serveur:

# iperf -s -u

Client:

# iperf -c <adresse IP client> -u -P 5

Taguer le champs Diffserv

Si votre réseau est compatible avec la QoS Diffserv, vous pouvez taguer le champs DSCP les paquets générés par Iperf  en utilisant l'option -S:

# iperf -c <adresse IP client> -u -S 0x99

Changer le port d'écoute par défaut

Par défaut, le port d'écoute du serveur est le 5001 (UDP ou TCP). Pour le modifier (par exemple si vous devez traverser un Firewall ou vous n'avez pas la main, il faut utiliser l'option '-p' sur le serveur et le client.

Par exemple pour utiliser le port HTTP (80):

Serveur:

# iperf -s -p 80

Client:

# iperf -c <adresse IP client> -p 80


  • Pingback: Anonyme()

  • Peut -on utiliser Iperf au travers d’une liaison ADSL de pc à pc ? si oui, comment !!??

    Merci d’avance.

  • @xav: oui bien sûr, Iperf est fait pour çà… Il faut installer le logicel sur chacun des deux PC et lancer les commandes qui vont bien. Je te conseille de lire cet article, c’est une introduction pour débuter avec Iper.

  • Merci de ta reponse rapide !
    Je connais bien Iperf !

    Ci-dessous ma config client/serveur via ADSL

    Site A : Serveur
    IP public = 81.56.22.23 (exemple !)
    PC : 192.168.0.1
    iperf -s -u -p 5001
    Le PC serveur à le port 5001 redirigé vers lui dans le routeur

    Site B : Client
    PC : 192.168.0.2
    iperf -c 81.56.22.23 -p 5001

    Suivant cette conf, ça fonctionne pas…!!!

    Merci pour ton aide !
    Xav.

  • Bizarre.. cela devrait marcher. Autorise également les trame UDP dans l’autre sens afin que le report soit renvoyé au client.
    Tu n’as pas de Firewall sur ces machines ?

  • bertrand

    Bonjour, j’ai une question j’essaie d’évaluer en ce moment la charge du réseau de ma boîte et j’obtient des taux de charge différents suivant les OS utilisés, je m’explique:

    J’ai d’un coté un poste fixe sous Linux et un portable sous XP, j’obtiens les valeures suivantes:

    Poste linux en client j’ai un taux avoisinant les 68 Mb/s
    Poste Linux en serveur les valeures sont les suivantes 60 Mb /s

    Maintenant lorsque je prend deux postes XP pour faire le même test
    j’obtiens la valeur suivante 88 Mb/s.

    Je m’explique pas cette différence et quel configuration est la plus fiable.

    Merci de votre aide.

  • @bertrand: Iperf n’est pas fait pour mesurer la charge réseau mais un débit maximum théorique. Si c’est ca que tu essayes de calculer il est normal d’avoir des différences entre les machines. En effet, la qualité des cartes Ethernet (au niveau hardware) et des drivers (pile IP) varie d’un constructeur à l’autre.

    Il se peut également qu’au niveau de ton architecture réseau une cascade de switch puisse faire baisser le débit maximum théorique.

    Comme ma l’a fait également remarqué Xavier: « la différence peut aussi venir de la variable TCP WINDOW SIZE (-w). Les cartes réseaux sous windows = -w64k pour l’option client et serveur sous linux je ne sais pas ! »

  • bertrand

    Merci, j’ai effectivement découvert aujourd’hui qu’en imposant une taille identique de la variable TCP WINDOWS SIZE on avait pratiquement les même valeur.
    vous me dites: « Il se peut également qu’au niveau de ton architecture réseau une cascade de switch puisse faire baisser le débit maximum théorique. » doit je comprendre que cascader des switch n’est pas forcément une bonne chose ? je m’excuse de poser toute ces questions mais je débute en étude de débit du réseau. connaiseriez vous un outil, si possible gratuit pour évaluer la charge réseau. Le débit théorique reste acceptable jusqu’à quelle valeur ?

    Encore merci pour votre aide

  • @bertrand: tu n’as pas à t’excuser… même Guy Pujolle a débuté un jour dans les réseau 😉

    Il faut dans un premier temps bien distinguer la charge, du débit réseau.

    La charge d’un réseau est la quantité d’infirmation transitant sur des équipements physiques (switch/routeur…) à un instant T. La charge évolue donc durant la journée en fonction de l’activité des utilisateurs. Dans une architecture « switchée » (c’est à dire avec des switchs et non pas des hubs), cette charge peut être différente d’un bout à l’autre de ton réseau. Il faut donc bien étudier le lieu du calcul de ta charge réseau (souvent au niveau des interfaces des routeurs qui concentrent le trafic). Tu peux calculer cette charge en utilisant un outil comme Ntop.

    Le débit réseau est la quantité maximum d’information sur un brin réseau donné (par exemple entre deux machine). Iperf permet de calculer ce débit réseau. Le débit réseau dépend donc des équipements traversés. De nos jours, les coeurs de réseau sont composés de switch de 100 voir 1000 Mbps. Sur un réseau non chargé, le débit théorique devrait donc se situer dans ces valeurs (environ 80 Mbps sur un coeur de réseau à 100 Mbps).

    Pour répondre à ta question il vaut mieux éviter de cascader les switch entre eux en utilisant des ports Ethernet. En effet, le siwtch qui sera en bout de chaine devra partager 100 Mbps pour l’ensemble de ces ports. Il existe par contre certains switch professionnels qui peuvent être cascadé par des câbles dédiés.

    N’hésites pas à te documenter avant de te lancer dans ce genre de mesure, sinon elle risque de ne pas être représentative de l’état de ton réseau.

  • bertrand

    Merci pour toutes ses informations préciseuses, je vais donc me documenter en commencant par lire le livre de Guy Pujol. Si je comprend bien, pour bien évaluer la charge du réseau il faut bien connaître l’architecture de son réseau. Voila rapidement comment est fait le réseau une dizaine de locaux technique reliés au coeur de réseau via des fibres, si je me branche dans chaque local technique et que je test la charge entre ce local et le coeur de réseau cela me donnera une idée assez réelle de la charge entre chaque local et le coeur de réseau et évaluer si il y a des soucis de ce coté là.

  • Merci pour ce petit tuto … exactement ce qu’il me fallait ! 😉 Ca m’a fait gagner un temps précieux 🙂

  • slt nicola, je suis interessé par iperf mais iperf mesure seulment le debit mais pas la bande passante?

  • hans

    est-ce que iperf peut mesuré la bande passante?

  • @hans: Iperf permet de mesurer la bande passante disponible entre deux points du réseaux. Il est aussi possible de générer un débit constant avec une valeur donnée en //.

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

  • Bedsyjames

    Bonjour, je voudrais à quoi correspond le kbit/s dans ipref, 1000bits/s ou 1024bit/s?
    J’utilise Jperf sous linux et l’option de la BP en UDP est donnée et Kbytes/s et Mbyte/s je voudrais savoir la correspondance de ces valeurs en bits/s.
    Merci.

  • pompoko

    bonjour petite question iperf nous permet il de connaître la capacité maximum de transfert ?

    • greg

      petit question à quoi peuvent servir les commandes qui change la taille des paquet UDP quelles sont les taille préconiser tout comme buffer lenght ou windows size ou le max segment size en tcp
      en vous remercient

      • C’est pour éviter la fragmentation des paquets UDP. Lors des tests il est préférable d’avoir une taille de paquet IP < à la MTU de ton réseau. Cette taille dépend de ton réseau...

  • Filoox

    Bonjour,
    y-a t il un moyen de mesurer la quantité de paquets perdus. Je génère par exemple 1000 paquets de 40 octets, et je veux savoir combien le serveur en a reçu. Idéalement, quels paquets a-t il perdu? (j’ai des pertes de paquets sur mon réseau: je voudrais donc générer un flux et être capable, par des captures de trames sur ls équipements intermédiaires, de voir quels paquets sont perdus)?