Tester la bande passante entre deux machines Windows avec iperf
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à effectuer un test de débit (bande passante) entre deux machines sous Windows, grâce à l'outil iperf, qui fonctionne en mode client-serveur. En complément de cet article, je vous encourage à lire l'article "Comment calculer la bande passante d'un réseau avec iperf ?" déjà présent sur le site.
L'outil iperf n'a pas reçu de mises à jour depuis plusieurs années, mais il est stable et efficace sur les dernières versions de Windows. Il s'agit d'un outil populaire qui prend en charge Windows, macOS, Linux, Android, que l'on peut aussi utiliser sur un serveur VMware ESXi (ce qui peut s'avérer utile pour calculer la bande passante entre deux hyperviseurs). Il existe aussi des versions pour certains routeurs et firewall comme Pfsense. Léger et portable, cet outil s'utilise en ligne de commande même s'il existe des versions graphiques comme jperf, mais qui implique d'installer Java sur la machine locale.
Dans cet exemple, je vais déployer iperf sur deux machines Windows : une machine Windows 11 et une machine Windows Server 2019, dans le but d'effectuer un test de débit au travers d'un VPN (OpenVPN). Voici un cas d'usage, mais on peut en imaginer plein d'autres avec cet outil très pratique, notamment en phase de troubleshooting.
Puisque iperf permet d'effectuer un test de débit entre deux hôtes, via le réseau, et avec des flux TCP et UDP, on peut utiliser cet outil pour calculer la bande passante à un instant t, pour effectuer un stress test sur une ligne avec un test iperf de plusieurs heures, etc.
II. Télécharger et installer iperf
Avant de commencer, rendez-vous sur le site officiel de iperf dans le but de télécharger le fichier "iperf-3.1.3-win64.zip" :
Une fois que vous avez l'archive ZIP, il suffit d'extraire son contenu. Vous obtiendrez un dossier avec deux fichiers : iperf3.exe et cygwin1.dll. Ni plus, ni moins.
Vous devez répéter cette opération sur les deux machines. Une machine jouera le rôle de serveur iperf et l'autre machine jouera le rôle de client iperf.
Sur le serveur iperf, ici représenté par mon serveur Windows Server 2019, je dois créer deux règles de pare-feu pour autoriser les flux entrants en UDP et TCP sur le port 5201, ce dernier étant le port par défaut utilisé par iperf. Un autre port peut être défini au moment de lancer le serveur.
Pour créer les règles de pare-feu Windows, vous pouvez utiliser l'interface graphique de Windows, netsh ou PowerShell. Voici la méthode PowerShell :
New-NetFirewallRule -DisplayName "iPerf Server - Flux entrant UDP" -Protocol UDP -LocalPort 5201 -Direction Inbound -Action Allow | Enable-NetFirewallRule New-NetFirewallRule -DisplayName "iPerf Server - Flux entrant TCP" -Protocol TCP -LocalPort 5201 -Direction Inbound -Action Allow | Enable-NetFirewallRule
Sans ces règles, le client iperf renverra probablement l'erreur "iperf3: error - unable to connect to server: Connection timed out" au moment de faire le test, car il ne parviendra pas à se connecter au serveur iPerf.
Voilà, iperf est en place sur le client et le serveur, avec les règles de pare-feu en plus à créer côté serveur. Passons à la suite.
III. Démarrer le serveur iperf
L'exécutable iperf est présent sur le serveur, mais le serveur iperf n'est pas lancé pour le moment. Pour démarrer le serveur iperf avec les options par défaut, il suffit d'exécuter cette commande (en se positionnant dans le répertoire de l'exécutable) :
iperf3.exe -s
Ici, il s'agit bien d'un "s" minuscule. Je tiens à le préciser, car la casse a une importance avec les options d'iperf.
Le serveur iperf est actif et en écoute, sur le port 5201.
Dans le cas où l'on souhaite utiliser un autre port, on peut le préciser de cette façon :
iperf3.exe -s -p 24000
Côté client, il faudra penser à préciser le port puisque l'on n’utilise pas la valeur par défaut.
IV. Lancer un test de débit iperf
Lorsque l'on va lancer le client iperf pour qu'il vienne se connecter sur notre serveur iperf, cela aura pour effet de lancer un test de débit entre les deux machines. Pour lancer iperf en mode client, c'est l'option "-c" qui doit être utilisé.
Imaginons que l'adresse IP du serveur cible soit "192.168.10.11". Sur la machine Windows 11, faisant office de client iperf, voici la commande à lancer :
iperf3.exe -c 192.168.10.11
On pourrait utiliser un nom DNS à la place de l'adresse IP. On pourrait également préciser des options pour personnaliser le test ; c'est ce que nous verrons par la suite. Par défaut, et comme le montre l'image ci-dessous, le test est effectué pendant 10 secondes. Pendant cette durée, des paquets sont transférés du client vers le serveur, afin de calculer le débit.
Sur l'image ci-dessus, nous pouvons visualiser la période de temps (Interval), la quantité de données transférées (Transfer) et la bande passante (Bandwidth).
Pour aller plus loin, nous pouvons utiliser les options d'iperf pour créer un test personnalisé. Voici un exemple :
.\iperf3.exe -c 192.168.100.11 -t 180 -i 10 -f m
Dans cet exemple, on cible toujours le serveur iperf "192.168.100.11", mais on effectue un test sur 180 secondes (-t 180), en affichant les statistiques dans la console toutes les 10 secondes (-i 10). Enfin, l'option "-f" permet d'indiquer le bande passante en mégabits par seconde (m) ou mégaoctets par seconde (M). Pour avoir des valeurs en giga sur des liens à très haut débit, utilisez "g" ou "G". Avec ces options, on peut imaginer déclencher un test sur une heure avec un retour console toutes les minutes.
Par défaut, le client iperf va monter une seule connexion à destination du serveur iperf. Mais, il est possible de lancer plusieurs streams en parallèle pour charger au maximum la ligne en utilisant l'option "-P" suivi d'un nombre de connexions. Dans l'exemple ci-dessous, on lance 4 flux en même temps.
iperf3.exe -c 192.168.100.11 -t 30 -i 3 -f M -P 4
Lorsque l'on regarde la console, on voit clairement la différence. A chaque fois, la ligne [SUM] indique la somme totale pour les données transférées.
Actuellement, c'est le client qui émet et le serveur qui reçoit. Pour inverser les rôles, afin que le serveur émette et que le client reçoive, tout en initiant depuis le client, vous devez utiliser l'option "-R".
Pour aller plus loin et diversifier vos tests, voici quelques options à connaître :
- L'option "-u" pour utiliser des connexions UDP à la place de TCP qui est le mode par défaut
- L'option "-b" permet de préciser la bande passante souhaitée. C'est utile avec le mode UDP qui est limité à 1 Mbit/s par défaut, contrairement au TCP qui est illimité
- L'option "-w" permet de définir la taille de la fenêtre TCP
V. Tests de débit avec les serveurs publics
Dans cet exemple, j'effectue un test de débit entre deux machines Windows qui peuvent communiquer entre elles au travers d'un VPN. Toutefois, on peut aussi lancer iperf en mode client sur un ordinateur et cibler un serveur iperf public. L'intérêt est de pouvoir tester son débit Internet en ligne de commande !
La liste des serveurs publics est disponible sur le site officiel. Il y a des serveurs un peu partout dans le monde, mais il y a tout de même une forte concentration de serveurs en France.
C'est bien précisé que ces serveurs acceptent une connexion à la fois, et donc, un test à la fois. Si le serveur est occupé, il convient d'en sélectionner un autre ou de patienter (parfois, c'est un peu la galère). Si vous avez une infrastructure Cloud, vous pouvez tout à fait monter votre propre serveur iperf pour vos tests.
VI. Conclusion
Voilà, vous venez de découvrir ou peut être redécouvrir iperf, un outil simple et pratique pour effectuer des tests de débit personnalisé entre deux machines.
Pour visualiser l'ensemble des options disponibles, vous pouvez exécuter :
iperf3.exe # ou iperf3.exe -h
Merci Florian pour cet article qui m’a bien servi concernant une problématique de lenteur au travers d’un VPN justement avec serveur de fichiers
Pour votre info, Microsoft déconseille l’utilisation de iperf3 sous Windows : https://techcommunity.microsoft.com/t5/networking-blog/three-reasons-why-you-should-not-use-iperf3-on-windows/ba-p/4117876