# iperf3 - измерение bandwidth _Команды · LinuxLab Knowledge Base_ **TL;DR:** `iperf3` - стандартный инструмент замера throughput TCP/UDP между двумя точками. Запускается парой server + client. Не для прода, а для теста сети. ## Базовый workflow ```bash # На стороне A - сервер iperf3 -s # слушает на :5201 # На стороне B - клиент, подключается к A iperf3 -c 10.0.0.1 # 10 секунд по умолчанию iperf3 -c 10.0.0.1 -t 30 # тест 30 секунд ``` Вывод клиента - таблица интервалов + summary: ``` [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 1.10 GBytes 9.45 Gbits/sec 0 1.62 MBytes ... [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 10.9 GBytes 9.41 Gbits/sec 0 sender [ 5] 0.00-10.00 sec 10.9 GBytes 9.41 Gbits/sec receiver ``` Главное - `Bitrate` (throughput) и `Retr` (TCP-retransmits - индикатор потерь / congestion на пути). ## Полезные флаги ```bash iperf3 -s -D # сервер в daemon (отвязка от терминала) iperf3 -s -p 9999 # другой порт iperf3 -c host -P 4 # -P: 4 параллельных стрима (бьёт single-flow лимит) iperf3 -c host -R # reverse: server шлёт client'у (для теста downlink) iperf3 -c host -u -b 100M # UDP-режим, target 100 Mbit/s iperf3 -c host -t 60 -i 2 # 60с тест, отчёт каждые 2 секунды iperf3 -c host -J # JSON-вывод (для парсинга) ``` ## Что подключить к выводу - **TCP test, низкий throughput, retr > 0** → потери на пути; проверь [cmd-tc](/kb/cmd-tc.md) qdisc, MTU, congestion control в [tcp-states](/kb/tcp-states.md) - **TCP test, низкий throughput, retr = 0** → bandwidth-delay product; маленькое окно или CPU-bound - **UDP test, packet loss > 0%** → реальные потери на маршруте ## Парный тест с tc netem Стандартное упражнение: измерить baseline → ухудшить сеть → сравнить: ```bash # Baseline iperf3 -c server -t 5 # Деградация на исходящем интерфейсе sudo tc qdisc add dev eth0 root netem delay 50ms loss 1% iperf3 -c server -t 5 # → Bitrate должен резко упасть (TCP не разгоняется при потерях) # Восстановление sudo tc qdisc del dev eth0 root ``` ## iperf2 vs iperf3 - **iperf2** (он же `iperf`) - старый, многопоточный, хорош для UDP-теста - **iperf3** - современный, single-thread, чище отчёт, JSON-вывод Для bidirectional одновременного теста на iperf3 используют **два параллельных запуска** (`-c host` + `-c host -R` параллельно), iperf2 делал это одной командой `-d`. ## Capability в контейнерах Для UDP-теста выше user-quota - может потребоваться `CAP_NET_RAW`. Базовый TCP-тест работает без особых привилегий. ## Команды ```bash iperf3 -s -D ``` Запустить сервер в фоне (daemonize); слушает :5201 ```bash iperf3 -c 10.0.0.1 -t 30 ``` 30-секундный TCP-тест к серверу ```bash iperf3 -c 10.0.0.1 -P 4 ``` 4 параллельных стрима - обходит single-flow лимит kernel'я ```bash iperf3 -c 10.0.0.1 -u -b 1G ``` UDP-тест с целевым bitrate 1 Gbit/s - покажет реальные потери ```bash iperf3 -c 10.0.0.1 -J -t 5 | jq '.end.sum_received.bits_per_second' ``` JSON-вывод для скриптов: достать только итоговый bitrate ## См. также - [TCP three-way handshake](/kb/tcp-handshake.md) - [UDP - User Datagram Protocol](/kb/udp-basics.md) - [ss - кто слушает и кто подключён](/kb/cmd-ss.md) - [tc - traffic control](/kb/cmd-tc.md) - [mtr - traceroute + ping в одном](/kb/cmd-mtr.md)