Les Carnets de Byfeel domotique , Objets connectés , DIY , Programmation, Nouvelles Technologies ….

Tutoriel : iperf3 – mesurez son débit

Aujourd’hui , un tuto rapide , pour expliquer comment utilisez le logiciel iperf3 pour mesurer le debit entre deux points de votre réseau . Cet utilitaire est très utilisé dans la plupart des tests professionnel , que l’on peut trouver sur la toile.
Chez moi , il me sert à optimiser mon reseau , sur le positionnement de mes points d’accés sans fils , repeteur wifi , boitier CPL , switch , NAS , etc ….

Il me permet ainsi de detecter les zones blanches , via mon smartphone , afin de positionner au mieux les répéteurs wifi.

Installation de l’utilitaire

L’installation de iperf3 , est très simple . Il suffit de se rendre sur le site d’iperf est de télécharger la version pour son système d’exploitation.

iperf , supporte tous les systèmes d’exploitation ( windows , mac , linux .. ) il existe des applications pour smartphone ( android et ios ).

iperf peut être utilisé à la fois comme client ou comme serveur. Pour utiliser iperf , il faut l’installer aux deux extrémités de la chaine à tester.

Première utilisation de iperf

Une fois le programme récupéré , copiez le dans un dossier et lancez le en ligne de commande . Sans paramètres , vous avez la page d’aide qui s’affiche.

iperf3: parameter error - must either be a client (-c) or server (-s)

Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Server or Client:
  -p, --port      #         server port to listen on/connect to
  -f, --format    [kmgKMG]  format to report: Kbits, Mbits, KBytes, MBytes
  -i, --interval  #         seconds between periodic bandwidth reports
  -F, --file name           xmit/recv the specified file
  -B, --bind      <host>    bind to a specific interface
  -V, --verbose             more detailed output
  -J, --json                output in JSON format
  --logfile f               send output to a log file
  -d, --debug               emit debugging output
  -v, --version             show version information and quit
  -h, --help                show this message and quit
Server specific:
  -s, --server              run in server mode
  -D, --daemon              run the server as a daemon
  -I, --pidfile file        write PID file
  -1, --one-off             handle one client connection then exit
Client specific:
  -c, --client    <host>    run in client mode, connecting to <host>
  -u, --udp                 use UDP rather than TCP
  -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)
                            (default 1 Mbit/sec for UDP, unlimited for TCP)
                            (optional slash and packet count for burst mode)
  -t, --time      #         time in seconds to transmit for (default 10 secs)
  -n, --bytes     #[KMG]    number of bytes to transmit (instead of -t)
  -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead of -t or -n)
  -l, --len       #[KMG]    length of buffer to read or write
                            (default 128 KB for TCP, 8 KB for UDP)
  --cport         <port>    bind to a specific client port (TCP and UDP, default: ephemeral port)
  -P, --parallel  #         number of parallel client streams to run
  -R, --reverse             run in reverse mode (server sends, client receives)
  -w, --window    #[KMG]    set window size / socket buffer size
  -M, --set-mss   #         set TCP/SCTP maximum segment size (MTU - 40 bytes)
  -N, --no-delay            set TCP/SCTP no delay, disabling Nagle's Algorithm
  -4, --version4            only use IPv4
  -6, --version6            only use IPv6
  -S, --tos N               set the IP 'type of service'
  -Z, --zerocopy            use a 'zero copy' method of sending data
  -O, --omit N              omit the first n seconds
  -T, --title str           prefix every output line with this string
  --get-server-output       get results from server
  --udp-counters-64bit      use 64-bit counters in UDP test packets

