iperf3 ist das Standard-Tool für Netzwerk-Performance-Tests. Es misst TCP und UDP Durchsatz zwischen zwei Endpunkten und hilft bei der Diagnose von Bandbreiten-Problemen.

Installation

# Debian/Ubuntu
apt install iperf3

# RHEL/CentOS
dnf install iperf3

# Version prüfen
iperf3 --version

Grundlagen

Server starten

# Standard-Server (Port 5201)
iperf3 -s

# Mit spezifischem Port
iperf3 -s -p 5001

# Im Hintergrund
iperf3 -s -D

Client-Test

# Basis-Test zum Server
iperf3 -c server.example.de

# Mit spezifischem Port
iperf3 -c server.example.de -p 5001

# Testdauer festlegen (Standard: 10s)
iperf3 -c server.example.de -t 30

TCP-Tests

Basis-Test

# Einfacher TCP-Test
iperf3 -c server -t 30

# Ausgabe:
# [ ID] Interval           Transfer     Bandwidth       Retr
# [  5]   0.00-30.00  sec  2.74 GBytes   785 Mbits/sec    0    sender
# [  5]   0.00-30.00  sec  2.74 GBytes   784 Mbits/sec         receiver

Parallele Streams

# 4 parallele Verbindungen
iperf3 -c server -P 4

# 10 parallele Verbindungen
iperf3 -c server -P 10

Window-Größe

# TCP Window-Größe setzen
iperf3 -c server -w 256K

# Automatisch optimal
iperf3 -c server -w 0

Bidirektionaler Test

# Test in beide Richtungen
iperf3 -c server --bidir

# Oder sequenziell
iperf3 -c server -d

Reverse-Modus

# Server sendet, Client empfängt
iperf3 -c server -R

UDP-Tests

Basis-UDP

# UDP-Test (Standard: 1 Mbit/s)
iperf3 -c server -u

# Mit spezifischer Bandbreite
iperf3 -c server -u -b 100M

# Maximale Bandbreite testen
iperf3 -c server -u -b 0

UDP-Ausgabe

# Ausgabe:
# [ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total
# [  5]   0.00-10.00  sec   119 MBytes   100 Mbits/sec  0.012 ms  0/85714 (0%)

Paketgröße

# UDP-Paketgröße festlegen
iperf3 -c server -u -l 1400

# MTU-Größe testen
iperf3 -c server -u -l 1472  # 1500 MTU - IP/UDP Header

Erweiterte Optionen

Intervall und Ausgabe

# Intervall-Berichte (alle 2 Sekunden)
iperf3 -c server -i 2

# JSON-Ausgabe
iperf3 -c server -J > results.json

# Ohne Output während Test
iperf3 -c server --forceflush

Verbindungsoptionen

# IPv6 erzwingen
iperf3 -c server -6

# Spezifisches Interface binden
iperf3 -c server -B 192.168.1.10

# TOS/DSCP setzen
iperf3 -c server -S 0x28

Datenmenge statt Zeit

# 1 GB übertragen
iperf3 -c server -n 1G

# 10 MB übertragen
iperf3 -c server -n 10M

Multi-Stream Tests

# Mehrere parallele Streams für maximalen Durchsatz
iperf3 -c server -P 8 -t 30

# Nützlich für:
# - 10 Gbit+ Verbindungen
# - Hohe Latenz-Links
# - Multi-Core Systeme

Server-Optionen

# Server mit Logging
iperf3 -s --logfile /var/log/iperf3.log

# Server nur einmal ausführen
iperf3 -s -1

# Mehrere Clients erlauben
# (Standard: ein Client gleichzeitig)

Firewall

# Port freigeben
# UFW
ufw allow 5201/tcp
ufw allow 5201/udp

# firewalld
firewall-cmd --permanent --add-port=5201/tcp
firewall-cmd --permanent --add-port=5201/udp
firewall-cmd --reload

Typische Szenarien

# Mit höherer Latenz - mehr Streams nötig
iperf3 -c remote-server -P 4 -t 60 -w 512K

Jumbo Frames prüfen

# MTU 9000 testen
iperf3 -c server -u -l 8972 -b 10G

10 Gbit Verbindung

# Mehrere Streams für Line-Rate
iperf3 -c server -P 8 -t 60

Server-zu-Server im Rechenzentrum

# Kurze Latenz, hoher Durchsatz
iperf3 -c server -P 1 -t 30

# Bei nicht erreichtem Line-Rate
iperf3 -c server -P 4 -w 4M -t 30

Troubleshooting

Häufige Probleme

# "Connection refused"
# → Server läuft nicht oder Firewall blockiert

# Niedrige Bandbreite
# → Mehr parallele Streams (-P)
# → Größeres Window (-w)
# → CPU-Last auf beiden Seiten prüfen

# Hoher Paketverlust bei UDP
# → Bandbreite reduzieren (-b)
# → Netzwerk-Queues prüfen

CPU-Auslastung

# CPU-Affinity setzen
iperf3 -c server -A 0

# Server auf CPU 1
iperf3 -s -A 1

Benchmark-Script

#!/bin/bash
# network-benchmark.sh

SERVER=$1
RESULTS="iperf-$(date +%Y%m%d-%H%M%S).txt"

echo "Network Benchmark to $SERVER" > $RESULTS
echo "================================" >> $RESULTS

echo "TCP Single Stream:" >> $RESULTS
iperf3 -c $SERVER -t 30 >> $RESULTS

echo -e "\nTCP 4 Streams:" >> $RESULTS
iperf3 -c $SERVER -P 4 -t 30 >> $RESULTS

echo -e "\nTCP Reverse:" >> $RESULTS
iperf3 -c $SERVER -R -t 30 >> $RESULTS

echo -e "\nUDP 100M:" >> $RESULTS
iperf3 -c $SERVER -u -b 100M -t 30 >> $RESULTS

echo "Results saved to $RESULTS"
cat $RESULTS

Öffentliche Server

# Öffentliche iperf3-Server (für Internet-Speed)
iperf3 -c iperf.he.net
iperf3 -c bouygues.iperf.fr
iperf3 -c speedtest.wtnet.de

Zusammenfassung

| Option | Beschreibung | |--------|--------------| | -c | Client-Modus | | -s | Server-Modus | | -p | Port | | -t | Testdauer (Sekunden) | | -P | Parallele Streams | | -u | UDP-Modus | | -b | Bandbreite (UDP) | | -R | Reverse-Modus | | -w | Window-Größe | | -J | JSON-Ausgabe |

| Metrik | Bedeutung | |--------|-----------| | Bandwidth | Durchsatz | | Retr | TCP Retransmissions | | Jitter | UDP Latenz-Varianz | | Lost | Verlorene UDP-Pakete |

| Port | Standard | |------|----------| | 5201 | iperf3 |

Fazit

iperf3 ist unverzichtbar für Netzwerk-Diagnose. TCP-Tests messen echte Anwendungs-Bandbreite. UDP-Tests prüfen Paketverlust und Jitter. Parallele Streams sind wichtig für Hochgeschwindigkeits-Links. Regelmäßige Tests helfen, Performance-Probleme früh zu erkennen.