Измерение скорости / пропускной способности внутренней сети в Java - PullRequest
1 голос
/ 31 июля 2010

Мне нужно иметь возможность контролировать скорость моей внутренней сети с помощью Java.Я думал, что смогу использовать систему из двух частей с сервером и клиентом.Мне не нужно время отклика, например, что генерируется с помощью ping, но и фактическая скорость в Мбит / с для загрузки и выгрузки.

Моя идея заключается в том, чтобы сервер отправлял пакет или серию пакетов клиенту, который затем отвечает, а затем сервер рассчитывает скорость сети между этими двумя точками.У кого-нибудь есть идеи, как я могу это реализовать?

Спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 01 августа 2010

Хм, интересная проблема. Я надеюсь, что вы любите читать ...: -)

Мне было бы интересно узнать, как будет использоваться инструмент мониторинга. В работа, у сисадминов просто пара больших экранов в комнате, показывает веб-страницу, содержащую множество сетевых статистических данных, с этим постоянно обновление.

В остальной части моего описания предполагается, что инструмент мониторинга сети будет используется, как описано выше. Если вы просто хотите быть в состоянии сделать специальную проверить между двумя случайными хостами в вашей сети, я бы просто использовал rsync для передать достаточно большой файл (около 1 - 2 МБ). Я уверен, что есть другие инструменты передачи файлов, которые также рассчитывают скорость передачи.

При реализации этого (особенно в большой сети) вы должны минимизировать риск того, что тест затопит сеть, мешая людям (или программы) на самом деле с его помощью. Вы не хотите быть обвиненным в значительное замедление (или, что еще хуже, простои) только потому, что вы проводили тест. Ваши сисадмины не будут вам благодарны ...

Я бы разработал инструмент следующим образом:

  1. Боб - это сервер, который участвует в индивидуальном «тесте», выполняя следующее:

    1. Боб получает запрос от клиента. В запросе указывается, сколько данных собирается отправить клиент.
    2. Если объем данных, предлагаемых для отправки, не слишком велик, дождитесь данных. В противном случае Боб немедленно отклоняет запрос и завершает общение.
    3. Как только необходимое количество байтов будет получено, ответьте с количеством времени, которое потребовалось, чтобы получить все это. Боб прекращает общение.
  2. Алиса - это компонент, который отображает результат измерений принято (через веб-страницу или иным способом). Алиса - долгоживущий процесс (возможно, веб-сервер), настроенный на периодическое подключение к списку Боб серверы. Для каждого настроенного Боба:

    1. Отправьте Бобу запрос с объемом данных, которые Алиса собирается Отправить.
    2. Отправьте Бобу указанное количество данных как можно быстрее.
    3. Ждите ответа от Боба и вычислите скорость сети.
    4. «Показать» результат для этого экземпляра Боба. Вы можете выбрать для отображения совокупного результата. Например, средний результат для каждый из последних 20 тестов, чтобы сгладить любые аномалии ...
  3. При проведении данного теста Алиса должна сообщать о любых сбоях. Например. «Не удалось установить TCP-соединение с Бобом» или «Боб преждевременно прервал передачу 'или что-то еще ...

  4. Разбрасывать серверы Боба по стратегическим местам в вашем (возможно, большом) сети, и настройте Алису, чтобы пойти им. Для каждого экземпляра Боба вы следует настроить

    1. Интервал времени между тестами.
    2. «Движение» (я объясню это чуть-чуть).
    3. Количество данных, отправляемых Бобу для каждого теста.
    4. Адрес Боба (дух).
  5. Вы хотите «пошатнуть» тесты, которые будет выполнять данная Алиса. Вы не хотим, чтобы Алиса запускала тест сразу на всех серверах Боба, тем самым наводнение вашей сети, возможно, дает искаженные результаты и так далее. Разрешить проведение теста в рандомизированном времени в будущем. За Например, если интервал проверки составляет каждые 10 минут, настройте «запас» 1 минуты, что означает, что следующий тест может произойти где-то между 9 и 11 минутное время

  6. Если одновременно должно быть запущено более одной Алисы, общее количество экземпляров должно быть небольшим. Чем больше у вас Алисы, тем больше Вы мешаете работе сети. Опять же, вы не хотите быть ответственным для отключения.

  7. Количество данных, которые Алиса должна отправить в индивидуальном тесте, должно быть маленький. 500KB? Вы, вероятно, хотите, чтобы данный тест выполнялся не более 10 секунд. Возможно, попросите Боба прекратить тайм-аут, если тест займет слишком много времени.

Я намеренно пропустил используемый транспорт (TCP, UDP и т. Д.)потому что вы будете получать проблемы в зависимости от транспорта, и я не знаю, как вы хотите решить эти проблемы.Например, вам нужно подумать, как обрабатывать удаленные дейтаграммы с помощью UDP.Какой результат вы бы вычислили?Вы не получаете эту проблему с TCP, потому что он автоматически повторно передает отброшенные пакеты.С TCP ваша пропускная способность будет искусственно низкой, если две конечные точки находятся далеко друг от друга.Вот кое-что о info .

Если у вас хватило терпения прочитать это, надеюсь, это помогло!

0 голосов
/ 31 июля 2010

Вместо того, чтобы писать сервер, вы можете просто использовать tomcat или apache в качестве сервера, а затем просто попросить клиента загрузить файл определенного размера и измерить время, затем развернуться и загрузить файл, чтобы измерить скорость загрузки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...