Установка, настройка и использование iPerf
iPerf является кроссплатформенным приложением и может быть установлен на любую популярную операционную систему. В данной инструкции будет рассмотрена установка сервера на Linux CentOS и клиента как на последнем, так и Microsoft Windows.
Установка сервера/клиента
По сути, нет отдельного iPerf для сервера или клиента — это один и тот же программный продукт, который может запускаться в режиме сервера или выполнять клиентские команды.
Для начала выполняем установку расширенного репозитория:
1 |
yum install epel-release |
Устанавливаем iPerf:
1 |
yum install iperf3 |
Открываем порт в брандмауэре:
1 2 3 |
firewall-cmd --permanent --add-port=5201/tcp firewall-cmd --permanent --add-port=5201/udp firewall-cmd --reload |
* в данном примере мы открыли порт 5201 (для iPerf по умолчанию) для пакетов TCP и UDP.
Запускаем сервер:
1 |
iperf3 -s |
На экране появится:
1 2 3 |
----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- |
Сервер ждет запросов.
Клиентские запросы и проверка сервера
Напомню, что клиент может быть установлен на любую систему. Также, как в первом случае, выполняем установку клиента на другой компьютер в сети.
После можно сразу выполнить команду:
1 |
iperf3 -c 192.168.0.15 |
* где 192.168.0.15 — iPerf сервер.
На клиенте мы увидим что-то подобное:
1 2 3 4 5 6 |
[ 4] local 192.168.0.20 port 47068 connected to 192.168.0.15 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 104 MBytes 873 Mbits/sec 10 391 KBytes [ 4] 1.00-2.00 sec 110 MBytes 921 Mbits/sec 4 393 KBytes [ 4] 2.00-3.00 sec 111 MBytes 928 Mbits/sec 1 478 KBytes [ 4] 3.00-4.00 sec 104 MBytes 875 Mbits/sec 5 423 KBytes |
* где:
- 192.168.0.20 — адрес клиента
- 192.168.0.15 — адрес сервера
- ID — идентификатор запросов, нужен для ориентирования, если к серверу идет несколько обращений.
- Interval — промежуток времени в секундах, на протяжении которого выполнялась передача данных.
- Transfer — сколько было передано данных за интервал времени.
- Bandwidth — средняя скорость передачи данных за интервал времени.
- Retr — количество повторно отправленных TCP-сегментов.
- Cwnd — одновременно переданных данных.
Все ключи запуска iPerf
Общие для сервера и клиента:
Ключ | Описание |
---|---|
-p | Определить порт, на котором будет слушать сервер или отправлять запросы клиент |
-f | Формат отчетов — kmgKMG (Kbits, Mbits, KBytes, MBytes, …) |
-i | Задать интервал, в течение которого выполняется одна проверка |
-F | Указать файл, из которого будут взяты входные данные для запуска |
-A | Степень нагрузки на процессор |
-B | Указать, через какой сетевой интерфейс работать |
-V | Детализированные сообщения в консоли |
-J | Вывод в формате json |
–logfile | Весь вывод в отдельный лог-файл |
-d | Режим отладки (много сообщений) |
-v | Показать версию программы |
-h | Вызвать справку по работе с программой |
Для сервера:
Ключ | Описание |
---|---|
-s | Запустить iPerf в режиме сервера |
-D | Запустить как демона (как службу) |
-I | Указать pid-файл |
-1 | Принять запрос от одного клиента и завершить работу |
Для клиента:
Ключ | Описание |
---|---|
-c | Запустить iPerf в режиме клиента |
-u | Отправлять UDP-пакеты |
-b | Формат отчетов для bandwidth (средней скорости) |
-t | Количество секунд, в течение которых будет идти проверка скорости |
-n | Объем данных для проверки (применяется вместо времени -t) |
-k | Количество пакетов для проверки (вместо -t или -n) |
-l | Длина буфера записи/чтения |
-P | Число параллельных запросов |
-R | Обратный режим — сервер отправляет, клиент принимает |
-w | Размер сетевого окна |
-C | Установить алгоритм управления перегрузкой TCP |
-M | Задать максимальный размер MTU |
-4 | Работать только для IPv4 |
-6 | Работать только для IPv6 |
-Z | Использовать метод «нулевой копии» для отправки данных |
-O | Опустить первые n секунд |
-T | Задать префикс для каждой строки вывода |
Также самый свежий список ключей можно получить командой:
1 |
man iperf3 |
Автозапуск сервера (создание сервиса в systemd)
По умолчанию, программу нужно запускать вручную. Если мы хотим, чтобы сервер запускался автоматически и работал как служба systemd, выполняем инструкцию ниже.
Создаем юнит в systemd со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vi /etc/systemd/system/iperfd.service [Unit] Description=iPerf Service After=network.target [Service] Type=forking PIDFile=/run/iperf3.pid ExecStart=-/bin/iperf3 -s -D -I /run/iperf3.pid ExecReload=/bin/kill -HUP $MAINPID Restart=always [Install] WantedBy=multi-user.target |
* где
- Description — описание юнита;
- After указывает на юнит, после которого может загружаться наш сервис;
- Type — тип службы;
- PIDFile — путь к pid файлу, в котором хранится номер процесса;
- ExecStart — команда, которую нужно выполнить при старте сервиса (в данном примере запускается iPerf в режиме сервера как демон и создает pid-файл);
- ExecReload — команда для перезапуска службы;
- Restart=always — опция, позволяющая автоматически перезапускать сервис, если он перестанет работать;
- опция WantedBy=multi-user.target позволяет установить для автозапуска службу в обычном многопользовательском режиме.
Перезапускаем systemd:
1 |
systemctl daemon-reload |
Разрешаем созданный сервис:
1 |
systemctl enable iperfd |
Запускаем его:
1 |
systemctl start iperfd |
Проверяем:
1 |
systemctl status iperfd |
Примеры использования iPerf
Рассмотрим некоторые команды запросов к серверу для проверки скорости соединения.
Использование UDP
1 |
iperf3 -c 192.168.0.15 -u |
* сам сервер не нужно запускать в UDP-режиме, так как он принимает любые запросы.
Альтернативные порты
Для этого необходимо сначала запустить сервер на нужном порту:
1 |
iperf3 -s -p 443 |
* кстати, можно запустить несколько процессов iperf одновременно, которые будут слушать на разных портах.
* стоит не забывать по настройки брандмауэра. В данном примере понадобиться ввести команды firewall-cmd –permanent –add-port=443/tcp и firewall-cmd –reload.
Теперь можно запускать клиента:
1 |
iperf3 -c 192.168.0.15 -p 443 |
Проверка скорости в течение 30 секунд с интервалами по 2 секунды
1 |
iperf3 -c 192.168.0.15 -t 30 -i 2 |
Несколько параллельных запросов
1 |
iperf3 -c 192.168.0.15 -P 3 |
Отправляем на проверку 3 Гб данных
1 |
iperf3 -c 192.168.0.15 -n 3G |
Клиент/сервер для Windows
Скачиваем iPerf под Windows с официального сайта. Распаковываем архив и запускаем командную строку (cmd). Переходим в распакованную папку (команда cd).
Можем работать с iperf. Команды такие же, как для Linux, например:
1 |
iperf3.exe -c 192.168.0.15 |
GUI
Для работы с iPerf в графическом интерфейсе есть различные утилиты, например Iperf3-Cygwin-GUI.
http://www.softpedia.com/get/Network-Tools/Bandwidth-Tools/Iperf3-Cygwin-GUI.shtml
Скачиваем архив, распаковываем его и запускаем iperf3cygwingui.bat.
В открывшемся окне для простой проверки нужно только прописать адрес iPerf-сервера и нажать кнопку Run Iperf3:
Однако, на моей практике, программа не заработала, а после запуска зависала (или не запускался iperf3.exe). Проблему удалось решить с помощью скачанного с официального сайта клиента (файлов iperf3.exe и cygwin1.dll), которыми я заменил одноименные файлы в папке bin.
При желании, программу можно также запустить в режиме сервера:
jPerf
Для работы в графическом интерфейсе также есть популярная программа jperf. Ее можно скачать с сайта sourceforge. Однако, она создана с использованием старой версии iperf, поэтому я не стал уделять ей много внимания. В целом, процесс и внешний вид не сильно отличается от Iperf3-Cygwin-GUI.
Совместимость iPerf и iPerf3
Клиент и сервер совместимы, но нужно знать, что по умолчанию, рабочий порт для iPerf — 5001, для iPerf3 — 5201.
Поэтому либо необходимо запускать сервер:
1 |
iperf3 -s -p 5001 |
* также не забываем настроить брандмауэр.
Либо запускаем клиентские запросы командой:
1 |
iperf -c 192.168.0.15 -p 5201 |
Публичные сервера iPerf
Актуальные публичные сервера iPerf можно найти на официальном сайте программы. Внимательно смотрите на описания серверов и рабочие порты.
Пример проверки с использованием сервера во Франции:
1 |
iperf3 -c bouygues.testdebit.info -p 5200 |
или в Индонезии:
1 |
iperf3 -c iperf.biznetnetworks.com |
Свой публичный сервер
Сервер iPerf может обрабатывать только одно подключение одновременно на порту. Поэтому, в условиях публичного использования необходим его запуск на множестве портов одновременно.
Мы настроим сервер при помощи systemd. Ранее мы уже создавали один юнит для запуска iperf. Повторяем процедуру с небольшими изменениями.
Создаем юнит со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
vi /etc/systemd/system/iperfd5205.service [Unit] Description=iPerfService on port %i After=network.target [Service] Type=forking PIDFile=/var/run/iperf3.5205.pid ExecStart=-/bin/iperf3 -s -p 5205 -D -I /var/run/iperf3.5205.pid ExecReload=/bin/kill -HUP $MAINPID Restart=always RuntimeMaxSec=3600 [Install] WantedBy=multi-user.target |
* если сравнить с ранее созданным юнитом, мы добавили запуск сервера на порту 5205.
Перезапускаем systemd:
1 |
systemctl daemon-reload |
Разрешаем юнит и запускаем сервис:
1 2 |
systemctl enable iperfd5205 systemctl start iperfd5205 |
Повторяем шаги для других портов — создаем для каждого отдельный юнит в systemd. Для публичного сервера лучше создать побольше.
Возможные ошибки
the server is busy running a test. try again later
В данный момент сервер обрабатывает другой запрос или он завис. Если мы являемся администратором сервера, перезагружаем его, в противном случае, ждем.