iperf — это инструмент для измерения максимальной пропускной способности TCP и UDP по протоколу IP. Таким образом, он помогает определить пропускную способность сети путём создания трафика и измерения скорости передачи данных между системами.
sudo apt-get install iperf
Тестирование пропускной способности TCP
iperf обеспечивает измерение максимальной производительности полосы пропускания TCP.
Сначала на одном из серверов мы настроили его как сервер, запустив iperf в режиме сервера:
$ iperf -s
Здесь мы использовали -s для запуска iperf в режиме сервера, чтобы быть готовыми к приёму входящих подключений.
Теперь на другом сервере запустим iperf в клиентском режиме:
$ iperf -c 10.211.55.5
В этом случае мы использовали -c для запуска iperf в клиентском режиме для подключения к серверу с IP-адресом 10.211.55.5.
Первая часть вывода указывает на то, что клиент подключается к серверу с IP-адресом 10.211.55.5 по протоколу TCP на порту 5001.
Во второй части показано, что за 10,03 секундный интервал тестирования клиент передал на сервер 4,17 ГБ данных со средней скоростью 3,57 Гбит/с.
В качестве альтернативы мы можем изменить порт по умолчанию:
# Server
$ iperf -s -p 8080
# Client
$ iperf -c 10.211.55.5 -p 8080
В этом случае мы изменили порт по умолчанию на 8080, используя опцию -p на обоих концах.
Тестирование пропускной способности UDP
iperf также поддерживает UDP-тестирование:
# Server
$ iperf -s -u
# Client
$ iperf -c 10.211.55.4 -u
Как мы видим, мы можем использовать флаг -u как на стороне сервера, так и на стороне клиента.
2.4. Параллельное тестирование и оптимизация
На этот раз мы можем максимально повысить эффективность тестирования пропускной способности:
$ iperf -c 10.211.55.4 -P 20 -t 30
------------------------------------------------------------
Client connecting to 10.211.55.4, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.211.55.5 port 40904 connected with 10.211.55.4 port 5001
[ 4] local 10.211.55.5 port 40936 connected with 10.211.55.4 port 5001
[ 10] local 10.211.55.5 port 40950 connected with 10.211.55.4 port 5001
...
[ ID] Interval Transfer Bandwidth
...
[ 14] 0.0000-30.1182 sec 552 MBytes 154 Mbits/sec
[ 4] 0.0000-30.1220 sec 727 MBytes 202 Mbits/sec
[SUM] 0.0000-30.0672 sec 10.4 GBytes 2.97 Gbits/sec
[ CT] final connect times (min/avg/max/stdev) = 1.346/4.642/14.595/3.670 ms (tot/err) = 20/0
В этом случае мы использовали -P, чтобы указать, что тест должен использовать 20 параллельных клиентских потоков для одновременной отправки данных на сервер. Кроме того, опция -t используется для установки продолжительности теста, которая составляет 30 секунд.
В результате эта команда iperf предоставляет подробную информацию о производительности каждого соединения и исчерпывающий отчёт о результатах тестирования.
3. Использование nc и dd
Чтобы оценить скорость сети между двумя серверами Linux, мы можем использовать комбинацию nc и dd.
В частности, для запуска передачи данных мы используем nc, что обеспечивает эффективную связь между серверами. Кроме того, мы используем dd для создания потока данных и управления им, обеспечивая всестороннюю оценку производительности сети.
Сначала давайте установим nc на оба сервера:
$ sudo apt-get install netcat
После установки мы запускаем nc в режиме прослушивания на сервере, с которого хотим получать данные:
$ 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
Ncat: Connection from 10.211.55.5.
Давайте разберем команду на части:
- -vv — подробный режим, обеспечивающий более подробный вывод
- -l означает режим прослушивания, при котором nc ожидает входящее соединение
- -n принудительно использует только числовые IP-адреса, отключает разрешение DNS
- -p 5001 — номер порта для прослушивания
- > /dev/null перенаправляет вывод в /dev/null, чтобы отбросить все полученные данные
Затем мы используем комбинацию nc и dd на другом сервере:
$ 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
Давайте разберем первую часть команды:
- if=/dev/zero указывает на входной файл /dev/zero, создавая бесконечный поток нулевых байтов
- bs=1M устанавливает размер блока равным 1 МБ
- count=1000 указывает количество блоков для копирования, создавая файл размером 1 ГБ
Наконец, мы используем | nc 10.211.55.4 5001 для передачи вывода dd в nc и отправки данных на сервер по IP-адресу 10.211.55.4 на порт 5001.
В итоге мы передали данные между этими двумя серверами, достигнув скорости примерно 198 МБ/с.
4. Использование SSH и dd
Конечно, SSH может обеспечить безопасный канал передачи данных, а dd позволяет измерять скорость передачи данных.
Давайте посмотрим, как мы можем протестировать скорость сети:
$ dd if=/dev/zero bs=1M count=1000 | ssh amir@10.211.55.4 'dd of=/dev/null'
1000+0 records in
1000+0 records out
1048576000 bytes transferred in 4.441908 secs (236064322 bytes/sec)
2048000+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 4.52663 s, 232 MB/s
Давайте разберемся с каждой частью перед началом работы:
- if=/dev/zero указывает на входной файл /dev/zero, который генерирует бесконечный поток нулей
- bs=1M устанавливает размер блока равным 1 мегабайту
- count=1000 указывает количество блоков для передачи, создавая файл размером 1 ГБ
Мы передаём результаты через SSH-туннель после передачи с помощью sshamir@10.211.55.4. Важно отметить, что dd of=/dev/null на удалённом сервере записывает входящие данные в /dev/null, фактически отбрасывая их.
Результаты показывают скорость передачи данных по сети между локальным и удалённым серверами. В данном случае средняя скорость составляет примерно 232 МБ/с, что позволяет оценить производительность сетевого подключения для передачи данных между этими двумя серверами Linux.
5. Использование nuttcp
nuttcp — это инструмент для измерения производительности сети, который обычно используется для тестирования скорости и пропускной способности сети между двумя системами. Таким образом, он позволяет нам оценивать производительность сетевого подключения, измеряя объём передаваемых данных с течением времени, особенно при использовании TCP.
Сначала давайте установим nuttcp на оба сервера:
$ sudo apt-get install nuttcp
Затем мы запускаем nuttcp в режиме приёма на одном из серверов:
$ nuttcp -r
Эта команда сообщает nuttcp, что нужно ожидать входящих подключений и измерять пропускную способность.
На этом этапе мы запускаем nuttcp в режиме отправки на другом сервере:
$ nuttcp 10.211.55.4
7301.4253 MB / 10.84 sec = 5652.0274 Mbps 31 %TX 48 %RX 0 retrans 0.98 msRTT
В этом случае мы измерили производительность сети между клиентом и сервером. В результате тест включал передачу примерно 7301,4253 МБ данных в течение 10,84 секунд. Таким образом, расчётная пропускная способность во время этого теста составила примерно 5652,0274 Мбит/с.
6. Заключение
В этой статье мы рассмотрели различные инструменты и методики, предназначенные для точной оценки скорости сети.
От iperf для измерения пропускной способности TCP и UDP до комбинации nc и dd и безопасного SSH с dd — мы изучили различные подходы.
В заключение мы получили некоторое представление о тонкостях тестирования скорости сети и скорости обмена данными в серверных средах Linux.