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.

Добавить комментарий