iperf3: как правильно измерять пропускную способность между серверами
iperf3 показывает только то, что способен передать канал между двумя серверами, если не перегружен публичный тестовый сервер, учтены настройки TCP-окна и исключены прокси. Рассказываем, какие метрики отдаёт утилита, как запустить тест и почему её результаты не равны скорости до сайта в интернете.
iperf3 показывает только то, что способен передать канал между двумя серверами — и то, если вы не перегрузили публичный тестовый сервер, не забыли про TCP-окно и не запустили тест через прокси.
Что именно измеряет iperf3
Утилита отдаёт три ключевые метрики: Bitrate (пропускная способность в битах в секунду), Transfer (объём переданных данных) и Retr (число повторных передач TCP). Для UDP добавляются Lost/Total Datagrams и задержка. Пример вывода:
[ 5] 0.00-10.01 sec 2.18 GBytes 1.87 Gbits/sec receiver
[SUM] 0.0-10.0 sec 1.23 MBytes 1.03 Mbits/sec 0.123 ms 0/123 (0%)
Первая строка — TCP, вторая — UDP. Цифры честные, но только для канала между двумя узлами. Они не учитывают задержки, джиттер, маршрутизацию через CDN или ограничения провайдера на последней миле — то есть всё то, что определяет, как быстро откроется браузер.
Запуск теста: минимальный набор
На обеих машинах нужен iperf3. На Debian/Ubuntu:
sudo apt install iperf3
Сервер на одной машине:
iperf3 -s -p 5201
Клиент на другой:
iperf3 -c 192.168.10.10 -t 20 -P 4 -w 1m -J > report.json
-t 20— двадцатисекундный тест, достаточно для стабильного замера.-P 4— четыре параллельных потока, чтобы загрузить канал.-w 1m— TCP-окно 1 МБ, чтобы выжать максимум, если обе стороны его поддерживают.-J— JSON-выход для дальнейшего парсинга.
В Windows открываем порт 5201 в файерволе:
New-NetFirewallRule -DisplayName 'iPerf-Server-Inbound-TCP' -Direction Inbound -Protocol TCP -LocalPort 5201 -Action Allow
Для ESXi iperf3 встроен в vSAN, но запуск требует временного отключения защиты:
esxcli network firewall set --enabled false
localcli system settings advanced set -o /User/execInstalledOnly -i 0
Публичные серверы: удобно, но ненадёжно
В сети хватает списков «бесплатных» серверов:
iperf.selectel.ru(Москва)speedtest.kolnet.ru(Россия)iperf.worldstream.nl(Нидерланды)iperf.donapex.net(публичный стенд)
Но у них два системных ограничения. Во-первых, только один тест на сервер: если второй клиент стучится на iperf.selectel.ru, он получит «port already in use». Во-вторых, в час пик цифры могут просесть на 20–30 % из-за нагрузки на CPU или сеть. Проверьте честность: запустите тест три раза в разное время и сравните. Если разброс больше 15 %, сервер не подходит для эталонных замеров.
TCP против UDP: где правда, а где — нет
TCP даёт максимальную пропускную способность, но результат зависит от настроек. Без увеличения окна (-w) канал на 10 Гбит/с может показать только 4–5 Гбит/с. Пример из документации:
[ 5] 0.00-10.01 sec 2.18 GBytes 1.87 Gbits/sec receiver
Здесь 1.87 Гбит/с — результат после двадцатисекундного теста с четырьмя потоками и окном 1 МБ. Без этих параметров цифра будет ниже.
UDP полезен для джиттера и потерь, но не для максимальной скорости. Ограничение по умолчанию в некоторых сборках — 1 Мбит/с, но его можно снять ключом -b. Пример:
[SUM] 0.0-10.0 sec 1.23 MBytes 1.03 Mbits/sec 0.123 ms 0/123 (0%)
Если UDP теряет 5 % пакетов, а TCP показывает 9 Гбит/с, это не значит, что канал идеален — просто TCP компенсирует потери повторными передачами. Для диагностики задержек UDP полезен. Для максимальной скорости — только TCP с правильными настройками.
Три сценария, где iperf3 бесполезен
- Скорость до сайта в интернете. Даже если iperf3 между серверами в Москве показывает 9 Гбит/с, Speedtest до того же хоста может выдать 800 Мбит/с. Причина — маршрутизация через CDN, ограничения провайдера, задержки на последней миле.
- Пропускная способность Wi-Fi или домашней сети. iperf3 измеряет только проводной канал между серверами.
- Реальная нагрузка приложений. iperf3 создаёт искусственный трафик, а не показывает, как браузер или база данных нагружают сеть.
Что делать, если цифры не совпадают с ожиданиями
Если iperf3 показывает меньше, чем должен, проверьте:
- Обе машины работают с одной версией iperf3.
- Порт 5201 открыт на файерволе обеих машин.
- Параметры
-wи-Pучтены на обеих сторонах. - Тест запущен не через NAT, прокси или VPN.
Если разница между TCP и UDP значительна, канал нестабилен или перегружен. Если результаты скачут от теста к тесту, сервер или клиент нагружен другими задачами.
Не подменяйте iperf3 Speedtest. iperf3 — инструмент для инженеров, которые проверяют канал между серверами. Speedtest — для пользователей, которые хотят узнать Mbps до ближайшего Yandex-сервера.