iperf – TCP Messungen

network switch with cables

Photo by Thomas Jensen on Unsplash

Das Transmission Control Protocol, oder kurz TCP, ist ein zuverlässiges, verbindungsorientiertes, paketvermitteltes Transportprotokoll. Mit TCP Messungen können Aussagen über die maximale Bandbreite gemacht werden.

Um TCP Messungen mit iperf durchführen zu können muss kein spezieller Parameter angegeben werden. Es darf aber nicht der Parameter --udp oder -u verwendet werden, da dieser für Messungen via UDP verwendet wird.

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

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.112, port 51459
[  5] local 192.168.1.112 port 5201 connected to 192.168.1.112 port 51460
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  99.0 MBytes   831 Mbits/sec
[  5]   1.00-2.00   sec  99.8 MBytes   837 Mbits/sec
[  5]   2.00-3.00   sec   101 MBytes   844 Mbits/sec
[  5]   3.00-4.00   sec   103 MBytes   860 Mbits/sec
[  5]   4.00-5.00   sec   108 MBytes   905 Mbits/sec
[  5]   5.00-6.00   sec   110 MBytes   923 Mbits/sec
[  5]   6.00-7.00   sec   103 MBytes   868 Mbits/sec
[  5]   7.00-8.00   sec   103 MBytes   861 Mbits/sec
[  5]   8.00-9.00   sec  77.9 MBytes   653 Mbits/sec
[  5]   9.00-10.00  sec  53.3 MBytes   447 Mbits/sec
[  5]  10.00-10.00  sec  71.3 KBytes   375 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.00  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.00  sec   957 MBytes   803 Mbits/sec                  receiver

Client:

$ iperf3 -c 192.168.1.112
Connecting to host 192.168.1.112, port 5201
[  4] local 192.168.96.129 port 54510 connected to 192.168.1.112 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.01   sec  99.7 MBytes   831 Mbits/sec    0   65.6 KBytes      
[  4]   1.01-2.00   sec  99.5 MBytes   837 Mbits/sec    0   65.6 KBytes      
[  4]   2.00-3.01   sec   101 MBytes   843 Mbits/sec    0   65.6 KBytes      
[  4]   3.01-4.00   sec   102 MBytes   863 Mbits/sec    0   65.6 KBytes      
[  4]   4.00-5.00   sec   108 MBytes   907 Mbits/sec    0   65.6 KBytes      
[  4]   5.00-6.00   sec   110 MBytes   921 Mbits/sec    0   65.6 KBytes      
[  4]   6.00-7.00   sec   104 MBytes   869 Mbits/sec    0   65.6 KBytes      
[  4]   7.00-8.00   sec   103 MBytes   859 Mbits/sec    0   65.6 KBytes      
[  4]   8.00-9.00   sec  77.9 MBytes   655 Mbits/sec    0   65.6 KBytes      
[  4]   9.00-10.00  sec  53.3 MBytes   447 Mbits/sec    0   65.6 KBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec   957 MBytes   803 Mbits/sec    0             sender
[  4]   0.00-10.00  sec   957 MBytes   803 Mbits/sec                  receiver

iperf Done.

Wie man sehen kann ist TCP die Standard-Messung bei iperf3. Es gibt keinen expliziten Parameter für TCP, durch das Fehlen des Paramters --udp bzw. -u wird immer TCP verwendet.
Anhand der Ausgaben sieht man auch schon, dass mit einer Dauer von 10 Sekunden und einem Ausgabeintervall von 1 Sekunde als Defaultwerte gemessen wird. Es wird dabei versucht, die Verbindung zwischen Client und Server möglichst auszulasten („bandwith unlimited“).

Bandbreite beschränken
Wenn man nicht die komplette Bandbreite verwenden will kann die Bandbreite mit --bandwidth #[KMG][/#] bzw. -b #[KMG][/#] beschränkt 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 mit 5Mbit/s gesendet, es werden aber 10 Pakete aufs Mal gesendet:

