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.
ainsi que 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”
Merci pour toutes ces informations, c’est très intéressant.