{{tag>[nmap iperf3 scanner]}}

====== iperf3 ======

iPerf3 — кроссплатформенная консольная клиент-серверная программа — генератор TCP, UDP и SCTP трафика для тестирования пропускной способности сети. 1

С её помощью можно измерить максимальную пропускную способность сети между сервером и клиентом или провести нагрузочное тестирование канала связи для определения уровня потерь. 2

Для установки утилиту нужно скачать с официального сайта (iperf.fr) и распаковать файлы в удобную папку. Затем открыть командную строку (клавиши Win+R), ввести cmd и перейти в папку с распакованными файлами iPerf3. 2

  * https://github.com/esnet/iperf
  * https://github.com/userdocs/iperf3-static

===== Пример использования =====

Запуск сервера на порту по умолчанию

<code bash>
$ iperf3 -s
</code>

Запуск сервера на определённом порту

<code bash>
$ iperf3 -s -p 12345
</code>

Запуск теста пропускной способности

<code bash>
$ iperf3 -c server
</code>

Запуск сервера в UDP-режиме с выводом результатов раз в секунду, на порту 65005

<code bash>
$ iperf -u -s -i1 -p 65005
</code>

Тестирование UDP c длиной 100 байт со скоростью 20 Кбит/с в течение 180 секунд (имитация VoIP трафика, запускать нужно в обе стороны).

<code bash>
$ iperf -u -c server_host -l100 -b20k -t180
</code>

Передать 10 мегабайт данных на порт 65005

<code bash>
$ iperf -n 10m -p 65005 -c server_host
</code>

<note tip>По умолчанию для iperf3 используется порт 5201 TCP/UDP.</note> 

===== Синтаксис команды iperf3 =====

=== Общие опции для сервера и клиента: ===


  * -p, --port #	номер порта, на котором будет работать сервер/клиент (по умолчанию используется 5201)
  * -f, --format [kmgKMG]	формат скорости в результатах теста: k (Кбит), K (Кбайт), m (Мбит), M (Мбайт), g (Гбит), G (Гбайт)
  * -i, --interval #	интервал между выводом результата тестирования, в секундах
  * -V, --verbose	более детализированный вывод информации
  * -d, --debug	вывод дополнительной информации для отладки
  * -v, --version	показать версию
  * -h, --help	показать справку

=== Основные опции для сервера: === 

  * -s, --server	запуск сервера c отображением информации на экране
  * -D, --daemon	запуск сервера в фоновом режиме, без отображения информации на экране; будет оставаться запущенным, даже после закрытия окна программы

===  Основные опции для клиента: ===

  * -c, --client <хост>	запуск клиента и подключение к серверу <хосту>
  * -u, --udp	протокол UDP вместо TCP
  * -b, --bandwidth #[KMG][/#]	максимальная скорость в битах/сек (0 - отсутствует ограничение); по умолчанию отсутствует ограничение скорости для TCP, а для UDP составляет 1 Мбит/сек (опция /# для пакетного режима передачи данных)
  * -t, --time #	время тестирования в секундах (по умолчанию 10 сек)
  * -n, --bytes #[KMG]	количество байт для передачи данных (вместо ключа -t)
  * -l, --len #[KMG]	размер буфера (по умолчанию 128 КБ для TCP, 8 КБ для UDP)
  * -P, --parallel #	число одновременных параллельных клиентских потоков
  * -R, --reverse	запуск в обратном режиме (Reverse mode: сервер отправляет трафик, клиент принимает)
  * -4, --version4	использовать только IPv4
  * -6, --version6	использовать только IPv6
  * -Z, --zerocopy	метод отправки данных по технологии zero copу для снижения нагрузки на процессор
  * -O, --omit N	пропустить первые n секунд (игнорировать алгоритм TCP slowstart)
  * --get-server-output	получить результаты с сервера

=== Приведем примеры использования команд iperf3 с разными опциями: ===

Запуск сервера (с настройками по умолчанию):

<code bash>
$ iperf3 -s
</code> 

Запуск клиента (с настройками по умолчанию):

<code bash>
$ iperf3 -c 192.168.1.143
</code>

В наших примерах 192.168.1.143 это IP-адрес сервера iperf3.

Важно! Сервер может принимать соединения одновременно только от одного клиента. Если сервер занят другим клиентом, при попытке тестирования будет появляться ошибка server is busy running a test. try again later. В таком случае нужно подождать освобождение сервера.

Но также есть возможность запустить несколько экземпляров клиентов и серверов на одном и том же хосте. Для этого используйте назначение разных портов при помощи ключа -p <порт>.
Например, вы можете на сервере открыть 2 окна командной строки, в одном выполнить команду:

<code bash>
$ iperf3 -s 5005 #(сервер будет работать на порту 5005)
</code>

и в другом окне:

<code bash>
$ iperf3 -s -p 5006 #(сервер будет работать на порту 5006)
</code>

Теперь на одном клиенте выполните команду для подключения к серверу, который работает на порту 5005:

<code bash>
$ iperf3 -c -p 5005 192.168.1.143
</code>

и на втором клиенте команду для подключения к серверу, который работает на порту 5006:

<code bash>
$ iperf3 -c -p 5006 192.168.1.143
</code>

Запуск клиента с выводом более детализированной информации:

<code bash>
$ iperf3 -Vc 192.168.1.143 
$ iperf3 -c -V 192.168.1.143
</code>

По умолчанию iperf3 работает так: сервер принимает данные, а клиент отправляет. Для тестирования входящей скорости на клиенте нужно использовать обратный режим (Reverse mode) и в команду добавить ключ -R:

<code bash>
$ iperf3 -c 192.168.1.143 -R
</code>

Чтобы увеличить длительность тестирования (по умолчанию 10 сек) используйте ключ -t <сек>:

<code bash>
$ iperf3 -c 192.168.1.143 -R -t 60
</code> 

В программе можно использовать многопоточный режим тестирования. Чтобы указать количество потоков используйте ключ -P <число> (в данном примере тестирование будет выполняться в 2 потока):

<code bash>
$ iperf3 -c 192.168.1.143 -R -t 60 -P 2
</code> 

При тестировании с настройками по умолчанию вывод результатов происходит каждую секунду. С помощью ключа -i <сек> можно изменить интервал времени для вывода результатов (в данном примере интервал увеличен до 3 секунд):

<code bash>
$ iperf3 -c 192.168.1.143 -R -t 60 -P 2 -i 3
</code>

Можно также указать объем трафика, который необходимо передать при тестировании. Для этого используйте ключ -n <байты>[KMG] вместо ключа -t:

<code bash>
$ iperf3 -c 192.168.1.143 -R -n 500M -P 2 -i 3
</code>

По умолчанию тестирование выполняется с помощью протокола TCP, но поддерживается также работа с протоколом UDP. Для этого используйте ключ -u:

<code bash>
$ iperf3 -Vc 192.168.1.143 -u -R -t 60
</code>

Протокол UDP, в отличие от TCP, не использует алгоритмы контроля доставки пакетов и контроля скорости передачи, и имеет другое поведение в сети. Так как UDP не контролирует скорость передачи данных, это должно делать приложение передающее трафик. По умолчанию установлено ограничение максимальной скорости 1 Мегабит для UDP-трафика. Не указывайте слишком большую максимальную скорость для протокола UDP, т.к. это может привести к перегрузке сети (рекомендуем этот параметр устанавливать до 100 Мегабит). Установить ограничение максимальной скорости можно с помощью ключа -b <биты>[KMG]:

<code bash>
$ iperf3 -Vc 192.168.1.143 -u -R -t 60 -b 100M
</code>

Также обращаем ваше внимание на ключ -l <байты>, он устанавливает длину пакета. В режиме UDP устанавливайте этот параметр не более 1400 байт.

<code bash>
$ iperf3 -Vc 192.168.1.143 -u -R -t 60 -b 100M -l 1400
</code>