iperf – UDP Messungen

network switch with cables

Photo by Thomas Jensen on Unsplash

Das User Datagram Protocol, oder kurz UDP, ist ein einfaches, verbindungsloses Protokoll. Mit UDP Messungen können Aussagen über den Paketverlust und den Jitter (Laufzeitvarianz von Datenpaketen) gemacht werden.

Um UDP Messungen mit iperf durchführen zu können muss der Parameter --udp oder -u angegeben werden.

Im einfachsten Fall sieht ein Durchlauf wie folgt aus:
Server:

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.110, port 56938
[  5] local 192.168.1.102 port 5201 connected to 192.168.1.110 port 42556
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-1.00   sec   120 KBytes   983 Kbits/sec  42.358 ms  0/15 (0%)
[  5]   1.00-2.00   sec   128 KBytes  1.05 Mbits/sec  15.272 ms  0/16 (0%)
[  5]   2.00-3.00   sec   128 KBytes  1.05 Mbits/sec  5.610 ms  0/16 (0%)
[  5]   3.00-4.00   sec   128 KBytes  1.05 Mbits/sec  2.171 ms  0/16 (0%)
[  5]   4.00-5.00   sec   128 KBytes  1.05 Mbits/sec  0.960 ms  0/16 (0%)
[  5]   5.00-6.00   sec   128 KBytes  1.05 Mbits/sec  0.567 ms  0/16 (0%)
[  5]   6.00-7.00   sec   128 KBytes  1.05 Mbits/sec  0.363 ms  0/16 (0%)
[  5]   7.00-8.00   sec   128 KBytes  1.05 Mbits/sec  0.305 ms  0/16 (0%)
[  5]   8.00-9.00   sec   128 KBytes  1.05 Mbits/sec  0.300 ms  0/16 (0%)
[  5]   9.00-10.00  sec   128 KBytes  1.05 Mbits/sec  0.277 ms  0/16 (0%)
[  5]  10.00-10.03  sec  0.00 Bytes  0.00 bits/sec  0.277 ms  0/0 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-10.03  sec  0.00 Bytes  0.00 bits/sec  0.277 ms  0/159 (0%)

Client:

$ iperf3 -c 192.168.1.102 -u
Connecting to host 192.168.1.102, port 5201
[  4] local 192.168.1.110 port 42556 connected to 192.168.1.102 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec   120 KBytes   982 Kbits/sec  15  
[  4]   1.00-2.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   2.00-3.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   3.00-4.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   4.00-5.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   5.00-6.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   6.00-7.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   7.00-8.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   8.00-9.00   sec   128 KBytes  1.05 Mbits/sec  16  
[  4]   9.00-10.00  sec   128 KBytes  1.05 Mbits/sec  16  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec  1.24 MBytes  1.04 Mbits/sec  0.277 ms  0/159 (0%)  
[  4] Sent 159 datagrams

iperf Done.

Beim Server muss bei der Version 3 nicht angegeben werden, ob die Messung via UDP oder TCP durchgeführt werden soll. Beim Client muss aber mit dem Parameter --udp bzw. -u definiert werden, dass UDP verwendet werden soll.
Anhand der Ausgaben sieht man auch schon, dass mit einer Bandbreite von 1 Mbit/sec, einer Dauer von 10 Sekunden und einem Ausgabeintervall von 1 Sekunde als Defaultwerte gemessen wird.

Bandbreite bestimmen
1 Mbit/s ist in der heutigen Zeit von Gigabit-LAN nicht wirklich eine Last auf dem Netz. Deshalb kann mit --bandwidth #[KMG][/#] bzw. -b #[KMG][/#] die Bandbreite angegeben werden. Der erste Wert muss dabei angegeben werden und gibt die Bandbreite in bits/sec an. Mit K, M oder G kann dabei der Wert auch in Kbit/sec, Mbit/sec oder Gbit/sec angegeben werden. So steht z.B. 200M für eine Bandbreite von 200 Mbit/sec.
Mit einem Slash abgetrennt kann dazu noch ein Paket-Zähler für den Burst Mode angegeben werden. Dadurch können mehrere Pakete auf einmal gesendet werden und erst danach wird eine Pause eingelegt, während ohne Burst Mode die Pakete regelmässig über das Netz gesendet werden.

Im folgenden Beispiel (nur Clientseitig) wird wiederum 1Mbit/s gesendet, aber es werden 30 Pakete aufs Mal gesendet:

$ iperf3 -c 192.168.1.102 -u -b 1M/30
Connecting to host 192.168.1.102, port 5201
[  4] local 192.168.1.110 port 60799 connected to 192.168.1.102 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec   240 KBytes  1.96 Mbits/sec  30  
[  4]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec  0  
[  4]   2.00-3.00   sec   240 KBytes  1.97 Mbits/sec  30  
[  4]   3.00-4.00   sec  0.00 Bytes  0.00 bits/sec  0  
[  4]   4.00-5.00   sec   240 KBytes  1.97 Mbits/sec  30  
[  4]   5.00-6.00   sec   240 KBytes  1.97 Mbits/sec  30  
[  4]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec  0  
[  4]   7.00-8.00   sec   240 KBytes  1.97 Mbits/sec  30  
[  4]   8.00-9.00   sec  0.00 Bytes  0.00 bits/sec  0  
[  4]   9.00-10.00  sec   240 KBytes  1.97 Mbits/sec  30  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec  1.41 MBytes  1.18 Mbits/sec  0.496 ms  0/180 (0%)  
[  4] Sent 180 datagrams