$ iperf3 -c 192.168.1.112 -b 5M/10
Connecting to host 192.168.1.112, port 5201
[  4] local 192.168.96.130 port 48636 connected to 192.168.1.112 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  1.41 MBytes  11.8 Mbits/sec    0   64.2 KBytes      
[  4]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec    0   64.2 KBytes      
[  4]   2.00-3.00   sec   579 KBytes  4.74 Mbits/sec    0   65.6 KBytes      
[  4]   3.00-4.00   sec  1.25 MBytes  10.5 Mbits/sec    0   74.1 KBytes      
[  4]   4.00-5.00   sec  0.00 Bytes  0.00 bits/sec    0   74.1 KBytes      
[  4]   5.00-6.00   sec  1.25 MBytes  10.5 Mbits/sec    0   64.2 KBytes      
[  4]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec    0   64.2 KBytes      
[  4]   7.00-8.00   sec   519 KBytes  4.25 Mbits/sec    0   71.3 KBytes      
[  4]   8.00-9.00   sec   485 KBytes  3.97 Mbits/sec    0   68.4 KBytes      
[  4]   9.00-10.00  sec  1.25 MBytes  10.5 Mbits/sec    0   64.2 KBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  6.71 MBytes  5.62 Mbits/sec    0             sender
[  4]   0.00-10.00  sec  6.71 MBytes  5.62 Mbits/sec                  receiver

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.112, port 49763
[  5] local 192.168.1.112 port 5201 connected to 192.168.1.112 port 49764
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-20.00  sec  1.32 GBytes   567 Mbits/sec
[  5]  20.00-40.00  sec  1.26 GBytes   541 Mbits/sec
[  5]  40.00-60.00  sec  1.31 GBytes   565 Mbits/sec
[  5]  60.00-60.00  sec   207 KBytes   689 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-60.00  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-60.00  sec  3.89 GBytes   558 Mbits/sec                  receiver

Client:

$ iperf3 -c 192.168.1.112 -i 10 -t 60
Connecting to host 192.168.1.112, port 5201
[  4] local 192.168.96.130 port 48640 connected to 192.168.1.112 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-10.00  sec   687 MBytes   576 Mbits/sec    0   65.6 KBytes      
[  4]  10.00-20.00  sec   665 MBytes   558 Mbits/sec    0   65.6 KBytes      
[  4]  20.00-30.00  sec   661 MBytes   555 Mbits/sec    0   65.6 KBytes      
[  4]  30.00-40.00  sec   629 MBytes   527 Mbits/sec    0   65.6 KBytes      
[  4]  40.00-50.00  sec   624 MBytes   524 Mbits/sec    0   65.6 KBytes      
[  4]  50.00-60.00  sec   722 MBytes   606 Mbits/sec    0   65.6 KBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-60.00  sec  3.89 GBytes   558 Mbits/sec    0             sender
[  4]   0.00-60.00  sec  3.89 GBytes   558 Mbits/sec                  receiver

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.112, port 50019
[  5] local 192.168.1.112 port 5201 connected to 192.168.1.112 port 50020
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   114 MBytes   953 Mbits/sec
[  5]   1.00-2.00   sec   110 MBytes   918 Mbits/sec
[  5]   2.00-3.00   sec   115 MBytes   962 Mbits/sec
[  5]   3.00-4.00   sec   112 MBytes   940 Mbits/sec
[  5]   4.00-5.00   sec   107 MBytes   900 Mbits/sec
[  5]   5.00-6.00   sec   117 MBytes   982 Mbits/sec
[  5]   6.00-7.00   sec   112 MBytes   942 Mbits/sec
[  5]   7.00-8.00   sec   114 MBytes   959 Mbits/sec
[  5]   8.00-9.00   sec   100 MBytes   839 Mbits/sec
[  5]   9.00-10.00  sec  92.6 MBytes   776 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.00  sec  1.07 GBytes   917 Mbits/sec                  sender
[  5]   0.00-10.00  sec  0.00 Bytes  0.00 bits/sec                  receiver

Client:

$ iperf3 -c 192.168.1.112 -R
Connecting to host 192.168.1.112, port 5201
Reverse mode, remote host 192.168.1.112 is sending
[  4] local 192.168.96.130 port 48644 connected to 192.168.1.112 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   109 MBytes   918 Mbits/sec                  
[  4]   1.00-2.00   sec   109 MBytes   917 Mbits/sec                  
[  4]   2.00-3.00   sec   116 MBytes   970 Mbits/sec                  
[  4]   3.00-4.00   sec   112 MBytes   936 Mbits/sec                  
[  4]   4.00-5.00   sec   109 MBytes   912 Mbits/sec                  
[  4]   5.00-6.00   sec   117 MBytes   982 Mbits/sec                  
[  4]   6.00-7.00   sec   112 MBytes   940 Mbits/sec                  
[  4]   7.00-8.00   sec   114 MBytes   959 Mbits/sec                  
[  4]   8.00-9.00   sec  98.5 MBytes   826 Mbits/sec                  
[  4]   9.00-10.00  sec  92.7 MBytes   778 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  1.07 GBytes   917 Mbits/sec                  sender
[  4]   0.00-10.00  sec  1.06 GBytes   914 Mbits/sec                  receiver

iperf Done.

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