Почему двунаправленный запрос iperf зависает на стороне сервера на стороне клиента?

чтобы диагностировать разницу в сетевом трафике между двумя местоположениями и нашим основным серверным центром, я использую iperf для регистрации скорости трафика со следующей командой:

iperf -c <server ip> -F 500MB_Test_File.zip -n 500M -y C

заметив различия между скоростью загрузки и загрузки, я хотел использовать -d option и наткнулся на странное поведение: хотя передача прошла в направлении клиента к серверу, в другом направлении она замерзла и не казалась tiemout. Вот тест, который я сделал, который показывает что это не связано с тем, я использую файл в качестве источника для передачи данных:

$ iperf -c <server IP> -d -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to <server ip>, TCP port 5001
TCP window size:  153 KByte (default)
------------------------------------------------------------
[  5] local <local ip> port 35144 connected with <server ip> port 5001
[  4] local <local ip> port 5001 connected with <server ip> port 39967
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0- 1.0 sec  9.75 MBytes  81.8 Mbits/sec
[  4]  0.0- 1.0 sec  10.7 MBytes  89.3 Mbits/sec
[  5]  1.0- 2.0 sec  10.9 MBytes  91.2 Mbits/sec
[  4]  1.0- 2.0 sec  10.9 MBytes  91.3 Mbits/sec
[  5]  2.0- 3.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  2.0- 3.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  3.0- 4.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  3.0- 4.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  4.0- 5.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  4.0- 5.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  5.0- 6.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  5.0- 6.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  6.0- 7.0 sec  10.9 MBytes  91.2 Mbits/sec
[  4]  6.0- 7.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  7.0- 8.0 sec  11.2 MBytes  94.4 Mbits/sec
[  4]  7.0- 8.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  8.0- 9.0 sec  11.1 MBytes  93.3 Mbits/sec
[  5]  9.0-10.0 sec  11.1 MBytes  93.3 Mbits/sec
[  5]  0.0-10.0 sec   109 MBytes  91.4 Mbits/sec
^C^C

Я использую iperf 2.0.5. Оба клиента и сервера машинах Linux, сервер виртуальных.

EDIT

после MariusMatutiae предложение я начал сервер iperf на клиентской машине, а затем попытался сделать двунаправленный запрос от виртуальной машины, и вот что я получил:

[host@centos ~]$ iperf -c <client_id> -d -i 1
bind failed: Address already in use
------------------------------------------------------------
Client connecting to <client_id>, TCP port 5001
TCP window size: 19.3 KByte (default)
------------------------------------------------------------
[  4] local <server_id> port 40175 connected with <client_id> port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0- 1.0 sec  11.6 MBytes  97.5 Mbits/sec
[  4]  1.0- 2.0 sec  9.50 MBytes  79.7 Mbits/sec
[  4]  2.0- 3.0 sec  10.6 MBytes  89.1 Mbits/sec
[  4]  3.0- 4.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  4.0- 5.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  5.0- 6.0 sec  10.9 MBytes  91.2 Mbits/sec
[  4]  6.0- 7.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  7.0- 8.0 sec  10.8 MBytes  90.2 Mbits/sec
[  4]  8.0- 9.0 sec  8.38 MBytes  70.3 Mbits/sec
[  4]  9.0-10.0 sec  9.75 MBytes  81.8 Mbits/sec
[  4]  0.0-10.0 sec   105 MBytes  87.8 Mbits/sec
[host@centos ~]$

Я думал, отлично, команда останавливается сама от себя, но я получаю результаты только в одном направлении. То есть, пока я не посмотрел в машину, где я начал сервер iPerf на этот раз и увидел это:

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local <client_ip> port 5001 connected with <server_ip> port 40179
------------------------------------------------------------
Client connecting to <server_ip>, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  6] local <client_ip> port 36243 connected with <server_ip> port 5001
[ ID] Interval       Transfer     Bandwidth
[  6]  0.0-10.0 sec  45.4 MBytes  38.0 Mbits/sec
[  4]  0.0-10.2 sec  64.2 MBytes  52.8 Mbits/sec

Я подумал, что, возможно, мне нужно запустить сервер в режиме демона с обеих сторон соединения для двунаправленной команду для работы и в самом деле, я получил аналогичные результаты, только вывода производительность в одной стороне сделки, но как таковой у меня нет никакой способ получить данные о производительности с другой стороны: я запустил демон iperf с -D > iperflog но журнал не заполняется...

это должно быть так, что iperf должен работать в обеих машинах для двунаправленного запроса, чтобы пройти? Делает bind failed: Address already in use сообщение я получаю, когда я начинаю клиент iperf и сервер работает на обеих сторонах ключ, как, где проблема может лежать? У меня такое чувство, что то, что я делаю, не должно быть стандартом порядок...

13
задан Community
13.02.2023 2:07 Количество просмотров материала 3512
Распечатать страницу

1 ответ

Как я и предполагал, и Мариус подтвердил, что клиент и сервер не могут работать на одной машине. Поэтому я дождался подходящего момента, чтобы убить демона, чтобы он не работал одновременно с клиентом, запустил сервер только с -s на хосте (который находится в совершенно другом месте, как спросил Мариус), запустил двунаправленный запрос на виртуальной машине, и запрос прошел (подумал о моменте: "что такое...").

и тогда он ударил меня, я получаю вопрос, только если сервер запущен как демон.

Я подтвердил свою гипотезу, проверив как сервер как демон, а не демон, а также поменяв местами роли машин.

Summary: если вы хотите использовать двунаправленные запросы, не запускайте сервер как демон.

0
отвечен Eldros 2023-02-14 09:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх