- Определяем пропускную способность сети с помощью Iperf
- Измерение скорости сети с помощью утилиты iperf
- iPerf3 — измерение пропускной способности сети
- Пример использования
- Установка, настройка и использование iPerf
- Установка сервера/клиента
- Клиентские запросы и проверка сервера
- Все ключи запуска iPerf
- Автозапуск сервера (создание сервиса в systemd)
Определяем пропускную способность сети с помощью Iperf
Как определить реальную скорость сети Интернет или канала связи? Первое, что приходит на ум, воспользоваться онлайн-сервисом типа SPEEDTEST или Яндекс.Интернетометр . Однако, для компьютера или ноутбука, находящегося в локальной сети, ориентироваться на показатели подобных тестов не стоит.
Напомню о некоторых моментах, на которые стоит обратить внимание при тестировании. Кроме вас в сети имеются и другие пользователи, потому лучше всего проводить измерения либо непосредственно на роутере, либо отключив всех остальных пользователей. Стоит учитывать и тот факт, что в локалке могут быть выставлены собственные лимиты для подключений или вы будете ограничены скоростью работы Wi-Fi. Но это касается только Интернет. А как быть в случае, когда нужно узнать скорость передачи данных между отдельными компьютерами или реальную скорость обмена данными с сервером?
Например, в Windows имеется встроенное средство для мониторинга сети, в реальном времени показывающее нагрузку на сетевых интерфейсах, но делается он это тоже весьма условно. Для более точного измерения скорости обмена данными между компьютерами существует специальная кроссплатформенная утилита iperf . Она работает в режиме клиент-сервер и не требует установки (достаточно просто скопировать ее на два компьютера).
Измерение скорости сети с помощью утилиты iperf
Так как Iperf не входит в стандартный дистрибутив Windows, его необходимо скачать отдельно. Во всех unix-подобных системах (Linux, FreeBSD) iperf можно легко найти в репозиториях.
- Страничка разработчика iperf http://software.es.net/iperf/
- Страничка, откуда можно загрузить готовые исполняемы файлы iperf https://iperf.fr/iperf-download.php
Утилита iperf работает в клиент-серверном режиме, то есть на одном конце запускается в режиме «сервер», а на втором в режиме «клиент», который и генерирует трафик для измерения скорости. Общий вид использования утилиты выглядит так:
iperf [-s|-c host] [options]
В самом простом случае (он же и основной) запуск iperf происходит из командной строки следующим образом:
iperf -c XX.XX.XX.XX — на клиенте, где XX.XX.XX.XX — IP-адрес сервера.
В сети много описаний более старые версии, в которых по умолчанию тестируется только входящий или исходящий трафик. Я же рекомендую использовать современную версию iPerf 3.1.3, где сразу выдаётся нужный результат без дополнительных ключей.
Подробнее о ключах запуска можно узнать, запустив iperf с параметром -h . Какие-то из них подходят только для клиента, какие-то для сервера, есть и общие. Вот некоторые из них:
- -s, —server — запустить как сервер и отображать всю информацию на экран;
- -c, —client — запустить как клиент и соединиться с сервером;
- -p, —port — порт, по которому будет происходить соединение (по умолчанию 5001);
- -D, —daemon — запустить как сервис (в фоновом режиме);
- -f, —format — в каком формате показывать скорость (Kbits, Mbits, KBytes, MBytes);
- -h, —help — вывод справки.
Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.
iPerf3 — измерение пропускной способности сети
Утилита iPerf3 позволяет измерить максимальную пропускную способность между двумя узлами сети. Может использовать различные параметры тайминга, протоколов, потоков и т.п. Это кроссплатформенная клиент-серверная программа. Бесплатна.
Умеет генерировать трафик различного типа для анализа пропускной способности сети. Поддерживается многопоточная работа через параметры у клиента. По умолчанию тест выполняется в направлении от клиента к серверу. Для обратного тестирования от сервера к клиенту необходимо использовать ключ -R.
C:\Distr\iperf-3.1.3-win64\iperf-3.1.3-win64>iperf3.exe /? iperf3: parameter error - must either be a client (-c) or server (-s) Usage: iperf [-s|-c host] [options] iperf [-h|--help] [-v|--version] Server or Client: -p, --port # server port to listen on/connect to -f, --format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes -i, --interval # seconds between periodic bandwidth reports -F, --file name xmit/recv the specified file -B, --bind bind to a specific interface -V, --verbose more detailed output -J, --json output in JSON format --logfile f send output to a log file -d, --debug emit debugging output -v, --version show version information and quit -h, --help show this message and quit Server specific: -s, --server run in server mode -D, --daemon run the server as a daemon -I, --pidfile file write PID file -1, --one-off handle one client connection then exit Client specific: -c, --client run in client mode, connecting to -u, --udp use UDP rather than TCP -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited) (default 1 Mbit/sec for UDP, unlimited for TCP) (optional slash and packet count for burst mode) -t, --time # time in seconds to transmit for (default 10 secs) -n, --bytes #[KMG] number of bytes to transmit (instead of -t) -k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of - t or -n) -l, --len #[KMG] length of buffer to read or write (default 128 KB for TCP, 8 KB for UDP) --cport bind to a specific client port (TCP and UDP, default : ephemeral port) -P, --parallel # number of parallel client streams to run -R, --reverse run in reverse mode (server sends, client receives) -w, --window #[KMG] set window size / socket buffer size -M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes) -N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm -4, --version4 only use IPv4 -6, --version6 only use IPv6 -S, --tos N set the IP 'type of service' -Z, --zerocopy use a 'zero copy' method of sending data -O, --omit N omit the first n seconds -T, --title str prefix every output line with this string --get-server-output get results from server --udp-counters-64bit use 64-bit counters in UDP test packets [KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga- iperf3 homepage at: http://software.es.net/iperf/ Report bugs to: https://github.com/esnet/iperf
Пример использования
iperf3.exe -с 10.10.12.8 -P 5 -R
Установка, настройка и использование iPerf
Обновлено: 28.06.2018 Опубликовано: 03.07.2017
Тематические термины: iPerf, Linux, CentOS, Windows iPerf является кроссплатформенным приложением и может быть установлен на любую популярную операционную систему. В данной инструкции будет рассмотрена установка сервера на Linux CentOS и клиента как на последнем, так и Microsoft Windows.
Установка сервера/клиента
По сути, нет отдельного iPerf для сервера или клиента — это один и тот же программный продукт, который может запускаться в режиме сервера или выполнять клиентские команды. Для начала выполняем установку расширенного репозитория:
* в данном примере мы открыли порт 5201 (для iPerf по умолчанию) для пакетов TCP и UDP. Запускаем сервер:
Клиентские запросы и проверка сервера
Напомню, что клиент может быть установлен на любую систему. Также, как в первом случае, выполняем установку клиента на другой компьютер в сети. После можно сразу выполнить команду:
[ 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 | Задать префикс для каждой строки вывода |
Также самый свежий список ключей можно получить командой:
Автозапуск сервера (создание сервиса в systemd)
По умолчанию, программу нужно запускать вручную. Если мы хотим, чтобы сервер запускался автоматически и работал как служба systemd, выполняем инструкцию ниже.
Создаем юнит в systemd со следующим содержимым:
[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
- Description — описание юнита;
- After указывает на юнит, после которого может загружаться наш сервис;
- Type — тип службы;
- PIDFile — путь к pid файлу, в котором хранится номер процесса;
- ExecStart — команда, которую нужно выполнить при старте сервиса (в данном примере запускается iPerf в режиме сервера как демон и создает pid-файл);
- ExecReload — команда для перезапуска службы;
- Restart=always — опция, позволяющая автоматически перезапускать сервис, если он перестанет работать;
- опция WantedBy=multi-user.target позволяет установить для автозапуска службу в обычном многопользовательском режиме.
Разрешаем созданный сервис: