====== iperf: измерение пропускной способности сети ======
===== Установка =====
==== Debian/Ubuntu ====
# apt-get install iperf
Для установки iperf3
# apt-get install iperf3
==== CentOS 6/7 ====
Утилита доступна в EPEL
# yum install iperf
Для установки iperf3
# yum install iperf3
==== OS X ====
**brew**
brew install iperf
**macports** :?:
sudo port install iperf
**Сайт iperf**
https://iperf.fr/iperf-download.php#macos
==== iOS/Android ====
Утилита доступна в программе [[http://networktools.he.net|HE.NET Network Tools]] в AppStore и Google Play
{{:network:iperf_ios.png?nolink&300|}}
==== Windows ====
https://iperf.fr/iperf-download.php#windows
==== Java GUI ====
JPerf ([[https://github.com/andygrove/jperf|github]], [[https://sourceforge.net/projects/jperf/|sourceforge]])
===== Измеряем попугая =====
На сайте разработчика утилиты представлен список публичных iperf серверов где можно измерить пропускную способность.
В самом простом случае iperf-клиенту достаточно указать один ключ ''-c'' с адресом сервера
iperf -c ping.online.net
По-умолчанию сервер использует порт 5001.
Для указания альтернативного порта используется ключ ''-p''.
==== TCP тест ====
С iperf-клиентом всё просто.
Рассмотрим случай, когда у нас есть возможность самостоятельно запустить и сервер и клиент.
Для запуска iperf в режиме сервера используется ключ ''-s''.
На стороне iperf-сервера выполняем комадну ''iperf -s''. Вывод будет приблизительно такой
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
Подключаемся с другого хоста к нашему iperf-серверу
iperf -c 192.168.1.77
------------------------------------------------------------
Client connecting to 192.168.1.77, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.13 port 53204 connected with 192.168.1.77 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 31.1 MBytes 26.0 Mbits/sec
На стороне iperf-сервера это будет выглядеть так:
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.1.77 port 5001 connected with 192.168.1.13 port 53204
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 31.1 MBytes 25.9 Mbits/sec
==== UDP тест ====
При желании можно провести тест по UDP протоколу
Для этого добавляем ключ ''-u''
iperf -s -u
Так выглядит запуск iperf-сервера
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
На стороне клиента также следует указать дополнительный ключ ''-u''
iperf -c 192.168.1.77 -u
Так выглядит результат теста
------------------------------------------------------------
Client connecting to 192.168.1.77, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.13 port 46076 connected with 192.168.1.77 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec
[ 3] Sent 893 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.094 ms 0/ 893 (0%)
И тут нас убило роялем из кустов. Как же так 1.05 мегабит! Это же медленнее, чем через TCP.
Дело в том, что по-умолчанию для iperf-клиента стоит ограничение в 1 мегабит.
Чтобы указать максимальную пропускную способность используется ключ ''-b''.
Для канала 100 мегабит команда будет выглядеть так
iperf -c 192.168.1.77 -u -b 100m
Для канала 1 гигабит команда будет выглядеть так
iperf -c 192.168.1.77 -u -b 1000m
Результат команды будет такой
------------------------------------------------------------
Client connecting to 192.168.1.77, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.13 port 49672 connected with 192.168.1.77 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 55.4 MBytes 46.5 Mbits/sec
[ 3] Sent 39545 datagrams
[ 3] Server Report:
[ 3] 0.0-10.1 sec 55.4 MBytes 46.1 Mbits/sec 0.728 ms 10/39544 (0.025%)
[ 3] 0.0-10.1 sec 1 datagrams received out-of-order
==== Двунаправленный тест (bidirectional test) ====
В некоторых случаях необходимо протестировать оба хоста\сервера. Это можно легко сделать с помощью встроенной функции двунаправленного тестирования (ключ ''-d'').
Вывод команды
iperf -c 192.168.1.77 -d
будет такой
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.1.77, TCP port 5001
TCP window size: 136 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.1.13 port 53208 connected with 192.168.1.77 port 5001
[ 4] local 192.168.1.13 port 5001 connected with 192.168.1.77 port 39076
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.1 sec 51.4 MBytes 42.8 Mbits/sec
[ 4] 0.0-10.2 sec 18.4 MBytes 15.2 Mbits/sec
На стороне iperf-сервера это будет выглядеть следующим образом
------------------------------------------------------------
Client connecting to 192.168.1.13, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 6] local 192.168.1.77 port 39076 connected with 192.168.1.13 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.2 sec 51.4 MBytes 42.3 Mbits/sec
[ 6] 0.0-10.2 sec 18.4 MBytes 15.1 Mbits/sec
===== Опции (основные) =====
^ Опция ^ Описание ^
| -B | Запускает iperf на выбранном интерфейсе или адресе. |
| -f | Изменить формат вывода. Доступные значения - m (Mbits, default), k (Kbits), K (KBytes), and M (MBytes). Пример: -f k выведет результат в килобитах в секунду вместо мегабит в секунду. |
| -i | Выводить отчёт теста на экран каждые N секунд. |
| -p | Указать порт вручную. Если не указано, то используется стандартный 5001. |
| -t | Время в секундах для передачи данных. По-умолчанию 10 секунд. |
| -V | Принудительно использовать IPv6 вместо IPv4. |