[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по управлению системой: Сети и средства связи


Работа демона SNMP

Демон простого протокола управления сетью (SNMP) обрабатывает запросы SNMP, поступающие от приложений-диспетчеров. Дополнительная информация о функциях агента и диспетчера приведена в разделах Simple Network Management Protocol , How a Manager Functions и How an Agent Functions книги AIX 5L Version 5.1 Communications Programming Concepts.

Обработка и идентификация сообщений

Все запросы, прерывания и ответы передаются в виде сообщений в формате ASN.1. Согласно RFC 1157, сообщение имеет следующую структуру:

Версия Группа_взаимодействия PDU

где Версия - это версия SNMP (в настоящее время - версия 1), Группа_взаимодействия - это имя группы взаимодействия, а PDU - блок данных протокола, содержащий запрос, ответ или данные прерывания SNMP. PDU также закодирован в соответствии с правилами ASN.1.

Демон SNMP принимает и передает сообщения протокола SNMP с помощью Протокола управления передачей/протокола Internet (TCP/IP) и Протокола пользовательских дейтаграмм (UDP). Запросы принимаются через стандартный порт 161. Прерывания передаются на хосты, содержащиеся в списке точек входа в файле /etc/snmpd.conf и работающие со стандартным портом 162.

При получении запроса IP-адрес источника и имя группы взаимодействия проверяются по списку, содержащему IP-адреса, имена групп взаимодействия, права доступа и представления, заданные в файле /etc/snmpd.conf. Агент snmpd читает этот файл при запуске, при вызове команды refresh и при отправке сигнала kill -1. Если соответствующая запись в файле не обнаружена, запрос будет проигнорирован. Если же запись обнаружена, то доступ будет разрешен в соответствии с правами доступа, заданными для группы взаимодействия и представления, отвечающих данному IP-адресу, имени группы взаимодействия и представлению в файле /etc/snmpd.conf. И сообщение, и PDU должны быть закодированы в соответствии с правилами ASN.1.

Данная схема идентификации не предназначена для обеспечения полной защиты. Использование программы-демона SNMP только для отправки запросов get и get-next является безопасным. Если же разрешены запросы set, то права доступа для запросов set следует ограничить.

Дополнительная информация приведена в файле /etc/snmpd.conf . Дополнительная информация приведена в разделе База информации управления (MIB).

Обработка запросов

Демон SNMP получает запросы PDU трех типов. Эти типы запросов определены в RFC 1157, а все PDU соответствуют следующему формату:

Формат PDU запроса
ИД-запроса состояние-ошибки индекс-ошибки значения_ переменных
GET 0 0 VarBindList
GET-NEXT 0 0 VarBindList
SET 0 0 VarBindList

Поле ИД_запроса определяет причину запроса; поля состояние_ошибки и индекс_ошибки не используются и должны иметь значения 0 (нуль); поле значения_переменных представляет собой список переменной длины, содержащий числовые ИД экземпляров, значения которых запрашиваются. Если значение поля ИД-запроса равно SET, то поле значения-переменных представляет собой список пар ИД экземпляра - значение экземпляра.

Дополнительная информация о типах запросов приведена в разделе Работа с базой информации управления (MIB).

Обработка ответов

Формат PDU ответов почти совпадает с форматом PDU запросов:

Формат PDU ответа
ИД-запроса состояние-ошибки индекс-ошибки значения_ переменных
GET-RESPONSE ErrorStatus ErrorIndex VarBindList

Если запрос был обработан успешно, значения полей состояние_ошибки и индекс_ошибки равны 0 (нулю), а поле значения-переменных представляет собой полный список пар ИД и значений экземпляров.

Если какой-либо ИД экземпляра в поле значения_переменных в PDU запроса не был обработан успешно, агент SNMP прекращает работу, записывает индекс ИД экземпляра, вызвавшего сбой, в поле индекс_ошибки, записывает код ошибки в поле состояние_ошибки и копирует неполный список в поле значения_переменных.

В RFC 1157 для поля состояние_ошибки определены следующие значения:

Значения поля состояние-ошибки
Значение Значение Описание
noError 0 Обработка завершена успешно (индекс-ошибки равен 0).
tooBig 1 Размер PDU ответа превышает ограничение, накладываемое реализацией (индекс-ошибки равен 0).
noSuchName 2 ИД экземпляра не существует в соответствующем представлении MIB для типов запросов GET и SET, или у него нет потомков в дереве MIB в соответствующем представлении MIB для типов запросов GET-NEXT (ненулевое значение индекса-ошибки).
badValue 3 Только для запросов SET: заданное значение синтаксически несовместимо с типом соответствующего ИД экземпляра (ненулевое значение индекса-ошибки).
readOnly 4 Не определено.
genErr 5 Произошла ошибка, связанная с ограничениями реализации (ненулевое значение индекса-ошибки); например, попытка присвоить значение, превышающее максимальное значение для данной реализации.

Обработка прерываний

Согласно RFC 1157, PDU прерываний представляются в следующем формате:

Формат PDU прерываний
Объект адрес-

адрес

общее-

прерывания

конкретное-

прерывания

Системное время значения-

переменных

ИД объекта Целое Целое Целое Время в тактах VarBindList

Информация о полях:

Объект Идентификатор объекта, присвоенный разработчику данной реализации агента. Это значение переменной sysObjectID, которое уникально для каждой реализации агента SNMP. Данной реализации агента присвоено значение 1.3.6.1.4.1.2.3.1.2.1.1.3 или risc6000snmpd.3.
Адрес-агента IP-адрес объекта, вызывающего прерывание.
Шаблон-прерывания Целое, принимающее одно из следующих значений:

0
coldStart

1
warmStart

2
linkDown

3
linkUp

4
authenticationFailure

5
egpNeighborLoss

6
enterpriseSpecific
Конкретное прерывание Не используется, зарезервировано для применения в будущем.
Системное время Время в сотых долях секунды, прошедшее с момента последней инициализации объекта до момента возникновения события, которое привело к вызову прерывания.
Значения переменных Дополнительная информация, зависящая от типа общего-прерывания.

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

coldStart Повторная инициализация объекта. Данные конфигурации и/или значения переменных MIB. Начало сбора статистики измерений.
warmStart Происходит повторная инициализация объекта, но данные конфигурации и значения переменных MIB не изменились. В данной реализации агента SNMP прерывание warmStart вызывается при повторном чтении файла /etc/snmpd.conf. Информация о конфигурации в файле /etc/snmpd.conf предназначена для настройки агента без побочного эффекта для баз данных диспетчера SNMP. Повторный запуск Measurement epochs не требуется.
linkDown Агент обнаружил, что интерфейс связи был отключен.
linkUp Агент обнаружил, что интерфейс связи был подключен.
authenticationFailure Не удалось идентифицировать полученное сообщение.
egpNeighborLoss Связь с маршрутизатором по Протоколу внешних шлюзов (EGP) прервана. Это значение передается, только если агент запущен в той же системе, что и демон gated, применяющий EGP.
enterpriseSpecific Не реализовано; зарезервировано для использования в будущем.

В списке значений переменных для прерываний linkDown и linkUp предусмотрена единственная пара ИД экземпляра - значение. ИД экземпляра определяет ifIndex отключенного или включенного адаптера, значение - это значение ifIndex. Кроме того, прерывание для egpNeighborLoss содержит сведения о связи между ИД экземпляра и значением egpNeighAddr для узла, связь с которым была прервана.

Вызов прерываний linkUp и linkDown

Примечание: В следующих разделах интерфейсом называется как интерфейс TCP/IP, так и интерфейс устройства CDLI, Token-Ring, Ethernet или FDDI. CDLI позволяет демону snmpd отслеживать работу устройств Ethernet, Token-Ring и FDDI, даже если для них не установлен TCP/IP. Для работы программы-демона SNMP по-прежнему требуется циклический адрес TCP/IP, но это не является требованием к интерфейсу.

Прерывания linkUp и linkDown вызываются в том случае, если агент snmpd обнаруживает изменение состояния интерфейсов. Если состояние интерфейса изменяется с Активен на Неактивен, вызывается прерывание linkUp. Аналогично, если состояние интерфейса изменяется с Неактивен на Активен, вызывается прерывание linkDown.

Для устройства CDLI термины активный/неактивный не используются, если это устройство не применяет TCP/IP. Устройство CDLI с подключенным слоем TCP/IP всегда считается активным, если оно не удалено из системы. Другие значения в таблице интерфейсов также зависят от наличия интерфейса TCP/IP для устройства CDLI. Если интерфейс TCP/IP существует, то все статистические данные в таблице интерфейсов относятся к интерфейсу TCP/IP, и для получения информации об устройстве следует использовать MIB для устройства. Если слой TCP/IP отсутствует, записи iftable для устройства можно получить непосредственно из устройства CDLI.

В таблице интерфейсов snmpd содержатся записи для всех интерфейсов, доступных агенту snmpd. При подключении или отключении интерфейса с помощью команды ifconfig записи в таблице интерфейсов агента snmpd изменяются. Для сообщения об изменении конфигурации вызывается прерывание coldStart. Прерывание coldStart вызывается для уведомления принимающего хоста о возможном изменении значений основных переменных MIB. В частности, следует повторить запуск Measurement epochs. Несмотря на возможную активацию и деактивацию линий связи, прерывания linkUp и linkDown не вызываются.

Например, команда netstat -in может вывести следующую информацию о сетевой конфигурации хоста:

Имя     MTU    Сеть          Адрес         Пкт ввод Ошиб Пкт вывод Ошиб 
Coll
lo0     1536   127           127.0.0.1      6228     0    6228     0    0
en0     1500   192.100.154   192.100.154.7  585287   0    666636   0    0
tr0     1500   129.35.32     129.35.42.141  3976323  0    2414030  0    0

В данном примере конфигурации сети, заданной в таблице интерфейсов агента snmpd, имеется три записи, связанных с интерфейсами TCP/IP: одна для lo0, одна для en0 и одна для tr0. В таблице индексов интерфейсов ifIndex.1 может относиться к lo0, ifIndex.2 - к en0, а ifIndex.3 - к tr0. Фраза "может относиться" означает, что, так как интерфейсы являются динамическими, фактический номер записи может отличаться от приведенного. Например, ядро TCP/IP не хранит информацию о дополнительном адаптере Token-Ring в рабочей станции, которому соответствует интерфейс tr1. Так как адаптер Token-Ring представляет собой устройство CDLI, в таблице интерфейсов существует соответствующая запись, например ifIndex.4. На рабочей станции установлено последовательное оптическое устройство. Этот накопитель не был настроен для работы с TCP/IP и не является устройством CDLI. Это устройство не поддерживается ни подсистемой TCP/IP, ни демоном snmpd. Интерфейсу этого устройства присвоено имя so0.

При вызове команды ifconfig tr1 TCP/IP подключает tr1, но не помечает интерфейс как активный. Агент snmpd изменяет способ сообщения статистических сведений о таблице интерфейсов: вместо статистических данных уровня устройства CDLI будут использоваться данные слоя интерфейса TCP/IP. Затем агент snmpd вызывает прерывание coldStart. При этом новая запись не добавляется, так как запись для tr1 уже существует.

При вызове команды ifconfig so0 TCP/IP подключает so1, но не помечает интерфейс как активный. Затем агент snmpd добавляет пятую запись для этого нового интерфейса в свою таблицу интерфейсов, и ifIndex.5 начинает ссылаться на so0. Агент SNMP вызывает прерывание coldStart. so0 не является устройством CDLI, поэтому оно не добавляется в таблицу интерфейсов в результате настройки устройства и его следует добавить при настройке слоя интерфейса TCP/IP.

Основные значения индекса интерфейса (ifIndex), которые диспетчер SNMP мог сохранить для четырех исходных записей, не изменятся. Но прерывание coldStart - это сигнал диспетчерам SNMP о том, что их базы данных MIB необходимо обновить. После обновления своей базы данных диспетчер SNMP получает информацию о новой записи в таблице интерфейсов агента snmpd.

Если системным администратором была введена команда ifconfig tr1 up, создается новый интерфейс и изменяется способ получения статистики. Агент snmpd вызывает прерывание coldStart; прерывание linkUp не вызывается, так как состояние устройства не изменилось. Устройство CDLI всегда активно, если для него не установлен интерфейс TCP/IP.

Прерывание coldStart сообщает диспетчерам SNMP об изменении конфигурации агента snmpd, чтобы диспетчеры могли обновить свои базы данных MIB. Прерывание linkUp, вызванное после прерывания coldStart, не имеет значения для диспетчера SNMP, так как его база данных уже содержит обновленную информацию.

Системный администратора решил исключить из описанной сетевой конфигурации интерфейс en0. Тогда агент snmpd изменит способ сбора статистики так, что с этого момента будут использоваться статистические данные устройства CDLI (Ethernet является устройством CDLI). Агент вызывает прерывание coldStart для уведомления диспетчеров SNMP об изменениях в интерфейсах. В этом случае изменяются не основные значения ifIndex, а только способ получения статистики.

Системный администратора решил исключить из описанной сетевой конфигурации интерфейс so0. После удаления интерфейса агент snmpd обновит свою таблицу интерфейсов. В приведенном выше примере все индексы сохраняются, за исключением пятой записи, которая будет удалена. При удалении третьей записи номера четвертой и пятой записей изменяются на третью и четвертую соответственно. В любом случае агент snmpd вызывает прерывание coldStart.

В данном случае, основные значения ifIndex, которые диспетчер SNMP мог сохранить для исходных записей, будут изменены. Необходимо, чтобы диспетчер SNMP обновил свою базу данных MIB, чтобы она отражала изменения в таблице интерфейсов агента snmpd. При этом прерывание linkDown не вызывается. Диспетчер SNMP не может продолжить работу немедленно по получении сигнала прерывания linkDown, так как в его базе данных содержатся неправильные значения ifIndex.

Для того чтобы агент snmpd вовремя получал всю информацию об изменении состояния интерфейса, он должен периодически обращаться к ядру TCP/IP и списку устройств CDLI для определения состояния интерфейса. Интервал времени между проверками определяется пользователем.

При получении агентом snmpd запроса на переменную MIB в таблице интерфейсов, если агент определяет, что состояние интерфейса изменилось таким образом, что необходимо вызвать прерывание coldStart, то он возвращает значение genErr и вызывает прерывание coldStart.

Дополнительная информация о протоколах и IP-адресах приведена в разделах Протокол пользовательских дейтаграмм (UDP), Протокол внешних шлюзов (EGP) и Адресация TCP/IP.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]