[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

iperf3 homepage at: http://software.es.net/iperf/
Report bugs to:     https://github.com/esnet/iperf

Le premier paramètre en renseigné et le mode de fonctionnement : mode client (-c) ou en mode serveur (-s). En mode client il faudra renseigner, en deuxième paramètre , l’adresse ip ou le non reseau de l’appareil a tester ( en mode serveur ) .

Afin de tester rapidement , il existe des serveurs iperf en ligne ( voir sur le site d’iperf ) : Avec un test sur le serveur de volia , cela donne :

iperf3 -c iperf.volia.net

Connecting to host iperf.volia.net, port 5201
[  6] local 192.168.1.100 port 51723 connected to 77.120.3.236 port 5201
[ ID] Interval           Transfer     Bandwidth
[  6]   0.00-1.00   sec   159 KBytes  1.30 Mbits/sec                  
[  6]   1.00-2.00   sec  60.5 KBytes   496 Kbits/sec                  
[  6]   2.00-3.00   sec   104 KBytes   854 Kbits/sec                  
[  6]   3.00-4.00   sec   104 KBytes   852 Kbits/sec                  
[  6]   4.00-5.00   sec   104 KBytes   849 Kbits/sec                  
[  6]   5.00-6.00   sec   104 KBytes   856 Kbits/sec                  
[  6]   6.00-7.00   sec   104 KBytes   852 Kbits/sec                  
[  6]   7.00-8.00   sec   104 KBytes   849 Kbits/sec                  
[  6]   8.00-9.00   sec   114 KBytes   939 Kbits/sec                  
[  6]   9.00-10.00  sec  48.7 KBytes   398 Kbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  6]   0.00-10.00  sec  1007 KBytes   825 Kbits/sec                  sender
[  6]   0.00-10.00  sec   879 KBytes   720 Kbits/sec                  receiver

Les résultats , via les serveur en ligne, peuvent varier en fonction de leur utilisation . ici les test indiquent que ma bande passante est de 825 Kbits/s en emission et de 720 Kbits/s en reception.

Pour rappel : 1 ko = 1 kBytes = 8 kbits .

Le mode serveur

Dans cet exemple , je vais tester le traffic entre deux de mes ordinateurs ( un PC relié en WIFI , via mon point d’accés ) et un mac ( relié en wifi sur le même point d’accés , et relié aussi au point d’accés via un cable RJ45 ) . Cela me permettra de tester ma liaison wifi entre les deux PC ainsi que ma liaison wifi -> RJ45 .

Pour cela , je lance le mode serveur sur le mac ( qui dispose des deux connections – donc deux IP ) .

./iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

le logiciel se positionne en attente , sur le port 5201 ( par défaut ) , il est possible de modifier le port avec les paramètres optionnels.

Sur le PC , je lance une première fois la commande avec l’adresse ip , correspondant à la carte WIFI . les résultats s’affichent à la fois sur la fenêtre serveur et client .

iperf3 -c 192.168.1.102     ( ip carte wifi du mac iperf en mode serveur )

Vu serveur
Accepted connection from 192.168.1.59, port 60184
[  5] local 192.168.1.102 port 5201 connected to 192.168.1.59 port 60185
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  2.93 MBytes  24.6 Mbits/sec                  
[  5]   1.00-2.00   sec  2.98 MBytes  25.0 Mbits/sec                  
[  5]   2.00-3.00   sec  2.96 MBytes  24.8 Mbits/sec                  
[  5]   3.00-4.00   sec  2.97 MBytes  24.9 Mbits/sec                  
[  5]   4.00-5.00   sec  3.07 MBytes  25.8 Mbits/sec                  
[  5]   5.00-6.00   sec  3.10 MBytes  26.0 Mbits/sec                  
[  5]   6.00-7.00   sec  3.06 MBytes  25.6 Mbits/sec                  
[  5]   7.00-8.00   sec  3.12 MBytes  26.2 Mbits/sec                  
[  5]   8.00-9.00   sec  3.07 MBytes  25.8 Mbits/sec                  
[  5]   9.00-10.00  sec  3.11 MBytes  26.1 Mbits/sec                  
[  5]  10.00-10.08  sec   247 KBytes  26.7 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.08  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.08  sec  30.6 MBytes  25.5 Mbits/sec                  receiver

