(linux) инструмент для мониторинга "качества" соединения tcp?

4237
ernesto che

Я ищу инструмент для контроля качества TCP-соединения. Я пытаюсь описать, что я имею в виду:

Это должен быть инструмент с клиентской и серверной частью. Клиент отправляет, скажем, 1 КБ данных в секунду на сервер, и сервер следит за скоростью доставки пакетов.

Или, поставьте иначе: я ищу что-то похожее на команду «ping», за исключением того, что я могу тестировать TCP-соединение и с довольно высокой пропускной способностью (то есть большим количеством пакетов), например, 1 КБ / с.

Меня интересует не максимальная пропускная способность, а постоянная быстрая доставка. Как, скажем, я бы транслировал MP3-файл со скоростью 128 кбит / с по соединению с максимальной пропускной способностью также 128 кбит / с, но с низкой задержкой. И я хотел бы воспроизвести этот файл мгновенно (или, скажем, с 1-секундным буфером).

Цель состоит в том, чтобы отслеживать реальную жизнеспособность сетевого (интернет) соединения. (И нет, я не заинтересован в том, чтобы что-то сложное было настроить и использовать как нагиос.)

Большое спасибо!

4
Привет, извините за публикацию этого на stackoverflow.com сначала, это не связанный с программированием вопрос. Пожалуйста, посмотрите на мои другие комментарии, спасибо! ernesto che 14 лет назад 0

6 ответов на вопрос

1
Javier

Как вы определяете, «как быстро доставляются пакеты»? Если вы хотите знать, сколько времени требуется пакету для достижения точки B из точки A, то я думаю, что это невозможно сделать без точной синхронизации часов, равной менее миллисекунды.

Я бы попытался захватить некоторый реальный трафик (т.е. фактически используя ваше приложение) и проанализировать его с помощью WireShark, чтобы найти задержку между некоторыми отправленными данными и соответствующим пакетом ACK. Это дает вам время прохождения в оба конца (RTT) для вашего трафика.

обновление :

Стек TCP должен отслеживать RTT для каждого соединения. (он используется для оптимизации передачи пакетов и управления размером окна). Если вы используете Linux, и это ваше собственное приложение, вы можете использовать getsockopt(fd,.. ,TCP_INFO,...)возвращенные данные, включая все эти внутренние параметры. Вы можете заглядывать в эти данные каждую секунду и переходить к отображению приложения.

Привет, я не заинтересован в мелкозернистой доставке. Хорошо, проблема (с точки зрения конечного пользователя): интернет-соединения иногда не работают. Под «не работает» я имею в виду абсолютно отсутствие ответа от какого-либо сервера в течение периода времени от 30 секунд до нескольких минут, например взлеты. И хочу следить за этим взлеты в течение длительного периода времени. Поэтому я не ищу задержку в миллисекундах, а в секундах или даже минутах, в течение которых не будет доставлено ни одного, или очень мало пакетов. 14 лет назад 0
1
Andrew McGregor

Похоже, вам нужен Iperf .

Тем не менее, вы уверены, что видите не функциональную ссылку, а не TCP-сбои в ваших пользовательских подключениях? Большинство TCP остановятся, если увидят три последовательных потери пакетов.

Используете ли вы лучший TCP контроль перегрузки вашей системы? В Windows вы должны включить Compound TCP, если можете, в Linux вы, вероятно, должны использовать Westwood для этого приложения.

1
Trevoke

Просто к вашему сведению .. Linux 'ping' имеет эту опцию:

-s packetize
Определяет количество байтов данных, которые будут отправлены. По умолчанию используется значение 56, которое преобразуется в 64 байта данных ICMP в сочетании с 8 байтами данных заголовка ICMP.

0
Adrian Cox

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

Привет, спасибо за ответ. Я хочу долго работающий монитор, но это также может быть утилита оболочки, которую я буду запускать на «экране» или направлять вывод в файл. Собираюсь посмотреть на NetPIPE. 14 лет назад 0
0
Justin Smith

Для наименьшей задержки, но с меньшим исправлением ошибок, UDP является лучшим вариантом, чем TCP (например, в Linux звуковой сервер jackd имеет серверную часть, которая может передавать аудио по UDP по этой самой причине - jackd больше ориентирован на идеальное качество звука / профессиональный звук производство хотя).

Проверьте icecast для UDP потоковой передачи mp3.

Рассматривая ваши другие ответы, UDP может быть сложнее доставить вашим пользователям ... но, возможно, у вас все еще будет некоторый успех с таким подходом, поэтому я оставлю этот ответ на всякий случай. Justin Smith 14 лет назад 0
0
Mikhail Moskalev

Теоретически возможно сделать «пассивный» монитор. Это приложение мониторинга данных TCP и ACK. и означает статус канала как Ok, когда большинство данных имеет соответствующий ACK. И только когда данные редки, используйте активный тест (пинг ICMP, пинг TCP). Но я не знаю такого программного обеспечения.

Похожие вопросы