Скорость сети любят измерять «на глаз»: скачал файл, посмотрел на цифру в браузере и сделал вывод. Такой замер смешивает канал, диск, сервер и накладные расходы протокола. iperf3 даёт более честную картину: два хоста обмениваются данными по известному сценарию, а результат показывается в мегабитах в секунду, с потерями и повторами. Разберём установку, типовые команды, чтение вывода и ошибки, из-за которых цифры получаются заниженными.
Что именно измеряет iperf3
Утилита создаёт TCP- или UDP-поток между клиентом и сервером и считает, сколько данных прошло за интервал. Это пропускная способность конкретного маршрута в конкретный момент, а не «скорость тарифа» провайдера. На результат влияют процессор, сетевой адаптер, драйвер, Wi-Fi, виртуальные коммутаторы и даже размер окна TCP. Поэтому один и тот же канал может дать разные числа утром и вечером, на одном ноутбуке и на другом.
iperf3 несовместим с iperf2: это разные протоколы и разные порты по умолчанию. Если на другой стороне запущен старый iperf, клиент просто не подключится. Проверяйте версию на обоих концах и используйте одинаковые сборки.
Установка и запуск сервера
Пакет есть в репозиториях большинства дистрибутивов. На одной машине запускается сервер, на другой — клиент. Сервер должен быть доступен по сети, а порт 5201 — открыт в межсетевом экране.
sudo apt install iperf3
iperf3 -s -p 5201
sudo ufw allow 5201/tcp
Для постоянного тестового стенда удобно завести службу systemd. Запускайте её от отдельного пользователя и не выставляйте сервер в публичный интернет без необходимости: это диагностический инструмент, а не сервис общего назначения.
[Unit]
Description=iperf3 server
After=network-online.target
[Service]
ExecStart=/usr/bin/iperf3 -s -p 5201
Restart=on-failure
User=iperf
[Install]
WantedBy=multi-user.target
После сохранения файла выполните systemctl daemon-reload и systemctl enable --now iperf3. Проверить, что порт слушается, можно командой ss -tlnp.
Первый замер
Базовый тест длится десять секунд и использует одно TCP-соединение. Для современных каналов этого мало: один поток часто упирается в процессор или в задержку. Запускайте несколько параллельных потоков и увеличьте время замера, чтобы отбросить всплески.
iperf3 -c 192.168.1.50 -t 30 -P 4
iperf3 -c 192.168.1.50 -t 30 -P 4 -R
iperf3 -c 192.168.1.50 -t 30 -P 4 --bidir
Параметр -R меняет направление: данные отправляет сервер, то есть проверяется приём на клиенте. Флаг --bidir гоняет трафик одновременно в обе стороны и показывает два независимых результата. Для домашнего канала важно мерить оба направления: провайдеры нередко дают разную скорость отдачи и приёма. Тридцати секунд обычно хватает, чтобы соединение вышло на плато; для каналов с большим произведением задержки на полосу добавьте время и ключ --get-server-output, чтобы увидеть статистику со стороны сервера.
UDP, JSON и настройка окна
UDP-режим показывает потери и джиттер, но не регулирует скорость сам: её нужно задавать флагом -b. Начните с значения ниже ожидаемого канала и повышайте, пока потери не станут заметными. JSON удобен для сохранения истории и построения графиков.
iperf3 -c 192.168.1.50 -u -b 200M -t 20
iperf3 -c 192.168.1.50 -u -b 200M -t 20 -R
iperf3 -c 192.168.1.50 -t 60 -O 5 -J > result.json
iperf3 -c 192.168.1.50 -t 30 -w 256K -M 1400
Ключ -O 5 исключает первые пять секунд из итоговой статистики — полезно, когда соединение разгоняется не сразу. -w задаёт размер окна TCP, -M — максимальный размер сегмента. Менять их стоит только при понимании, что делает сеть: неверные значения легко ухудшают результат.
Как читать вывод
- Bitrate. Основная цифра, скорость передачи. Переведите её в мегабайты в секунду делением на восемь, если сравниваете с загрузкой файлов.
- Retr. Количество повторных передач TCP. Ненулевое значение на локальной сети — повод искать проблему; небольшие значения на дальней линии допустимы.
- Cwnd. Размер окна перегрузки. Если он постоянно мал, маршрут или приёмник ограничивают поток.
- Sender и Receiver. Итоговые строки для отправителя и получателя. Расхождение говорит о потерях или о том, что данные не успевают обрабатываться.
- Lost и Total. В UDP-режиме — потери и общее число датаграмм. Потери выше долей процента обычно уже слышны в голосовых сервисах.
- Jitter. Вариация задержки. Для реального времени важнее стабильность, чем пиковая скорость.
Не путайте биты и байты: гигабитный линк в идеале даёт около 940 Мбит/с полезной нагрузки, а не 1000. Часть полосы съедают заголовки, а часть — ограничения драйвера.
Типичные ошибки
Если цифры заметно ниже ожидаемых, сначала проверьте базу: адрес, порт, линк и загрузку процессора. Часто проблема не в канале, а в том, что тест идёт через Wi-Fi или виртуальный интерфейс.
ss -tlnp 'sport = :5201'
ethtool eth0 | grep -E 'Speed|Duplex'
nstat -az TcpRetransSegs
ip -brief address
- Разные версии. iperf2 и iperf3 несовместимы, а сообщение об ошибке бывает невнятным.
- Закрытый порт. Проверьте firewall на обеих машинах и на промежуточном роутере.
- Один поток. Без
-Pтест упирается в ядро одного соединения. Для 10G и выше это критично. - Wi-Fi. Беспроводной канал делит полосу с соседями, а ретрансляции снижают результат в разы.
- CPU и энергосбережение. Слабый процессор или режим экономии энергии режут скорость раньше, чем сеть.
- Асимметрия. Обратный тест может показать совсем другую цифру из-за настроек маршрутизатора.
- Виртуализация. Виртуальный коммутатор и NAT добавляют накладные расходы; для чистого замера используйте мост.
Чек-лист честного замера
- Запустите сервер на проводном хосте и убедитесь, что порт доступен.
- Проверьте скорость линка через
ethtoolи отсутствие ошибок на интерфейсе. - Сделайте прямой и обратный тест по 30–60 секунд с четырьмя потоками.
- Повторите замер два-три раза в разное время и сравните разброс.
- Сохраните результат в JSON, чтобы не спорить о цифрах по памяти.
- Для UDP добавьте потери и джиттер, но не используйте UDP для оценки «скорости интернета».
Итог
iperf3 хорош тем, что отделяет сеть от всего остального и даёт воспроизводимые числа. Запустите сервер, снимите прямой и обратный результат, посмотрите на повторы и потери — и только потом делайте выводы о канале. Аккуратный замер занимает несколько минут, зато экономит часы споров с провайдером и поисков несуществующей проблемы.