183 lines
6.4 KiB
Markdown
183 lines
6.4 KiB
Markdown
---
|
|
categories: network
|
|
title: Howto iperf
|
|
...
|
|
|
|
* Documentation : <https://iperf.fr/iperf-doc.php>
|
|
* Manpage : <https://manpages.debian.org/stable/iperf/iperf.1.en.html>
|
|
* Code source iperf v3 : <https://github.com/esnet/iperf>
|
|
* FAQ iperf v3 : <http://software.es.net/iperf/faq.html>
|
|
|
|
[iperf](http://software.es.net/iperf/) est un outil de diagnostic réseau permettant de mesurer le débit sur des réseaux IP.
|
|
|
|
|
|
## Principe
|
|
|
|
iperf doit être installé sur les deux machines entre lesquelles le débit est mesuré : il sera lancé en mode serveur sur l'une, et en mode client sur l'autre.
|
|
|
|
Si l'on utilise le protocole TCP, le débit sera aussi élevé que la liaison de bout en bout le permet ; avec le protocole UDP, le client devra choisir quel débit émettre ou recevoir, et un rapport affichera le nombre de paquets perdus.
|
|
|
|
iperf a été ré-écrit en version 3 (commande `iperf3`), avec notamment le support d'IPv6. Suivant les cas d'usage, nous utilisons encore iperf en version 2 (commande `iperf`) notamment dans le cas de tests en mode UDP où iperf3 a pas mal de bugs.
|
|
|
|
Par défaut iperf3 en mode serveur ouvre la socket réseau `TCP/5201`, pour iperf c'est `TCP/5001`.
|
|
|
|
|
|
## Installation
|
|
|
|
Sous Debian :
|
|
|
|
~~~
|
|
# apt install iperf iperf3
|
|
~~~
|
|
|
|
Sous OpenBSD :
|
|
|
|
~~~
|
|
# pkg_add iperf iperf3
|
|
~~~
|
|
|
|
|
|
## Utilisation basique
|
|
|
|
Lancer en mode serveur :
|
|
|
|
~~~
|
|
$ iperf3 -s
|
|
-----------------------------------------------------------
|
|
Server listening on 5201
|
|
-----------------------------------------------------------
|
|
~~~
|
|
|
|
Sur le client, on lance le test de débit pendant 10 secondes :
|
|
|
|
~~~
|
|
$ iperf3 -c 192.0.2.1 -t 10
|
|
Connecting to host 192.0.2.1, port 5201
|
|
[ 4] local 192.0.2.2 port 56832 connected to 192.0.2.1 port 5201
|
|
[ ID] Interval Transfer Bandwidth Retr Cwnd
|
|
[ 4] 0.00-1.00 sec 11.9 MBytes 99.8 Mbits/sec 0 129 KBytes
|
|
[ 4] 1.00-2.00 sec 11.3 MBytes 94.9 Mbits/sec 0 156 KBytes
|
|
[ 4] 2.00-3.00 sec 11.2 MBytes 93.8 Mbits/sec 0 156 KBytes
|
|
[ 4] 3.00-4.00 sec 11.1 MBytes 93.3 Mbits/sec 0 156 KBytes
|
|
[ 4] 4.00-5.00 sec 11.1 MBytes 92.8 Mbits/sec 0 163 KBytes
|
|
[ 4] 5.00-6.00 sec 11.1 MBytes 93.3 Mbits/sec 0 163 KBytes
|
|
[ 4] 6.00-7.00 sec 11.2 MBytes 93.8 Mbits/sec 0 163 KBytes
|
|
[ 4] 7.00-8.00 sec 11.2 MBytes 93.8 Mbits/sec 0 163 KBytes
|
|
[ 4] 8.00-9.00 sec 11.1 MBytes 92.8 Mbits/sec 0 163 KBytes
|
|
[ 4] 9.00-10.00 sec 11.2 MBytes 93.8 Mbits/sec 0 163 KBytes
|
|
- - - - - - - - - - - - - - - - - - - - - - - - -
|
|
[ ID] Interval Transfer Bandwidth Retr
|
|
[ 4] 0.00-10.00 sec 112 MBytes 94.2 Mbits/sec 0 sender
|
|
[ 4] 0.00-10.00 sec 111 MBytes 93.4 Mbits/sec receiver
|
|
|
|
iperf Done.
|
|
~~~
|
|
|
|
|
|
## Utilisation avancée
|
|
|
|
### Firewall
|
|
|
|
Afin de pouvoir utiliser iperf, il faut s'assurer que les ports entre le client et le serveur sont bien ouverts.
|
|
Par défaut il faut donc autoriser les flux TCP entre le port client (1024 et 65535) et le port serveur (5201).
|
|
|
|
### UDP
|
|
|
|
Par défaut en mode UDP, une bande passante de **1Mb/s** sera utilisée.
|
|
Il faut préciser la bande passante souhaitée pour le test avec l'option `-b`, par exemple pour 10Mb/s : `-b 10M`.
|
|
|
|
#### iperf (version 2)
|
|
|
|
Il faut lancer explicitement le serveur en mode UDP :
|
|
|
|
~~~
|
|
$ iperf -s -u
|
|
------------------------------------------------------------
|
|
Server listening on UDP port 5001
|
|
Receiving 1470 byte datagrams
|
|
UDP buffer size: 208 KByte (default)
|
|
------------------------------------------------------------
|
|
~~~
|
|
|
|
On peut alors lancer le client en mode UDP :
|
|
|
|
~~~
|
|
$ iperf -c 192.0.2.1 -u -b 10M
|
|
------------------------------------------------------------
|
|
Client connecting to 192.0.2.1, UDP port 5001
|
|
Sending 1470 byte datagrams, IPG target: 1176.00 us (kalman adjust)
|
|
UDP buffer size: 208 KByte (default)
|
|
------------------------------------------------------------
|
|
[ 3] local 192.0.2.2 port 50090 connected with 192.0.2.1 port 5001
|
|
[ ID] Interval Transfer Bandwidth
|
|
[ 3] 0.0-10.0 sec 11.9 MBytes 10.0 Mbits/sec
|
|
[ 3] Sent 8505 datagrams
|
|
[ 3] Server Report:
|
|
[ 3] 0.0-10.0 sec 11.9 MBytes 10.0 Mbits/sec 0.051 ms 0/ 8505 (0%)
|
|
|
|
~~~
|
|
|
|
#### iperf3
|
|
|
|
Avec iperf3, on ne lance pas le serveur en mode UDP, c'est le client qui va gérer la bascule sur le protocole UDP.
|
|
Ce comportement s'explique notamment pour des raisons de sécurité, pour éviter de pouvoir envoyer trop facilement un flux UDP vers n'importe quelle IP.
|
|
|
|
On lance donc le serveur de façon standard :
|
|
|
|
~~~
|
|
$ iperf3 -s
|
|
-----------------------------------------------------------
|
|
Server listening on 5201
|
|
-----------------------------------------------------------
|
|
~~~
|
|
|
|
Et on précise le mode UDP au niveau client :
|
|
|
|
~~~
|
|
$ iperf3 -c 192.0.2.1 -u -b 10M
|
|
Connecting to host 192.0.2.1, port 5201
|
|
[ 4] local 192.0.2.2 port 34378 connected to 192.0.2.1 port 5201
|
|
[ ID] Interval Transfer Bandwidth Total Datagrams
|
|
[ 4] 0.00-1.00 sec 1.09 MBytes 9.17 Mbits/sec 140
|
|
[ 4] 1.00-2.00 sec 1.19 MBytes 9.96 Mbits/sec 152
|
|
[...]
|
|
- - - - - - - - - - - - - - - - - - - - - - - - -
|
|
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
|
|
[ 4] 0.00-10.00 sec 11.8 MBytes 9.92 Mbits/sec 0.539 ms 0/1512 (0%)
|
|
[ 4] Sent 1512 datagrams
|
|
|
|
iperf Done.
|
|
~~~
|
|
|
|
|
|
### Options
|
|
|
|
Options générales intéressantes :
|
|
|
|
* `-p N` : utiliser un port spécifique
|
|
* `-i N` : afficher un rapport intermédiaire toutes les N secondes
|
|
* `-J` : sortie au format JSON (iperf3 uniquement)
|
|
|
|
Options intéressantes pour le serveur :
|
|
|
|
* `-D` : lancer en mode daemon
|
|
* `-1` : traiter un seul client et quitter (iperf3 uniquement)
|
|
|
|
Options intéressantes pour le client :
|
|
|
|
* `-t N` : transmission pendant N secondes (au lieu de 10 secondes par défaut)
|
|
* `-P N` : lancer N clients en parallèle
|
|
* `-d` : lancer une transmission bidirectionnelle simultanément (iperf v2 uniquement)
|
|
* `-r` : lancer une transmission bidirectionnelle séparément (iperf v2 uniquement)
|
|
* `-R` : lancer une transmission dans le sens inverse (le client reçoit, iperf3 uniquement)
|
|
|
|
|
|
## Serveurs iperf publics
|
|
|
|
Maintenir un serveur iperf public est complexe, la plupart des serveurs de la liste <https://iperf.fr/iperf-servers.php> sont injoignables en général. Voici les serveurs les plus fiables de la liste :
|
|
|
|
~~~
|
|
$ iperf3 -c ping.online.net
|
|
$ iperf3 -c iperf.eenet.ee
|
|
~~~
|