Являются ли SNMP-запросы последовательными - есть ли вероятность, что они могут быть получены кратно - PullRequest
0 голосов
/ 28 декабря 2018

Я пишу агент SNMP и планирую написать агент для обработки запроса SNMP один за другим.Означает, что, когда запрос поступает на порт 161 - не будет принимать дальнейшие запросы до тех пор, пока не завершится ответ / тайм-аут.

Я не уверен во многих клиентах SNMP, но так ли это, что запрос SNMP является синхронизированным и последовательным -Есть ли способ, которым они могут прийти навалом за один раз?

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

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

Когда он приходитпри написании SNMP-агентов другим соображением было бы оценить максимальное возможное время, необходимое агенту для сбора необходимых данных для ответа.Я считаю, что это должен быть не средний OID, а максимальный OID.Другими словами, если ваш агент обслуживает 100 OID, из которых запрос одного «медленного» OID приведет к тому, что весь (синхронный) агент заблокирует и перестанет обслуживать других - эта ситуация может подорвать доверие к вашему агенту в сети..

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

Подводя итог: я думаю, что высокопроизводительный агент SNMP должен иметь следующие характеристики:

  • Поддержка массовой одновременной обработки команд SNMP
  • Наличие неблокирующего доступа к источникам данных для сбора данных управляемых объектов
  • Имеют некоторую форму кэширования или ограничения скорости для защиты вычислительно дорогих источников данных от дерзких менеджеров SNMP

С другой стороны, если ваш агент SNMP обслуживает небольшой фрагмент статических данных нааппаратное обеспечение с низким энергопотреблением, и вы не ожидаете, что слишком много менеджеров когда-либо будут говорить с вами, перхaps вы можете обойтись без упрощенного синхронного агента SNMP ...

Кстати, интерфейс сокетов BSD будет содержать очередь необработанных пакетов UDP, чтобы у вашего агента был шанс наверстать упущенное.

0 голосов
/ 29 декабря 2018

Суть вашего вопроса ошибочна, так как отсутствует концепция «массового одновременного поступления» - независимо от того, в каком порядке принимаются дейтаграммы UDP, составляющие пакет SNMP, и независимо от того, как долголежит между получением каждого пакета вашим сетевым интерфейсом, ваша операционная система представит вам пакеты SNMP в порядке поступления, в последовательности.У вас есть один порт прослушивания и один буфер чтения.Таким образом, эта синхронность уже показывает, как работает обработка сетевых данных , и вам не стоит об этом беспокоиться.

Я бы сказал, что если вы ожидаете, что какой-то ресурс станет доступным во время обработкиЗапрос SNMP (как подсказывает использование вами слова «тайм-аут»), вам, вероятно, следует в то же время включить и начать обрабатывать другие ожидающие запросы SNMP, или вы рискуете прекратить работу всего стека.Несправедливо заставлять менеджера ждать какой-то неизвестной продолжительности ответа на запрос B только потому, что какой-то другой менеджер сделал запрос A, который испытывает задержку в обслуживании.При этом вам, вероятно, нужен верхний предел количества запросов, которые могут быть обслужены за один раз, чтобы предотвратить потенциальный DDoSsing - выбор этого значения может быть сделан только вами, с вашим знанием варианта использования и экосистемы.

0 голосов
/ 28 декабря 2018

Запросы Get - это один OID на запрос, запрос GetBulk может запрашивать несколько OID в одном запросе.Также SNMP-клиент может использовать асинхронный режим, отправляя несколько запросов с минимальными интервалами и ожидая ответов.Пакеты также могут поступать вне очереди из-за сетевых задержек и маршрутов с одинаковой стоимостью.Вы можете поэкспериментировать с отправкой запросов с помощью snmpget, snmpgetbulk, snmpbulkwalk и использовать tcpdump, чтобы увидеть, что находится на проводе.

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

...