iperf Done.

Dauer und Ausgabeintervall
Wie in den letzten beiden Durchgängen gesehen werden die Messungen per Default für einen Zeitraum von 10 Sekunden durchgeführt und dabei jede Sekunde eine Auswertung ausgegeben.
Mit dem Parameter --time # bzw. -t # kann beim Client die Aussendedauer in Sekunden angegeben werden. Das Report-Intervall kann mit --interval # bzw. -i # ebenfalls in Sekunden angegeben werden. Das Intervall kann dabei sowohl Client- wie auch Server-Seitig definiert werden.

Im folgenden Beispiel wird über einen Zeitraum von einer Minute (60 Sekunden) gesendet. Das Report-Intervall wird dabei beim Client auf 10 Sekunden und beim Server auf 20 Sekunden gesetzt.
Server:

$ iperf3 -s -i 20
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.110, port 56968
[  5] local 192.168.1.102 port 5201 connected to 192.168.1.110 port 39957
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-20.00  sec  2.51 MBytes  1.05 Mbits/sec  0.366 ms  0/321 (0%)
[  5]  20.00-40.00  sec  2.48 MBytes  1.04 Mbits/sec  0.338 ms  0/318 (0%)
[  5]  40.00-60.00  sec  2.50 MBytes  1.05 Mbits/sec  0.349 ms  0/320 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-60.00  sec  0.00 Bytes  0.00 bits/sec  0.349 ms  0/959 (0%)

Client:

$ iperf3 -c 192.168.1.102 -u -i 10 -t 60
Connecting to host 192.168.1.102, port 5201
[  4] local 192.168.1.110 port 39957 connected to 192.168.1.102 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-10.00  sec  1.24 MBytes  1.04 Mbits/sec  159  
[  4]  10.00-20.00  sec  1.25 MBytes  1.05 Mbits/sec  160  
[  4]  20.00-30.00  sec  1.25 MBytes  1.05 Mbits/sec  160  
[  4]  30.00-40.00  sec  1.25 MBytes  1.05 Mbits/sec  160  
[  4]  40.00-50.00  sec  1.25 MBytes  1.05 Mbits/sec  160  
[  4]  50.00-60.00  sec  1.25 MBytes  1.05 Mbits/sec  160  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-60.00  sec  7.49 MBytes  1.05 Mbits/sec  0.349 ms  0/959 (0%)  
[  4] Sent 959 datagrams

iperf Done.

Senderichtung
Ohne spezielle Angabe werden die Daten immer vom Client zum Server gesendet. Mit --reverse bzw. -R beim Client kann die Senderichtung umgekehrt werden, so dass der Server sendet und der Client empfängt.
Server:

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.110, port 56972
[  5] local 192.168.1.102 port 5201 connected to 192.168.1.110 port 52700
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  5]   0.00-1.00   sec   120 KBytes   983 Kbits/sec  15
[  5]   1.00-2.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   2.00-3.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   3.00-4.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   4.00-5.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   5.00-6.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   6.00-7.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   7.00-8.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   8.00-9.00   sec   128 KBytes  1.05 Mbits/sec  16
[  5]   9.00-10.00  sec   128 KBytes  1.05 Mbits/sec  16
[  5]  10.00-10.03  sec  16.0 KBytes  3.97 Mbits/sec  2
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagr
ams
[  5]   0.00-10.03  sec  1.26 MBytes  1.05 Mbits/sec  0.000 ms  0/161 (0%)

Client:

$ iperf3 -c 192.168.1.102 -u -R
Connecting to host 192.168.1.102, port 5201
Reverse mode, remote host 192.168.1.102 is sending
[  4] local 192.168.1.110 port 52700 connected to 192.168.1.102 port 5201
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-1.01   sec   136 KBytes  1.10 Mbits/sec  9.032 ms  0/17 (0%)  
[  4]   1.01-2.00   sec   128 KBytes  1.06 Mbits/sec  3.306 ms  0/16 (0%)  
[  4]   2.00-3.00   sec   128 KBytes  1.05 Mbits/sec  1.211 ms  0/16 (0%)  
[  4]   3.00-4.00   sec   128 KBytes  1.05 Mbits/sec  0.610 ms  0/16 (0%)  
[  4]   4.00-5.00   sec   128 KBytes  1.05 Mbits/sec  0.274 ms  0/16 (0%)  
[  4]   5.00-6.00   sec   128 KBytes  1.05 Mbits/sec  0.168 ms  0/16 (0%)  
[  4]   6.00-7.00   sec   128 KBytes  1.05 Mbits/sec  0.362 ms  0/16 (0%)  
[  4]   7.00-8.00   sec   128 KBytes  1.05 Mbits/sec  0.201 ms  0/16 (0%)  
[  4]   8.00-9.00   sec   128 KBytes  1.05 Mbits/sec  0.366 ms  0/16 (0%)  
[  4]   9.00-10.00  sec   128 KBytes  1.05 Mbits/sec  0.231 ms  0/16 (0%)  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec  1.26 MBytes  1.06 Mbits/sec  0.231 ms  0/161 (0%)  
[  4] Sent 161 datagrams

iperf Done.

Während bei der Vorwärtsrichtung beim Server der Jitter bei den Zwischenresultaten angegeben wurde wird bei der Aussendung vom Server zum Client der Jitter beim Client ausgegeben.

Fazit
Mit diesen Parametern sollten die wichtigsten UDP-Szenarien gemessen werden können. Weitere Parameter können der Hilfe bzw. dem Grundlagen-Artikel entnommen werden.