iperf3 -c 192.168.1.105     ( ip carte RJ45 du mac iperf en mode serveur )
Vu serveur
Accepted connection from 192.168.1.59, port 60162
 [  5] local 192.168.1.105 port 5201 connected to 192.168.1.59 port 60163
 [ ID] Interval           Transfer     Bandwidth
 [  5]   0.00-1.00   sec  3.95 MBytes  33.2 Mbits/sec                  
 [  5]   1.00-2.00   sec  4.18 MBytes  35.1 Mbits/sec                  
 [  5]   2.00-3.00   sec  4.08 MBytes  34.3 Mbits/sec                  
 [  5]   3.00-4.00   sec  3.95 MBytes  33.1 Mbits/sec                  
 [  5]   4.00-5.00   sec  3.87 MBytes  32.5 Mbits/sec                  
 [  5]   5.00-6.00   sec  4.00 MBytes  33.5 Mbits/sec                  
 [  5]   6.00-7.00   sec  4.04 MBytes  33.9 Mbits/sec                  
 [  5]   7.00-8.00   sec  4.12 MBytes  34.6 Mbits/sec                  
 [  5]   8.00-9.00   sec  4.10 MBytes  34.4 Mbits/sec                  
 [  5]   9.00-10.00  sec  4.10 MBytes  34.4 Mbits/sec                  
 [  5]  10.00-10.05  sec   223 KBytes  35.4 Mbits/sec                  
 - - - - - - - - - - - - - - - - - - - - - - - - -
 [ ID] Interval           Transfer     Bandwidth
 [  5]   0.00-10.05  sec  0.00 Bytes  0.00 bits/sec                  sender
 [  5]   0.00-10.05  sec  40.6 MBytes  33.9 Mbits/sec                  receiver

Les résultats montrent bien la différence de débit entre une connexion wifi et physique.

Les options avançées

Ces résultats , sont à prendre avec une certaines mesures. Selon les environnements ,il faudra adapter les options par défaut d’iperf.

Si je reprend , le même test entre mon PC et mon Mac via le wifi , mais en ajustant la commande client sous Windows

iperf3 -c 192.168.1.102 -i 2 -w 4m -t 20
cela donne

Accepted connection from 192.168.8.59, port 50118
[  5] local 192.168.8.102 port 5201 connected to 192.168.8.59 port 50119
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  16.1 MBytes   135 Mbits/sec                  
[  5]   1.00-2.00   sec  14.4 MBytes   121 Mbits/sec                  
[  5]   2.00-3.00   sec  6.08 MBytes  50.8 Mbits/sec                  
[  5]   3.00-4.00   sec  5.95 MBytes  50.2 Mbits/sec                  
[  5]   4.00-5.00   sec  11.5 MBytes  96.0 Mbits/sec                  
[  5]   5.00-6.00   sec  13.6 MBytes   114 Mbits/sec                  
[  5]   6.00-7.00   sec  14.7 MBytes   123 Mbits/sec                  
[  5]   7.00-8.00   sec  14.2 MBytes   119 Mbits/sec                  
[  5]   8.00-9.00   sec  7.01 MBytes  58.8 Mbits/sec                  
[  5]   9.00-10.00  sec  14.7 MBytes   124 Mbits/sec                  
[  5]  10.00-11.00  sec  14.4 MBytes   120 Mbits/sec                  
[  5]  11.00-12.00  sec  15.1 MBytes   127 Mbits/sec                  
[  5]  12.00-13.00  sec  14.9 MBytes   125 Mbits/sec                  
[  5]  13.00-14.00  sec  14.5 MBytes   121 Mbits/sec                  
[  5]  14.00-15.00  sec  14.0 MBytes   118 Mbits/sec                  
[  5]  15.00-16.00  sec  10.9 MBytes  91.6 Mbits/sec                  
[  5]  16.00-17.00  sec  10.2 MBytes  85.6 Mbits/sec                  
[  5]  17.00-18.00  sec  14.8 MBytes   124 Mbits/sec                  
[  5]  18.00-19.00  sec  15.5 MBytes   130 Mbits/sec                  
[  5]  19.00-20.00  sec  14.8 MBytes   124 Mbits/sec                  
[  5]  20.00-20.02  sec   220 KBytes  87.8 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-20.02  sec   257 MBytes   108 Mbits/sec                  sender
[  5]   0.00-20.02  sec  0.00 Bytes  0.00 bits/sec                  receiver
-----------------------------------------------------------

J’obtiens un débit moyen de 108 Mbits/sec ( un peu plus réaliste que les 25 Mbits/s du test précédent ).

