> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/network/iperf3-guide.md](https://docs.f3cloud.com/ru/network/iperf3-guide.md).

# iperf3 – как проверить скорость канала между серверами

Как проверить скорость канала между серверами программой iperf3. Установка на Debian и Ubuntu, режимы сервера и клиента, замер в обе стороны и в несколько потоков, публичные серверы iperf3, как читать результат и почему локальный тест ничего не показывает. Проверено на Debian 12.

Speedtest показывает, как быстро сервер скачивает данные из ближайшего узла сети, но часто нужно другое. Например, понять, с какой скоростью будут передаваться резервные копии между двумя вашими серверами, или проверить, не упирается ли перенос сайта в канал. Для таких замеров используют **iperf3**. Он гоняет данные между двумя точками, которые вы выбираете сами, и показывает, сколько реально проходит по каналу. В этой статье разберём, как устроен замер, установим iperf3, проверим канал до публичного сервера и между своими серверами и научимся читать результат. Все замеры мы сделали на тестовом сервере с Debian 12.

***

## Что и как измеряет iperf3

iperf3 состоит из двух частей, сервера и клиента, и это одна и та же программа, запущенная в разных режимах. На одной машине запускают сервер, он открывает порт 5201 и ждёт подключения. На другой запускают клиент, который подключается к серверу и в течение заданного времени, по умолчанию 10 секунд, передаёт данные так быстро, как только позволяет сеть. Обе стороны считают, сколько байтов прошло за каждую секунду, и в конце выводят среднюю скорость. Важно, что данные генерируются в памяти и никуда не записываются, поэтому на результат не влияет скорость диска. Измеряется именно сеть.

Скорость TCP-соединения зависит не только от ширины канала. Отправитель не может бесконечно посылать данные без подтверждений. Он отправляет порцию, ждёт ответа и только потом расширяет «окно» отправки. Чем дальше друг от друга серверы и чем больше задержка, тем дольше идёт каждое подтверждение и тем медленнее одно соединение набирает скорость. Кроме того, если по пути теряются пакеты, TCP считает это признаком перегрузки и притормаживает. Количество повторных отправок iperf3 показывает в колонке **Retr**. Поэтому на дальних маршрутах одно соединение часто не может занять весь канал, и тогда помогает замер в несколько параллельных потоков.

Ещё одна деталь касается направления. По умолчанию данные идут от клиента к серверу, то есть вы измеряете отдачу своей машины. Чтобы измерить скорость в обратную сторону, используется режим `-R`, в котором отправляет уже сервер. На нашем тестовом сервере эти два направления дали разные цифры, и это нормально, потому что пути и загрузка каналов в разные стороны не совпадают.

***

## 1. Установите iperf3

```bash
apt update && apt install -y iperf3
```

Во время установки Debian спросит **Start Iperf3 as a daemon automatically?**, то есть запускать ли iperf3 как постоянную службу. Ответьте <kbd>No</kbd>. Сервер iperf3 нужен только на время замера, и держать его открытым постоянно незачем.

Если замер будет между двумя вашими серверами, установите iperf3 на оба.

***

## 2. Проверьте канал до публичного сервера

Самый быстрый способ проверить сервер это замер до публичного сервера iperf3. Мы использовали сервер `ping.online.net` в Париже, он принимает подключения на портах с 5200 по 5209.

```bash
# Отдача, данные идут с вашего сервера
iperf3 -c ping.online.net -p 5200 -t 10

# Приём, данные идут на ваш сервер
iperf3 -c ping.online.net -p 5200 -t 10 -R
```

<figure><img src="https://docs.f3cloud.com/img/iperf3-upload.png" alt="Замер iperf3 до ping.online.net, по секундам и итог 612 Мбит/с у получателя"><figcaption><p>Отдача с тестового сервера, в среднем 612 Мбит/с</p></figcaption></figure>

<figure><img src="https://docs.f3cloud.com/img/iperf3-reverse.png" alt="Замер iperf3 в режиме -R, данные идут к серверу, итог 761 Мбит/с"><figcaption><p>Приём на тестовый сервер, в среднем 761 Мбит/с</p></figcaption></figure>

Главное в выводе это две итоговые строки под пунктиром.

* **sender** показывает, сколько отправила передающая сторона.
* **receiver** показывает, сколько дошло до принимающей. Ориентируйтесь на неё.
* **Bitrate** это средняя скорость за весь замер.
* **Retr** показывает, сколько пакетов пришлось отправить повторно.

Строки выше итога показывают скорость за каждую секунду. Если она сильно скачет, канал неравномерно загружен или по пути теряются пакеты.

> **Публичный сервер может быть занят.**
>
> Публичный сервер обслуживает один замер за раз. Если вы получили ошибку **the server is busy running a test**, попробуйте другой порт из диапазона 5200–5209 или повторите замер через минуту.

***

## 3. Проверьте канал между своими серверами

Если нужно узнать скорость между двумя вашими серверами, например перед переносом данных, запустите iperf3 в режиме сервера на одном из них.

```bash
iperf3 -s
```

Сервер начнёт слушать порт **5201** и будет ждать подключений, пока вы не остановите его сочетанием <kbd>Ctrl</kbd> + <kbd>C</kbd>. Если на этом сервере включён брандмауэр UFW, временно откройте порт.

```bash
ufw allow 5201/tcp
```

На втором сервере запустите клиент, указав IP-адрес первого.

```bash
# Скорость от второго сервера к первому
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 Гбит/с, и к реальному каналу эта цифра отношения не имеет.

***

## Полезные параметры

```bash
-t 30     # длительность замера в секундах
-P 4      # несколько параллельных потоков
-R        # обратное направление, сервер отправляет клиенту
-p 5202   # другой порт
-u -b 100M  # замер по UDP с заданной скоростью 100 Мбит/с
-4 или -6   # принудительно IPv4 или IPv6
```

***

## Частые вопросы

<details>

<summary>iperf3: error - the server is busy running a test. try again later</summary>

Сервер iperf3 уже выполняет чей-то замер, а одновременно он обслуживает только один. На публичных серверах это обычное дело. Попробуйте другой порт из тех, что поддерживает сервер, или повторите через минуту.

</details>

<details>

<summary>iperf3: error - unable to connect to server: Connection refused</summary>

На нужном адресе и порту никто не слушает. Проверьте, что на первом сервере запущена команда `iperf3 -s`, и что порт указан правильно.

</details>

<details>

<summary>Подключение висит и заканчивается таймаутом</summary>

Скорее всего, порт закрыт брандмауэром. Откройте порт 5201 на сервере, где запущен `iperf3 -s`, как показано выше.

</details>

<details>

<summary>Скорость ниже, чем ожидалось</summary>

1. Сделайте замер в несколько потоков с параметром `-P 4`. Если суммарная скорость заметно выше, одно соединение упирается в задержку на маршруте, а сам канал свободен.
2. Сравните оба направления, с `-R` и без.
3. Проверьте маршрут и потери пакетов, как описано в статье про [трассировку](https://docs.f3cloud.com/ru/vps/network-troubleshooting-traceroute.md).

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
