Мониторинг потери пакетов UDP в Windows Server, Java - PullRequest
1 голос
/ 05 июня 2009

Мое Java-приложение получает данные через UDP. Он использует данные для задачи онлайн-анализа данных. Это означает, что не важно получать каждый пакет, что делает выбор UDP разумным с самого начала. Кроме того, данные передаются по локальной сети, поэтому физическая сеть должна быть достаточно надежной. Во всяком случае, я не могу контролировать выбор протокола или данных.

Тем не менее меня беспокоит потеря пакетов, которая может возникнуть из-за перегрузки и длительного времени обработки самого приложения. Я хотел бы знать, как часто это происходит и сколько данных теряется.

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

Я понимаю, что невозможно всегда знать о потерях пакетов UDP (без контроля над содержимым пакетов). Я думал о чем-то вроде пакетов, полученных ОС, но никогда не поступающих в приложение; или, может быть, какое-то умное решение внутри приложения, например поток быстрого чтения, который отбрасывает данные, когда его клиент занят.

Мы развертываем под Windows Server 2003 или 2008.

Ответы [ 2 ]

2 голосов
/ 05 июня 2009

Проблема в том, что невозможно определить, что вы потеряли какие-либо пакеты, если используете формат UDP.

Если вам нужна информация такого типа, вам нужно встроить ее в формат, который вы накладываете поверх UDP (например, на порядковый номер TCP). Если вы сделаете это, а формат будет простым, вы сможете легко создать фильтры в Microsoft NetMon или WireShark для регистрации и отслеживания этой информации.

Также обратите внимание, что реализация порядкового номера TCP также помогает обнаружить, что при использовании UDP могут происходить неупорядоченные пакеты, принимаемые.

0 голосов
/ 05 июня 2009

Если вас беспокоит потеря пакетов, используйте TCP.

Это одна из причин, почему она была изобретена.

...