Speedtest показывает, как быстро сервер скачивает данные из ближайшего узла сети, но часто нужно другое. Например, понять, с какой скоростью будут передаваться резервные копии между двумя вашими серверами, или проверить, не упирается ли перенос сайта в канал. Для таких замеров используют iperf3. Он гоняет данные между двумя точками, которые вы выбираете сами, и показывает, сколько реально проходит по каналу. В этой статье разберём, как устроен замер, установим iperf3, проверим канал до публичного сервера и между своими серверами и научимся читать результат. Все замеры мы сделали на тестовом сервере с Debian 12.
Что и как измеряет iperf3
iperf3 состоит из двух частей, сервера и клиента, и это одна и та же программа, запущенная в разных режимах. На одной машине запускают сервер, он открывает порт 5201 и ждёт подключения. На другой запускают клиент, который подключается к серверу и в течение заданного времени, по умолчанию 10 секунд, передаёт данные так быстро, как только позволяет сеть. Обе стороны считают, сколько байтов прошло за каждую секунду, и в конце выводят среднюю скорость. Важно, что данные генерируются в памяти и никуда не записываются, поэтому на результат не влияет скорость диска. Измеряется именно сеть.
Скорость TCP-соединения зависит не только от ширины канала. Отправитель не может бесконечно посылать данные без подтверждений. Он отправляет порцию, ждёт ответа и только потом расширяет «окно» отправки. Чем дальше друг от друга серверы и чем больше задержка, тем дольше идёт каждое подтверждение и тем медленнее одно соединение набирает скорость. Кроме того, если по пути теряются пакеты, TCP считает это признаком перегрузки и притормаживает. Количество повторных отправок iperf3 показывает в колонке Retr. Поэтому на дальних маршрутах одно соединение часто не может занять весь канал, и тогда помогает замер в несколько параллельных потоков.
Ещё одна деталь касается направления. По умолчанию данные идут от клиента к серверу, то есть вы измеряете отдачу своей машины. Чтобы измерить скорость в обратную сторону, используется режим -R, в котором отправляет уже сервер. На нашем тестовом сервере эти два направления дали разные цифры, и это нормально, потому что пути и загрузка каналов в разные стороны не совпадают.
1. Установите iperf3
apt update && apt install -y iperf3Во время установки Debian спросит Start Iperf3 as a daemon automatically?, то есть запускать ли iperf3 как постоянную службу. Ответьте No. Сервер iperf3 нужен только на время замера, и держать его открытым постоянно незачем.
Если замер будет между двумя вашими серверами, установите iperf3 на оба.
2. Проверьте канал до публичного сервера
Самый быстрый способ проверить сервер это замер до публичного сервера iperf3. Мы использовали сервер ping.online.net в Париже, он принимает подключения на портах с 5200 по 5209.
# Отдача, данные идут с вашего сервера
iperf3 -c ping.online.net -p 5200 -t 10
# Приём, данные идут на ваш сервер
iperf3 -c ping.online.net -p 5200 -t 10 -R
Отдача с тестового сервера, в среднем 612 Мбит/с

Приём на тестовый сервер, в среднем 761 Мбит/с
Главное в выводе это две итоговые строки под пунктиром.
- sender показывает, сколько отправила передающая сторона.
- receiver показывает, сколько дошло до принимающей. Ориентируйтесь на неё.
- Bitrate это средняя скорость за весь замер.
- Retr показывает, сколько пакетов пришлось отправить повторно.
Строки выше итога показывают скорость за каждую секунду. Если она сильно скачет, канал неравномерно загружен или по пути теряются пакеты.
Публичный сервер может быть занят
Публичный сервер обслуживает один замер за раз. Если вы получили ошибку the server is busy running a test, попробуйте другой порт из диапазона 5200–5209 или повторите замер через минуту.
3. Проверьте канал между своими серверами
Если нужно узнать скорость между двумя вашими серверами, например перед переносом данных, запустите iperf3 в режиме сервера на одном из них.
iperf3 -sСервер начнёт слушать порт 5201 и будет ждать подключений, пока вы не остановите его сочетанием Ctrl + C. Если на этом сервере включён брандмауэр UFW, временно откройте порт.
ufw allow 5201/tcpНа втором сервере запустите клиент, указав IP-адрес первого.
# Скорость от второго сервера к первому
iperf3 -c IP-адрес-первого-сервера -t 10
# И в обратную сторону
iperf3 -c IP-адрес-первого-сервера -t 10 -R
# В четыре параллельных потока
iperf3 -c IP-адрес-первого-сервера -t 10 -P 4После замера остановите сервер iperf3 и закройте порт командой ufw delete allow 5201/tcp.
Не мерьте на одном сервере
Замер, где клиент и сервер работают на одной машине, например iperf3 -c 127.0.0.1, показывает скорость передачи внутри памяти, а не сети. На тестовом сервере такой замер дал 30,1 Гбит/с, и к реальному каналу эта цифра отношения не имеет.
Полезные параметры
-t 30 # длительность замера в секундах
-P 4 # несколько параллельных потоков
-R # обратное направление, сервер отправляет клиенту
-p 5202 # другой порт
-u -b 100M # замер по UDP с заданной скоростью 100 Мбит/с
-4 или -6 # принудительно IPv4 или IPv6Частые вопросы
iperf3: error - the server is busy running a test. try again later
Сервер iperf3 уже выполняет чей-то замер, а одновременно он обслуживает только один. На публичных серверах это обычное дело. Попробуйте другой порт из тех, что поддерживает сервер, или повторите через минуту.
iperf3: error - unable to connect to server: Connection refused
На нужном адресе и порту никто не слушает. Проверьте, что на первом сервере запущена команда iperf3 -s, и что порт указан правильно.
Подключение висит и заканчивается таймаутом
Скорее всего, порт закрыт брандмауэром. Откройте порт 5201 на сервере, где запущен iperf3 -s, как показано выше.
Скорость ниже, чем ожидалось
- Сделайте замер в несколько потоков с параметром
-P 4. Если суммарная скорость заметно выше, одно соединение упирается в задержку на маршруте, а сам канал свободен. - Сравните оба направления, с
-Rи без. - Проверьте маршрут и потери пакетов, как описано в статье про трассировку.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Официальный сайт: https://f3cloud.com