Quels sont ces options :

  • i : Réglage de l’intervalle ( ici réglé à 2s ) , par défaut il est à 1s
  • w: taille du tampon socket (TCP Windows size ) sous windows c’est important de le modifier ( attention une faible valeur donnera des faibles performances ) . ici 4m équivaut à 4000000 ( 4 mo ).
  • t : Durée du test ( par défaut 10s ) , ici mis a 20s

Autres options :

Par défaut les données sont envoyés du client vers le serveur , il est possible de tester dans l’autre sens , en utilisant l’option -R .

f : Permet de formater les résultats en affichant les valeurs en kbits , Mbits ou Gbits ( k,m,g ) ou en Octet ( Byte ) avec ( K,M,G ).

p : Pour changer le numero de port

Exemple ci dessous , avec iperf installé en mode serveur sur mon NAS.

./iperf3 -c 192.168.1.215 -f g -t 20 
Connecting to host 192.168.1.215, port 5201
[  4] local 192.168.1.105 port 54911 connected to 192.168.1.215 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   113 MBytes  0.94 Gbits/sec                  
[  4]   1.00-2.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   2.00-3.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   3.00-4.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   4.00-5.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   5.00-6.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   6.00-7.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   7.00-8.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   8.00-9.00   sec   112 MBytes  0.94 Gbits/sec                  
[  4]   9.00-10.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  10.00-11.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  11.00-12.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  12.00-13.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  13.00-14.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  14.00-15.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  15.00-16.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  16.00-17.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  17.00-18.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  18.00-19.00  sec   112 MBytes  0.94 Gbits/sec                  
[  4]  19.00-20.00  sec   112 MBytes  0.94 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-20.00  sec  2.19 GBytes  0.94 Gbits/sec                  sender
[  4]   0.00-20.00  sec  2.19 GBytes  0.94 Gbits/sec                  receiver

Je teste la liaison RJ45 entre mon serveur et mon Mac , ce qui donne un débit proche de 1Gbits/s .

je vous laisse découvrir les autres options.

Tester depuis un smartphone ou tablette

Pour cela , j’utilise l’application HE.NET Network Tools disponible sous IOS et android . Cette application est une boite à outil , pour tester le réseau , et inclus iperf.

Ci dessous , un aperçu des deux ecrans ( android ou IOS ) : Connecté sur un réseau 2,4 ghz ( pour l’android ) et en 5 ghz ( pour l’IOS ) .

Un serveur Iperf à la maison

Si vous avez un serveur NAS équipé de docker ( comme Synology par exemple ) , il est trés facile de mettre en place un serveur Iperf.

Il suffit de suivre la documentation fournis par le site docker hub .

Dans les prérequis , il faut installer et activer Docker sur le Synology.

Activation de docker , via le centre de paquet

ainsi que SSH .

activation de SSH

Une fois ces conditions effectués , il suffit de se connecter en ssh au Synology ,puis de lancer en mode super user , la commande suivante :

sudo docker run  -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s

// la premiere fois , chargera automatiquement l'image puis executera le mode serveur

Unable to find image 'networkstatic/iperf3:latest' locally
latest: Pulling from networkstatic/iperf3
fdd5d7827f33: Already exists 
a3ed95caeb02: Already exists 
22274e444c23: Already exists 
Digest: sha256:12c4ad04039b7dc7e5183984ea4dc7e2015b439b3b5c2c48f3993d425c3996d9
Status: Downloaded newer image for networkstatic/iperf3:latest
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Votre serveur iperf et en écoute sur votre NAS. Ne pas terminer la connexion ( fermer la fenêtre terminal uniquement ) .

Dans le cas d’un redémarrage ou si vous fermer le conteneur , il faudra relancer le serveur iperf avec la commande suivante ( identique à la premiere , mais pas de téléchargement de l’image dans ce cas ).

sudo docker run  -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s

Conclusion

Je me sers régulièrement de iperf pour les tests via mes répéteurs wifi , afin de determiner le meilleur endroit .Si vous désirez en savoir plus , il existe de nombreux tutos sur internet à ce sujet.

Commentaire sur “Tutoriel : iperf3 – mesurez son débit”

Les commentaires sont fermés.