Тестирование скорости сети через iperf
Вначале надо установить пакет iperf:
>sudo apt-get install iperf
Далее, чтобы протестировать скорость прохождения пакетов между двумя компьютерами, необходимо сделать следующие действия.
Эта картинка как бы символизирует компьютерую сеть.
На компьютере №1 надо запустить iperf в режиме сервера:
> iperf -s
Эта команда запустит небольшой специальный iperf-сервер на порту с номером 5001 (это порт iperf по-умолчанию). Если необходим другой порт, то можно воспользоваться командой:
> iperf -s -p 8080
Далее, на компьютере №2 надо запустить iperf в режиме клиента, и указать к какому серверу надо подключиться:
> iperf -c 10.211.55.5
Где 10.211.55.5 - это IP-адрес компьютера №1. Если нужно указать порт, то можно команду дополнить опцией -p <Номер_порта>.
Если все сделано правильно, то клиент и сервер, спустя некоторое время необходимое для проведения замера, начнут показывать реальную скорость передачи данных по сети:
Client connecting to 10.211.55.5, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 10.211.55.4 port 56200 connected with 10.211.55.5 port 5001 (icwnd/mss/irtt=14/1448/1545)
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.03 sec 4.17 GBytes 3.57 Gbits/sec
По сути, данный тест проверяет скорость прохождения TCP пакетов. Для замера скорости прохождения UDP-пакетов, надо в командах запуска сервера и клиента добавлять опцию -u.
Тестирование скорости сети через netcat и dd
Если нет утилиты iperf, можно воспользоваться утилитой netcat. На самом деле, пакет называется netcat, а сам бинарник программы называется nc, об этом надо помнить.
Вначале надо установить пакет netcat:
> sudo apt-get install netcat
Утилита dd, скорее всего уже установлена, потому что это одна из самых древних системных утилит в Linux.
Далее на компьютере №1 надо запустить сервер, который будет слушать 5001 порт и отправлять все полученные данные в /dev/null:
> nc -vvlnp 5001 > /dev/null
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::5001
Ncat: Listening on 0.0.0.0:5001
В этой команде используются следующие опции:
- -vv - это включение подробного лога;
- -l - командует nc включиться в режиме прослушивания порта (listen);
- -n - использовать только IP-адреса, без DNS;
- -p - указывает номер порта, который необходимо слушать.
На компьютере №2 запускается команда, которая будет отправлять сетевой траффик на компьютер №1:
> dd if=/dev/zero bs=1M count=1K | nc -vvn 10.211.55.4 5001
Connection to 10.211.55.4 5001 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.40932 s, 198 MB/s
Здесь:
- /dev/zero - это генератор потока байт, состоящий из одних нулей. В принципе его можно заменить на /dev/random, но некоторыми упоротыми админами считается, что он работает медленнее чем /dev/zero, что влияет на конечный результат;
- bs - это размер одного куска, выдаваемый в поток за раз (в данном случае 1Мб);
- count - это количество кусков последовательности байт (в данном случае 1000 кусков);
Сформированный таким образом поток байт подается на вход утилиты nc, и отправляется по сети на IP-адрес 10.211.55.4 (это адрес компьютера №1) на порт 5001.
В процессе работы данной команды выдается статистика о скорости передачи байтов с одного комьютера на другой. Это и есть примерная скорость работы сети.
Итого
Описанные выше способы проверки скорости сети, по сути, работают в одном направлении. Сеть не обязательно сможет быть симметричной. Поэтому для полной картины надо запускать команды и в "зеркальном" отображении - команды, предназначенные для компьютера №1 - на компьютере №2 и наоборот.