Содержание
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
iOS/Android
Утилита доступна в программе HE.NET Network Tools в AppStore и Google Play
Windows
Java GUI
JPerf (github, 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. |
Обсуждение