====== 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. |