Professional Documents
Culture Documents
PROTTIPO DE UM AGENTE SNMP PARA UMA REDE LOCAL UTILIZANDO A PLATAFORMA JDMK
TRABALHO DE CONCLUSO DE CURSO SUBMETIDO UNIVERSIDADE REGIONAL DE BLUMENAU PARA A OBTENO DOS CRDITOS NA DISCIPLINA COM NOME EQUIVALENTE NO CURSO DE CINCIAS DA COMPUTAO - BACHARELADO
ii
PROTTIPO DE UM AGENTE SNMP PARA UMA REDE LOCAL UTILIZANDO A PLATAFORMA JDMK
JORGE LUCAS DE MELLO
ESTE TRABALHO DE CONCLUSO DE CURSO FOI JULGADO ADEQUADO PARA OBTENO DOS CRDITOS DA DISCIPLINA DE TRABALHO DE CONCLUSO DE CURSO OBRIGATRIO PARA OBTENO DO TTULO DE:
Orientador na FURB
Coordenador do TCC
BANCA EXAMINADORA
iii
AGRADECIMENTOS
Agradeo a todos os professores do curso de Bacharelado em Cincias da Computao da Universidade Regional de Blumenau pela ajuda prestada ao longo do curso, agradeo principalmente ao professor Francisco Adell Pricas por ter me orientado neste trabalho final e por ter muita pacincia, preocupao e dedicao. Agradeo a todos os novos amigos que conheci em Blumenau no decorrer da Faculdade, principalmente ao Bogo e Luiz de culos amiges mesmo, Marlon, Fabio Segundo, Heleno e Raphael. Agradeo a toda galera da sala, que sempre nos momentos mais difceis sempre ajudvamos uns aos outros. Agradeo a vrias pessoas que me acompanharam nessa jornada como minha irm Luana e meu grande amigo Marcelo. Agradeo principalmente aos meus pais Antonio e Gessi por terem me dado essa oportunidade to valiosa e se no fosse a dedicao deles, no poderia estar redigindo meu trabalho final. Agradeo principalmente a Andreia Krambeck, por ser a pessoa mais especial que j conheci e por ter compartilhado dos momentos mais marcantes da minha vida. E finalmente agradeo a pessoa mais importante de todas, obrigado por tudo DEUS.
iv
SUMRIO
LISTA DE FIGURAS ...............................................................................................................vii LISTA DE SIGLAS E ABREVIATURAS ........................................................................... viii RESUMO....................................................................................................................................ix ABSTRACT.................................................................................................................................x 1. INTRODUO.....................................................................................................................10 1.1 OBJETIVOS....................................................................................................................12 1.2 ORGANIZAO DO TRABALHO.............................................................................12 2. PROTOCOLO DE GERENCIAMENTO SNMP ...............................................................14 2.1 DESCRIO DE SNMP ...............................................................................................14 2.2 PONTOS POSITIVOS E NEGATIVOS DO SNMP ...................................................15 2.3 ELEMENTOS DO SNMP..............................................................................................16 2.3.1 AGENTES................................................................................................................16 2.3.2 GERENTES .............................................................................................................17 2.3.3 MANAGEMENT INFORMATION BASE (MIB) ...................................................18 2.4 OPERAES SNMP APLICAVIS S VARIVEIS DA MIB..............................19 2.4.1 GET ..........................................................................................................................19 2.4.2. GETNEXT ..............................................................................................................19 2.4.3. SET ..........................................................................................................................19 2.4.4. TRAP.......................................................................................................................20 2.4.5. RESPONSES ..........................................................................................................20 2.5 OBJETOS PADRONIZADOS DE GERENCIAMENTO ...........................................21 2.6 CARACTERSTICAS EXTENSVEIS ........................................................................21 2.7 OBJETOS MIB DO SNMP............................................................................................22 2.7.1 OBJETOS DISCRETOS DA MIB .........................................................................22 2.7.2 TABELAS DE OBJETOS DA MIB ......................................................................22 2.7.3 TIPOS DE OBJETOS DE UMA MIB ...................................................................23 2.7.3.1 Tipo de Objetos de Texto.................................................................................24 2.7.3.2 Tipo de Objetos Contadores ............................................................................24 2.7.3.3 Tipo de Objetos de Medida..............................................................................24 2.7.3.4 Tipo de Objetos Inteiros...................................................................................24 2.7.3.5 Tipo de Objetos Enumerados...........................................................................24 2.7.3.6 Tipo de Objetos Tempo....................................................................................25 2.7.3.7 Tipo de Objetos Objeto....................................................................................25 2.7.3.8 Tipo de Objetos Endereo IP...........................................................................25 2.7.3.9 Tipo de Objetos Endereo Fsico ....................................................................25 2.7.3.10 Tipo de Objetos String ...................................................................................25 2.7.3.11 Tipo de Objetos Tabela..................................................................................26 2.7.3.12 Tipo de Objetos Auxiliares............................................................................26 2.8 ACESSO A VALORES DA MIB..................................................................................26 2.9 COMPILANDO OBJETOS DA MIB ...........................................................................27
v 2.10 O SNMP SOBRE A CAMADA DE TRANSPORTE................................................27 2.10.1. SERVIOS EXIGIDOS PELO SNMP...............................................................29 2.10.2. FORMATO DA MENSAGEM SNMP...............................................................30 2.10.2.1. GetRequest PDU ...........................................................................................33 2.10.2.2. GetNextRequest PDU ...................................................................................35 2.10.2.3. GetBulkRequest PDU ...................................................................................38 2.10.2.4. SetRequest PDU ............................................................................................40 2.10.2.5. Trap PDU.......................................................................................................43 2.10.2.6. InformRequest PDU......................................................................................45 2.10.2.7. GetResponse PDU.........................................................................................47 2.11 COMPONENTES ESSENCIAIS DO GERENCIADOR ..........................................47 2.11.1 FUNES DE ALARME ....................................................................................47 2.11.2 MONITORAMENTO DE FUNES.................................................................47 2.11.3 FUNES DE RECEPO ................................................................................47 2.11.4 CONFIGURANDO FERRAMENTAS DO GERENCIADOR..........................47 2.11.5 COMPILADOR DE MIB .....................................................................................48 3. A PLATAFORMA JDMK ...................................................................................................49 3.1 DIFERENAS ENTRE O JDMK E AS DEMAIS PLATAFORMAS.......................49 3.2 BENEFCIOS DO JDMK ..............................................................................................50 3.3 COMO OPERA...............................................................................................................50 3.4 FERRAMENTAS AGREGADAS.................................................................................52 3.4.1 CONCEITOS CHAVES..........................................................................................52 4. MBEANS...............................................................................................................................54 4.1 MBEAN PADRO.........................................................................................................55 4.2 MBEAN DINMICO ....................................................................................................56 4.3 SERVIDOR MBEAN.....................................................................................................56 4.4 PROXY MBEANS .........................................................................................................57 4.4.1 PROXY MBEANS GENRICO (PMG) ...............................................................57 4.5 CONECTORES E ADAPTADORES DE PROTOCOLOS ........................................58 4.6 MODELO DE NOTIFICAO DO JMX....................................................................59 4.7 O MECANISMO PUSH.................................................................................................60 4.8 O MECANISMO PULL.................................................................................................61 5. CRIANDO UM AGENTE SNMP .......................................................................................62 5.1 PROCESSO DE DESENVOLVIMENTO DE UMA MIB..........................................62 5.1.1 GERADOR DE MIB MBEANS.............................................................................63 5.2 IMPLEMENTANDO OS RECURSOS DA MIB.........................................................65 5.2.1 COMPILANDO O MBEANS E AGENTES.........................................................66 5.3 O ADAPTADOR DE PROTOCOLO SNMP...............................................................66 5.3.1 EXECUTANDO O ADAPTADOR SNMP ...........................................................67 5.3.2 CRIANDO A MIB...................................................................................................67 5.3.3 LIGANDO MBEANS DA MIB .............................................................................68 5.3.4 TENDO ACESSO AO MBEAN DA MIB ............................................................68 5.3.5 ADMINISTRANDO O ADAPTADOR SNMP ....................................................69 5.4 EXECUTANDO O AGENTE SNMP ...........................................................................70 5.4.1 ENVIANDO TRAPS...............................................................................................71 5.4.2 INTERAGINDO COM O GERADOR DE TRAPS..............................................74 5.5 LISTAS DE CONTROLE DE ACESSO (ACL) ..........................................................76
vi 5.5.1 FORMATO DO ARQUIVO ACL..........................................................................77 5.5.2 FORMATO DO GRUPO ACL...............................................................................77 5.5.3 FORMATO DO GRUPO DE TRAP......................................................................78 6. CONCLUSO.......................................................................................................................79 7. BIBLIOGRAFIA...................................................................................................................82 8. ANEXOS ...............................................................................................................................84 8.1 ANEXO 1 ........................................................................................................................84 8.2 ANEXO 2 ........................................................................................................................86
vii
LISTA DE FIGURAS
FIGURA 1 - PROTOCOLO DE GERENCIAMENTO SNMP ................................................14 FIGURA 2 - ELEMENTOS BSICOS DO SNMP ..................................................................18 FIGURA 3 - PROTOCOLO SNMP SOBRE A CAMADA DE TRANSPORTE...................29 FIGURA 4 - FORMATO DA MENSAGEM SNMP ................................................................31 FIGURA 5 - ESTRUTURA DO CAMPO VARIABLEBINDINGS........................................33 FIGURA 6 - FORMATO DA GETREQUEST PDU ................................................................33 FIGURA 7 - PASSAGEM DA GETREQUEST PDU...............................................................34 FIGURA 8 - FORMATO DA GETNEXTREQUEST PDU. ....................................................35 FIGURA 9 - PASSAGEM DA GETNEXTREQUEST PDU....................................................36 FIGURA 10 - FORMATO DA GETBULKREQUEST PDU ...................................................38 FIGURA 11- PASSAGEM DA GETBULKREQUEST PDU ..................................................40 FIGURA 12 - ESTRUTURA DA SETREQUEST PDU...........................................................41 FIGURA 13 - PASSAGEM DA SETREQUEST PDU .............................................................42 FIGURA 14 - ESTRUTURA DA TRAP PDU - SNMP............................................................43 FIGURA 15 - PASSAGEM DA TRAP PDU.............................................................................45 FIGURA 16 - ESTRUTURA DA TRAP PDU - SNMPV2. .....................................................45 FIGURA 17 - ESTRUTURA DA INFORMREQUEST PDU ..................................................46 FIGURA 18 - PASSAGEM DA INFORMREQUEST PDU ....................................................46 FIGURA 19 CONCEITOS CHAVES PARA O JDMK.........................................................53 FIGURA 20 - MECANISMO DE NOTIFICAO REMOTA ...............................................60 FIGURA 21 PROCESSO DE DESENVOLVIMENTO DE UMA MIB ..............................63 FIGURA 22 EXECUTANDO O AGENTE SNMP................................................................70 FIGURA 23 ACESSANDO O AGENTE VIA PROTOCOLO HTML ................................70 FIGURA 24 INTERAGINDO COM O AGENTE SNMP.....................................................71 FIGURA 25 INTERAGINDO COM O GERADOR DE TRAPS .........................................74 FIGURA 26 INTERAGINDO COM O GERADOR DE TRAPS II......................................75 FIGURA 27 RESULTADO DO ENVIO DE TRAPS NO AGENTE SNMP .......................76
viii
ix
RESUMO
Este trabalho apresenta um estudo na aplicao do protocolo de gerenciamento Simple Network Management Protocol (SNMP) atravs da especificao e implementao de uma aplicao de um agente SNMP para dispositivos de uma rede Local rea Network (LAN), utilizado na implementao a linguagem Java e a plataforma de desenvolvimento Java Dynamic Management Kit (JDMK).
ABSTRACT
This paper presents a study in the application of the management protocol Simple Network Management Protocol (SNMP) through of the specification and implementation of an application of an agent SNMP for devices of a Local Area Network (LAN), used in the implementation the language Java and the development platform Java Dynamic Management Kit (JDMK).
10
1. INTRODUO
Atravs dos avanos das tecnologias de interconectividade e dos benefcios proporcionados pelas Redes de Computadores, cada vez mais computadores so interconectados nas organizaes. Paralelamente, a diminuio dos custos dos equipamentos permite adquirir e agregar rede cada vez mais equipamentos, de tipos diversos, tornando essas redes cada vez maiores e mais complexas. Com isso, as redes comearam a ser interconectadas muito rapidamente; redes locais conectadas a redes regionais, as quais, por sua vez, ligadas a backbones nacionais. Hoje essas redes so extremamente importantes para o dia-a-dia de muitas empresas em todo o mundo, porque, junto com sua utilizao, vem a eficcia e a competitividade. Essa importncia vem crescendo de tal forma que as empresas tm se tornados altamente dependentes destas redes, sentindo imediatamente o impacto quando os seus recursos ficam indisponveis ([COH2000]). Este novo ambiente originou alguns problemas administrativos. As tarefas de configurao, identificao de falhas e controle de dispositivos e recursos da rede passaram a consumir tempo e recursos das organizaes. Cientes desse problema, a soluo ento passou a ser buscada na atividade de Gerenciamento de Rede. Esta atividade passou a evoluir de forma rpida e concisa, sendo hoje uma das especialidades da rea de Redes de Computadores que mais cresce. Apesar desses avanos, ainda hoje, difcil conceituar esta atividade. Segundo [COH2000], ao longo da sua evoluo muitas definies foram propostas para a Gerncia de Redes. Resume-se a seguir algumas dessas definies: a) consiste no controle e administrao de forma racional dos recursos de hardware e software em um ambiente distribudo, buscando melhor desempenho e eficincia do sistema; b) consiste no controle de uma rede de computadores e seus servios;
11 c) tem por objetivo maximizar o controle organizacional das redes de computadores, de maneira mais eficiente e confivel, ou seja, planejar, supervisionar, monitorar e controlar qualquer atividade da rede; d) consiste na deteco e correo de falhas, em um tempo mnimo, e no estabelecimento de procedimentos para a previso de problemas futuros. clara a necessidade de prover monitoramento e controle sobre todos os componentes da rede, de forma a garantir que estes estejam sempre em funcionamento e que os problemas sejam identificados, isolados e solucionados o mais rpido possvel. Entretanto, esta no uma tarefa fcil. As redes das empresas tm assumido grandes propores, com um grande nmero de computadores, alm da constante incluso de novos componentes, oferecendo integrao dados/voz, multiplexadores e roteadores, entre outros, o que tem adicionado mais complexidade a esse ambiente. Para atender a esta necessidade de gerenciamento foram desenvolvidos protocolos de gerenciamento. A principal preocupao de um protocolo de gerenciamento permitir aos gerentes de rede realizar tarefas, tais como: obter dados sobre desempenho e trfego da rede em tempo real, diagnosticar problemas de comunicao e reconfigurar a rede atendendo a mudanas nas necessidades dos usurios e do ambiente ([CHI1999]). Porm, vrios obstculos teriam que ser superados, entre eles a heterogeneidade dos equipamentos de rede (computadores, roteadores e dispositivos de meio), dos protocolos de comunicao e das tecnologias de rede. Adicionalmente, era necessrio que esse gerenciamento fosse integrado, pois uma soluo genrica e integrada auxiliaria os usurios a evitar os altos custos de uma soluo especfica, alm de facilitar a manuteno, o monitoramento, o crescimento e a evoluo da rede. Sem um gerenciamento integrado, a rede poderia degradar at se tornar completamente ineficiente. Segundo [STA1996], as informaes de gerenciamento permitem, dentre outras tarefas, produzir registros de auditoria para todas as conexes, desconexes, falhas e outros eventos significativos na rede. Esses registros, por sua vez, permitem determinar futuras necessidades de adicionar equipamentos, identificar e isolar erros comuns de um cliente, alm de estudar outras tendncias de uso. Deve-se destacar ainda, que estas informaes
12 devem possibilitar uma atuao preventiva, e no meramente reativa, com relao aos problemas. Ciente destes requisitos das empresas, a ISO (International Organization for Standardization) vem desenvolvendo padres para o gerenciamento de redes OSI (Open Systems Interconnection), tendo como protocolo de gerncia o CMIP (Common Management Information Protocol). Por outro lado, existe o IEEE (Institute of Electrical and Electronics Engineers) com um conjunto de padres para o gerenciamento de redes TCP/IP (Transmission Control Protocol / Internet Protocol), chamado SNMP (Simple Network Management Protocol). Atualmente, quase todas as plataformas de gerenciamento de redes Internet comercialmente disponveis implementam o protocolo SNMP devido sua simplicidade de implementao em relao ao CMIP.
1.1 OBJETIVOS
O trabalho desenvolvido tem como objetivo estudar e aplicar o protocolo de gerenciamento SNMP atravs da especificao e implementao de uma aplicao agente SNMP em Java, para o gerenciamento de dispositivos de uma rede LAN, utilizando-se a plataforma de desenvolvimento de aplicaes de gerncia JDMK da SUN.
13 O captulo 4 aborda os MBeans, apresentando as suas funes e qual a sua necessidade no gerenciamento da rede. O captulo 5 voltado ao desenvolvimento do prottipo, onde se apresenta a especificao e implementao do mesmo. No captulo 6 dedicado s concluses e sugestes de continuidade do trabalho. E por fim, o captulo 7 apresenta as bibliografias utilizadas para todo o desenvolvimento deste trabalho.
14
Fonte: [COH2000]
15 (chamado de agente SNMP) que executa em um dispositivo de rede remoto e disponibiliza informao para o gerente relativo ao estado do dispositivo. O banco de dados, que modela o agente SNMP denominado Management Information Base (MIB) e sua funo padro controlar valores gerenciados no dispositivo. O SNMP permite a extenso destes valores padres adicionalmente com valores especficos para um agente particular pelo uso de MIB privados. Diretivas emitidas pelo gerenciador da rede a um agente SNMP consistem nos identificadores de variveis de SNMP (chamados identificadores da MIB ou variveis da MIB) junto com instrues para adquirir o valor do identificador ou fixar o identificador para um novo valor. Pelo uso de variveis de MIB privadas, agentes SNMP podem ser incrementadas para gerenciar dispositivos especficos, como bridges, gateways e roteadores. As definies de variveis de uma MIB podem suportar um agente em particular. As MIB so escritas num formato padronizado chamado de Abstract Syntax Notation One (ASN.1) ([CHI1999]).
16 strings de byte onde cada byte corresponde a um nodo particular no banco de dados da MIB) conduz desnecessariamente a grandes pacotes de dados PDU (Protocol Description Unit), que consomem partes significativas de cada mensagem de SNMP, sobrecarregando a rede de transmisso de dados. As citaes acima no podem ser usadas para diminuir os pontos positivos mencionados no SNMP. Enquanto codificaes complicadas frustram programadores, a utilizao por parte dos usurios finais no dependem da complexidade dos algoritmos que disponibilizam os dados a eles.
17 inesperada. Neste momento, o agente gera uma mensagem especial, o Trap, e a envia ao gerente, relatando sobre a situao. Para o tratamento destas excees e o envio de Trap, concedido ao agente um certo poder de deciso, cabendo a ele, a partir da anlise do contexto da MIB, decidir se ou no necessrio enviar o Trap ao gerente. Esse poder de deciso concedido ao agente para que em certas situaes, como quando da inicializao do sistema, Trap desnecessrios no sejam trafegados pela rede, o que, em se tratando de dezenas de agentes, poderia interferir no desempenho global da rede. Cabe ao agente um papel fundamental em todo o processo de gerenciamento da rede, acessando e disponibilizando informaes de gerncia contidas na MIB, alm de indicar situaes inesperadas de funcionamento do dispositivo que estiver gerenciando atravs do envio de Trap ao gerente. 2.3.2 GERENTES A interface entre as aplicaes de gerncia correntes no NMS e os agentes espalhados pelos dispositivos da rede o gerente. Cabe ao gerente enviar comandos aos agentes, solicitando informaes sobre variveis de um objeto gerenciado ou modificando o valor de determinada varivel. Os gerentes ento processam estas informaes colhidas pelos agentes e as repassam aplicao que as requisitou. A comunicao entre o gerente e as aplicaes possvel atravs da utilizao das API do gerente SNMP pelo sistema. A API (Application Program Interface) um conjunto de funes que fazem o intermdio na execuo de comandos entre um programa e outro, de forma a simplificar a um programa o acesso a funes de outro programa e que, no caso do SNMP, fazem o intermdio das execues entre uma aplicao de gerncia e o gerente SNMP [TAN1996]. Quando uma solicitao da aplicao de gerncia chega ao gerente, atravs da API, o gerente mapeia esta solicitao para um ou mais comandos SNMP que, atravs da troca de mensagens apropriadas, chegaro aos agentes correspondentes. Deve-se ressaltar que este comando SNMP montado pelo gerente pode ser enviado a um outro gerente, que
18 pode ou no repass-lo a um agente. S que a comunicao gerente-gerente s possvel na verso estendida do SNMP, o SNMPv2, e no faz parte do SNMP padro. Cabe tambm ao gerente encaminhar aplicao de gerncia os Trap que porventura sejam enviados pelos agentes. Assim, o software de gerncia ter conhecimento da presena de um novo equipamento na rede ou do mal funcionamento de algum dos dispositivos da rede. Quando da inicializao do software de gerncia, nada se sabe sobre a configurao ou funcionamento da rede. Essas informaes vo sendo conhecidas atravs de Trap que so enviados pelos agentes; a partir da o gerente realiza polling [TAN1996] a fim de manter a comunicao com os agentes, possibilitando ao software de gerncia mapear, monitorar e controlar a rede. 2.3.3 MANAGEMENT INFORMATION BASE (MIB) Segundo [COH2000], no modelo SNMP, os recursos de uma rede so representados como objetos. Cada objeto , essencialmente, uma varivel que representa um aspecto do dispositivo gerenciado. Todos os objetos (variveis) so armazenados na Management Information Base (MIB). F IGURA 2 - ELEMENTOS BSICOS DO SNMP
Agente
MIB
Gerente
Estao
Agente
MIB
Modem
Fonte: [COH2000]
Rede TCP/IP
Agente
MIB
19
20 operao Set deve retornar alguma indicao de que a operao foi efetuada. Porm o mais correto seria que aps cada operao Set sobre uma varivel, uma operao Get fosse efetuada sobre a mesma varivel a fim de assegurar que a operao Set foi efetuada. 2.4.4. TRAP A operao Trap difere de todas as outras. Ela utilizada por um agente SNMP para notificar de forma assncrona a um gerente algum evento extraordinrio que tenha ocorrido no objeto gerenciado. Diversos questionamentos so feitos quanto a esta operao. Talvez o maior deles seja: quais eventos devem realmente ser notificados ao gerente? Embora todos concordem que o gerente deva ser informado de alguns eventos significativos, muitos fornecedores de produtos que implementam o SNMP trazem Traps especficos, muitos deles desnecessrios ([STA1996]). Outro importante questionamento : J que a operao Trap no gera um Response, como um agente pode ter certeza de que o gerente o recebeu? Esta preocupao se perde quando a rede est em perfeito funcionamento. Mas e se a mquina estiver, por exemplo, perdendo pacotes? Isso no fcil de solucionar. Uma possibilidade seria o agente gerar tantos Traps quanto necessrio at que o gerente seja informado do evento. Essa soluo, no entanto, aumentaria o trfego na rede, afetando o seu desempenho (que j est comprometido). 2.4.5. RESPONSES Como j descrito, sempre que um agente recebe um comando Get, GetNext ou Set ele tenta executar a operao associada e, conseguindo ou no, constri uma outra mensagem que enviada ao emissor da requisio. Esta mensagem a GetResponse. Das operaes SNMP, apenas o Trap no gera um Response.
21
22
23 Tabela de objetos contm mltiplas partes de dados do gerenciador. Estes objetos so distintos dos itens Discrete adicionando uma extenso . (ponto) para os nomes deles que distinguem o valor particular que referenciado. A extenso . (ponto) se refere ao nmero da instncia de um objeto do SNMP. No caso do objeto Discrete, este nmero de instncia ser zero. No caso da Tabela de objetos, este nmero de instncia ser o ndice na tabela do SNMP. Tabelas de SNMP so tipos especiais de objetos de SNMP que permitem aglutinar de forma estruturada um conjunto de informaes. Por exemplo, SNMP define o objeto ifDescr como um objeto padro do SNMP que indica a descrio de texto de cada interface apoiada por um dispositivo particular. Considerando que podem ser configurados dispositivos de rede com mais de uma interface, este objeto s poderia ser representado como um array ([SUN1999]). Por conveno, objetos SNMP se agrupam sempre em um diretrio de Entrada, dentro de um objeto com uma Tabela (o objeto ifDescr objeto descrito acima, reside no diretrio ifEntry que armazenado no diretrio ifTable). H vrias regras para desenvolver objetos SNMP, como segue ([SUN1999]): a) ao criar no diretrio de Entrada de uma tabela tem que conter o mesmo nmero de elementos como outros objetos no mesmo diretrio, onde o nmero de uma instncia o mesmo de todas as entradas. Sempre so considerados objetos da tabela como ordens paralelas de dados; b) quando criando um novo objeto de Entrada, o SNMP requer que um valor tenha sido associado com cada entrada da tabela em uma nica mensagem de SNMP (nico PDU). Isto significa que, para criar uma fila em uma tabela (pelo comando set no SNMP), um valor deve ser especificado para cada elemento na fila; c) se uma fila da tabela pode ser apagada, o SNMP requer pelo menos que para isso um objeto na entrada tenha um elemento de controle, que documentado para executar a excluso da tabela. (Isto s se aplica se uma fila pode ser excluda, que necessariamente no requerido de uma tabela do SNMP). 2.7.3 TIPOS DE OBJETOS DE UMA MIB
24 Segundo [SUN1999], os objetos da MIB tm um tipo especfico de valores. O SNMP define vrios tipos primitivos, como se segue. 2.7.3.1 Tipo de Objetos de Texto Define-se o tipo DisplayString que pode conter informao textual arbitrria (normalmente para um mximo de 256 caracteres). O texto deve conter somente caracteres de impresso. Exemplos deste tipo de objeto incluem valores sysDescr e ifDescr. Este tipo de objeto bastante utilizado nas MIB. 2.7.3.2 Tipo de Objetos Contadores Define-se o tipo Counter que um valor numrico que s pode aumentar. Este o tipo mais comum de objeto de SNMP na MIB padro e inclui objetos como ipInReceives, ipOutRequests, e snmpInPkts. Contadores ultrapassam o valor de mximo da varivel, mas nunca podem ser negativos. 2.7.3.3 Tipo de Objetos de Medida Define-se o tipo Gauge que um valor numrico que pode aumentar ou pode diminuir. Este tipo encontrado em apenas algumas localizaes dentro da MIB padro. Exemplos deste tipo de objeto incluem o objeto tcpCurrEstab. 2.7.3.4 Tipo de Objetos Inteiros Define-se o tipo Integer que pode conter valores positivos ou negativos. Este valor normalmente fornecido por valores de tipo Counter ou Gauge, mas s vezes expresso em MIB de equipamentos de fabricantes. 2.7.3.5 Tipo de Objetos Enumerados Define-se um tipo Enumerated Value que associa um campo textual com um valor numrico. Este tipo bastante comum na MIB padro e inclui objetos como ifAdminStatus, cujo valores enumerados, so up(1), down(2), e testing(3). Geralmente os valores enumerados so formatados da seguinte forma nome(nmero).
25 2.7.3.6 Tipo de Objetos Tempo Define-se um tipo TimeTicks que representa um tempo decorrido. Este tempo sempre tem uma resoluo de um centsimo de segundo, at mesmo quando esta resoluo no usada. Administradores de rede freqentemente formatam este valor de tempo como HH:MM:SS:cc para exibio. Por exemplo, o valor sysUpTime indica o tempo decorrido desde que um dispositivo foi reiniciado. 2.7.3.7 Tipo de Objetos Objeto Define-se um tipo Object que pode conter o identificador para outro objeto SNMP. Se o objeto nomeado compilado na MIB, o nome geralmente apresentado com o mesmo nome no objeto SNMP. Um exemplo deste tipo de objeto a varivel sysObjectID da MIB. 2.7.3.8 Tipo de Objetos Endereo IP Define-se um tipo IP address, que contm o Endereo IP de um dispositivo de rede. Este tipo de objeto exibido freqentemente como um endereo de IP convencional. Exemplos deste ipRouteMask. 2.7.3.9 Tipo de Objetos Endereo Fsico Define-se um tipo Physical address, que contm o endereo fsico de um dispositivo de rede. Gerentes exibem freqentemente este tipo de objeto como uma sucesso de valores hexadecimal, precedidos pela palavra-chave hex:, e separados atravs de dois pontos. Exemplos deste tipo de objeto incluem o objeto ifPhysAddress. 2.7.3.10 Tipo de Objetos String Define-se um tipo String, que contm uma cadeia de caracteres arbitrrios. Quando a cadeia de caracteres contm s caracteres ASCII, os gerentes exibem este valor como uma string de texto. Caso contrrio, gerentes exibem este tipo como uma sucesso de valores hexadecimal, precedidos pela palavra-chave hex:, e separados atravs de dois tipo de objeto incluem ipRouteDest, ipRouteNextHop e
26 pontos. Este tipo de valor incomum, mas ocasionalmente encontrado em MIB proprietrias. 2.7.3.11 Tipo de Objetos Tabela O tipo Table um objeto que contm entradas da tabela. Este tipo de objeto sempre um nome intermedirio que contm um diretrio de Entrada e que contm vrios objetos da tabela. 2.7.3.12 Tipo de Objetos Auxiliares O tipo Branch um objeto que contm tipos adicionais, tabelas, ou qualquer tipo de objeto listado acima.
27
28 onde as informaes devem ser trocadas entre as entidades da forma mais rpida possvel, sem afetar o desempenho da transmisso dos demais dados. Segmentos UDP so transmitidos em datagramas IP. O cabealho UDP inclui os campos de origem e destino, um checksum opcional que protege o cabealho UDP e os dados de usurio (em caso do checksum ser violado, a Protocol Description Unit (PDU) descartada). Duas portas UDP so associadas s operaes SNMP. As operaes Get, GetNext, GetBulk, Inform e Set utilizam a porta 161. Por ser acionada em casos de exceo, a operao Trap tm reservada para si a porta 162 ([TAN1996]). Como o UDP um protocolo no-confivel, possvel que mensagens SNMP sejam perdidas. O SNMP por si s no fornece garantia sobre a entrega das mensagens. As aes a serem tomadas quando da perda de uma mensagem SNMP no so abordadas pelo padro. No entanto, algumas consideraes podem ser feitas sobre a perda de mensagens SNMP. No caso de uma mensagem de Get, GetNext ou GetBulk, a estao de gerenciamento deve assumir que esta mensagem (ou o GetResponse correspondente) tenha sido perdida se no receber resposta num certo perodo de tempo. A estao de gerenciamento ento pode repetir a mensagem uma ou mais vezes at que obtenha a resposta. Desde que um nico request-id (que identifica a mensagem) seja utilizado para cada operao distinta, no hav er dificuldade em identificar mensagens duplicadas. No caso de uma mensagem de Set, a recuperao deve provavelmente envolver o teste no objeto associado operao atravs de uma Get sobre este mesmo objeto a fim de determinar se a operao Set foi ou no efetivada. Segundo [COH2000], no SNMP o gerente executa o gerenciamento atravs da utilizao do protocolo SNMP, que implementado no topo das camadas UDP, IP e do protocolo dependente do tipo de rede (Ethernet, FDDI, X.25, por exemplo). A figura 3 ilustra o contexto do protocolo SNMP na pilha de protocolo TCP/IP, utilizando o UDP como protocolo de conexo.
Elemento gerenciado
Recursos e Objetos gerenciados
GetNext Request Get Response Get Request Set Request
Trap
Mensagens SNMP
LAN ou Internet
O SNMP requer alguns servios da camada de transporte para que suas mensagens sejam transmitidas entre as entidades de gerenciamento. Isso independe da implementao da camada de transporte. 2.10.1. SERVIOS EXIGIDOS PELO SNMP Rodando na camada de aplicao da arquitetura TCP/IP, como mostrado na Figura 3, o SNMP encontra-se acima das camadas de Transporte e Rede. Para que o SNMP possa funcionar adequadamente, estas camadas (Transporte e Rede) devem fornecer ao menos cinco servios que so de vital importncia transmisso das mensagens SNMP atravs da rede ([COH2000]): a) roteamento -A camada de Rede quem fornece as funes de roteamento, as quais aperfeioam toda a utilidade do gerenciamento da rede, dando a possibilidade de re rotear os pacotes em torno de reas da rede com falhas. Isso permite que o gerenciamento da rede continue operando mesmo aps falha em alguma(s) mquina(s) na rede;
Trap
30 b) independncia do meio - Permite ao SNMP gerenciar diferentes tipos de elementos da rede, de forma independente. Caso o SNMP fosse construdo sobre a camada de enlace, estaria preso a esta implementao de enlace especfica, desse modo o SNMP no poderia gerenciar um outro dispositivo que implementasse outro protocolo de enlace, o que limitaria o gerenciamento da rede; c) fragmentao e Remontagem - Este servio est relacionado com a independncia do meio. A mensagem SNMP pode ser fragmentada em pacotes, transmitida pelo meio e remontada no destino. O protocolo IP permite que os pacotes SNMP trafeguem pelo meio com diferentes tamanhos. A Fragmentao e a Remontagem reduzem a robustez geral do gerenciamento da rede, pois se qualquer fragmento for perdido pelo caminho, toda a operao ir falhar; d) checksum ponto-a-ponto - O checksum ponto-a-ponto um servio de checagem de erros fornecido pela camada de transporte que permite a uma entidade conferir a integridade dos dados recebidos atravs da rede, aumentando a confiabilidade da transmisso; e) multiplexao/demultiplexao Os servios de Multiplexao e
Demultiplexao so fornecidos pelo protocolo de transporte. Estes servios facilitam em muito os possveis relacionamentos de gerenciamento com o SNMP, permitindo que vrias aplicaes SNMP possam utilizar servios da camada de transporte. 2.10.2. FORMATO DA MENSAGEM SNMP No SNMP, as informaes so trocadas entre os gerentes e agentes na forma de mensagens. Cada mensagem possui duas partes, um cabealho e uma Protocol Data Unit (PDU). O cabealho inclui um nmero de verso (version) que indica a verso do SNMP e um nome de comunidade (community). O nome de comunidade possui duas funes. Primeiro, o nome de comunidade define um dispositivo de acesso para um grupo de NMS ([ODA1998]). Segundo aqueles dispositivos cujo nome de comunidade so desconhecidos so excludos de operaes SNMP. Os gerentes tambm podem utilizar o nome de comunidade
31 como uma forma de autenticao. O campo PDU pode conter qualquer um dos cinco tipos de PDU utilizados pelo SNMP (SNMP PDU). Esta estrutura pode ser visualizada na Fig ura 4. F IGURA 4 - FORMATO DA MENSAGEM SNMP Version Community PDU SNMP
Fonte: [ODA1998] As PDU GetRequest PDU, GetNextRequest PDU e SetRequest PDU so definidas no SNMP com o mesmo formato da GetResponse PDU, com os campos errorstatus e error-index com valor zero. Essas PDU possuem os seguintes campos ([ODA1998]): a) version - Indica a verso do protocolo SNMP utilizado; b) community - O nome de comunidade atua como uma senha para autenticar a mensagem SNMP; c) SNMP PDU - a unidade de dados de protocolo (Protocol Data Unit PDU) utilizada pelo SNMP; contm os dados referentes a operao desejada (Get, GetNext etc). Sua forma mais geral inclui os seguintes campos: PDU type - indica o tipo de PDU, neste caso pode ser uma GetRequest PDU, uma GetNextRequest PDU, uma SetRequest PDU ou uma GetResponse PDU; request-id - Usado para identificar o request; essa mesma identificao ser utilizada na resposta a esta mensagem; error-status - um sinalizador utilizado para indicar que uma situao inesperada ou erro ocorreu no processamento da mensagem; seus valores possveis so: i. noError (0) - Indica que no houve qualquer tipo de erro no processamento da mensagem;
32 ii. tooBig (1) - Se o tamanho da mensagem GetResponse gerada exceder uma limitao local, ento o campo error-status assume este valor. Neste caso, o valor do campo error-index deve ser zero; iii. noSuchName (2) - Indica que o valor de alguma varivel da lista de variveis (variablebindings) no est disponvel na MIB em questo. Neste caso, o valor do campo error-index indica em qual varivel da lista ocorreu o problema; iv. badValue (3) - Significa que o valor para uma determinada varivel da lista no est de acordo com a linguagem ASN.1; ou que o tipo, tamanho ou valor inconsistente. Assim como no caso anterior, o valor do campo error-index indica em qual varivel da lista ocorreu o problema; v. readOnly (4) - Indica que determinada varivel da lista s pode ser lida e no alterada. Neste caso, esse tipo de cdigo de erro s retornado aps uma operao de Set sobre alguma varivel. O valor do campo error-index indica em qual varivel da lista ocorreu o problema; vi. genErr (5) - Se o valor de uma determinada varivel da lista no puder ser identificado ou alterado por outras razes que no as j citadas, ento o campo error-status assume o valor genErr ou simplesmente 5. Neste caso, o valor do campo error index indica em qual varivel da lista ocorreu o problema; d) error-index - Quando o campo error-status diferente de zero, este campo fornece uma informao adicional indicando qual varivel da lista de variveis causou a exceo (ou erro); e) variablebindings - Uma lista de nomes de variveis e seus respectivos valores (em alguns casos, como no GetRequest PDU, esses valores so nulos). A estrutura deste campo mostrada na Figura 5.
33
nome1
valor1
nome2
valor2
...
nomeN
valorN
Fonte: [ODA1998] Por se tratar de um caso particular de mensagem, indicando uma situao inesperada, a Trap PDU possui uma estrutura diferente das demais PDU utilizadas pelo SNMP. 2.10.2.1. GetRequest PDU A GetRequest PDU utilizada pela estao de gerncia SNMP para executar a operao Get, requisitando ao agente SNMP a leitura de variveis da MIB da mquina onde ele se encontra. A entidade emissora inclui os seguintes campos nesta PDU: F IGURA 6 - FORMATO DA GETREQUEST PDU PDU type request-id 0 0 variablebindings
Fonte: [ODA1998] a) PDU type - Este campo indica que se trata de um GetRequest PDU; b) request-id - A entidade emissora associa a este campo um nmero que identifica unicamente este request. O request-id possibilita aplicao SNMP relacionar uma mensagem de response recebida a uma mensagem de request enviada, pois o response trar o mesmo valor do request-id. Alm disso, o request-id permite ao agente identificar PDU duplicadas geradas em funo de falhas no servio de transporte; c) variablebindings - Uma lista de instncias de objetos (variveis) dos quais so requisitados os valores. Percebe-se na Figura 6 que na GetRequest PDU os campos error-status e errorindex possuem o valor zero.
Rede
Fonte: [COH2000] A entidade SNMP receptora responde a uma GetRequest PDU com uma GetResponse PDU contendo o mesmo valor do request-id, como est mostrando na figura 7. Caso a entidade receptora da GetRequest PDU possa fornecer o valor de todas as variveis listadas no campo variablebindings, ento montada uma GetResponse PDU contendo este campo acrescentado do respectivo valor de cada varivel. Se o valor de apenas uma varivel no puder ser informado, ento nenhum dos valores das outras variveis so retornados. As condies de erro que podem acontecer so ([ODA1998]): a) para uma varivel referenciada no campo variablebindings que no seja encontrada uma correspondente na MIB em questo; ou a varivel referenciada pode ser um tipo agregado e desta forma no h uma valor agregado a esta instncia. Neste caso, a entidade receptora retorna uma GetResponse PDU com o campo error-status indicando noSuchName e com o valor do campo error-index indicando que varivel da lista de variveis (variablebindings) causou o problema, ou seja, se a terceira varivel da lista de variveis no estiver disponvel para a operao Get, ento o campo error-index da GetResponse PDU possui o valor 3; b) a entidade receptora pode fornecer o valor de todas as variveis da lista, mas o tamanho resultante da GetResponse PDU pode exceder a limitao local. Neste caso, a entidade receptora envia entidade emissora uma GetResponse PDU com o campo errorstatus indicando tooBig;
35 c) a entidade receptora pode no fornecer o valor de uma determinada varivel por alguma outra razo. Neste caso, a entidade receptora retorna uma GetResponse PDU com o campo error-status indicando genErr e com o valor do campo error-index indicando que varivel da lista de variveis causou o erro. Se nenhum dos casos anterior se aplica, ento a entidade receptora envia para a entidade da qual originou a GetRequest PDU uma GetResponse PDU com o campo errorstatus indicando noError e com o valor do campo error-index com valor zero. 2.10.2.2. GetNextRequest PDU A GetNextRequest PDU utilizada pela estao de gerncia SNMP para executar a operao GetNext, requisitando ao agente SNMP a leitura da prxima varivel na ordem lexicogrfica da MIB da mquina onde ele se encontra. A GetNextRequest PDU praticamente idntica GetRequest PDU, possuindo o mesmo mecanismo de troca e a mesma estrutura, como mostrado na Figura 8. F IGURA 8 - FORMATO DA GETNEXTREQUEST PDU.
PDU type
request-id
variablebindings
Fonte: [ODA1998] A nica diferena o seguinte: numa GetRequest PDU cada varivel descrita na lista de variveis (variablebindings) deve ter seu valor retornado. Na GetNextRequest PDU, para cada varivel, retornado o valor da instncia que a prxima na ordem segundo a definio da MIB. Assim como a GetRequest PDU, a GetNextRequest PDU chamada ou todos os valores de todas as variveis da lista (variablebindings) so retornados ou nenhum deles , conforme mostrado na figura 9.
36
Rede
Fonte: [COH2000] Apesar de parecer pouco significante, esta diferena entre a GetRequest PDU e a GetNextRequest PDU possui grandes implicaes. A fim de entender essas implicaes vamos analisar algumas possibilidades: suponha-se que uma estao de gerncia (NMS) deseje recuperar os valores de todas as variveis simples do grupo UDP de uma determinada MIB. A NMS ento envia ao gerente responsvel por gerenciar esta MIB uma GetRequest PDU na seguinte forma: GetRequest (udpInDatagrams.0, udpNoPorts.0, udpInErrors.0, udpOutDatagrams.0) Se a MIB em questo suportar todas as variveis relacionadas na lista, ento uma GetResponse PDU dever ser retornada com os respectivos valores das variveis referenciadas na GetRequest PDU: GetResponse ((udpIndatagrams.0 = 100),(udpNoPorts.0 = 1), (udpInErrors.0 = 2) ,(udpOutDatagrams.0 = 200)) , Onde 100, 1, 2 e 200 so os valores das respectivas variveis requisitadas no GetRequest. Entretanto, se no for possvel retornar o valor de qualquer das variveis, ento
37 a GetResponse PDU descartada e outra GetResponse PDU construda e enviada ao gerente da NMS com o cdigo de erro indicando noSuchName. Para assegurar que todos os valores disponveis sejam informados, utilizando-se a GetRequest PDU, a estao de gerenciamento teria que enviar quatro destas PDU separadas, cada uma requisitando o valor de uma varivel especfica. Agora consideremos a utilizao da GetNextRequest PDU na recuperao dos valores das variveis: GetNextRequest (udpIndatagrams.0, udpNoPorts.0, udpInErrors.0, udpOutDatagrams.0) Neste caso, o agente ir retornar o valor da prxima instncia do objeto (varivel) para cada identificador da lista de variveis. Suponha agora que todas as variveis da lista sejam suportadas pela MIB em questo. O identificador (Object Identifier) para a varivel udpInErrors, por exemplo, 1.3.6.1.2.1.7.3. A prxima instncia para esta mesma varivel na ordem da MIB identificada por udpInErrors.0 ou 1.3.6.1.2.1.7.3.0. Da mesma forma, a prxima instncia de udpNoPorts (1.3.6.1.2.1.7.2) udpNoPorts.0 (1.3.6.1.2.1.7.2.0), e assim para as outras variveis. Assim, se todos os valores esto disponveis, o agente ir retornar uma GetResponse PDU na seguinte forma: GetResponse ((udpIndatagrams.0 = 100),(udpNoPorts.0 = 1), (udpInErrors.0 = 2) ,(udpOutDatagrams.0 = 200)), A qual a mesma retornada com a utilizao da GetRequest PDU. Agora, suponhamos que o valor de udpNoPorts no esteja disponvel e que a mesma GetNextRequest PDU seja utilizada. Neste caso, a resposta do agente viria na seguinte forma: GetResponse ((udpIndatagrams.0 = 100),( udpInErrors.0 = 2), (udpInErrors.0 = 2) ,(udpOutDatagrams.0 = 200)) Neste caso, o identificador da varivel udpNoPorts.0 no um identificador vlido para a MIB em questo. Portanto, o agente retorna o valor da prxima instncia na ordem, a qual neste caso udpInErrors.0. Podemos perceber que a utilizao da
38 GetNextRequest PDU nos permite um melhor desempenho na recuperao de um conjunto de valores de variveis quando h a possibilidade de algum destes valores no estarem disponveis. A utilizao da operao GetNext particularmente interessante na recuperao de uma seqncia de instncias de variveis. No entanto, esta operao ainda possui o inconveniente de se ter que enviar sucessivas GetNextRequest PDU, pois este tipo de PDU no permite recuperar um nmero grande de instncias. 2.10.2.3. GetBulkRequest PDU A GetBulk PDU utilizada por um gerente SNMP para executar a operao GetBulk, uma das melhores caractersticas adicionadas ao SNMP padro, que permite que um gerente SNMP resgate uma grande quantidade de informaes de gerenciamento de uma determinada MIB. A GetBulkRequest PDU permite a um gerente SNMP requisitar que a resposta (GetResponse PDU) seja to grande quanto possvel dentro da restrio de tamanho. A GetBulkRequest PDU segue o mesmo princpio da GetNextRequest PDU, recuperando sempre a prxima instncia, na ordenao da MIB, de cada varivel da lista de variveis (variablebindings). A diferena que, com a GetBulkRequest PDU, possvel especificar quantas prximas instncias na ordem devem ser retornadas na mesma GetResponse PDU. FIGURA 10 - FORMATO DA GETBULKREQUEST PDU
PDU type
Fonte: [ODA1998] Como mostrado na Figura 10, a GetBulkRequest PDU utiliza um formato diferente das demais PDU, com os seguintes campos:
39 a) PDU type, request-id e variablesbindings - Estes campos possuem na GetBulkRequest PDU a mesma funo que possuem nas demais PDU (GetRequest PDU, GetNextRequest PDU, SetRequest PDU, Response PDU, InformRequest PDU e Trap PDU); b) Nonrepeaters - Especifica o total das primeiras variveis da lista de variveis (variablebindings) das quais apenas a prxima instncia na ordem deve ser retornada; c) Max-repetitions - Especifica o nmero de sucessores, tambm na ordem, que devem ser retornados para o resto (total_de_variveis_da_lista - Nonrepeaters) das variveis da lista de variveis. Aps executar a operao GetBulk o agente deve construir uma GetResponse PDU, contendo as instncias das variveis requisitadas e seus respectivos valores. No entanto, pode acontecer de a GetResponse PDU no retornar todos os pares (instncia, valor) requisitados na lista (podendo at retornar nenhum dos pares). Isso pode ocorrer por trs razes: a) se o tamanho da mensagem que encapsula a GetResponse PDU exceder a limitao local de tamanho ou exceder o tamanho mximo de uma mensagem de request (definido pelo protocolo), ento a GetResponse gerada com um nmero menor de pares no campo variablebindings. Ou seja, a GetResponse PDU gerada inserindo-se os pares at que o tamanho mximo seja alcanado; b) se todos os pares subseqentes descritos na lista de variveis possurem o valor endOfMibView (significando que no existe um sucessor da varivel na ordem da MIB), o campo variablebindings pode ser truncado neste ponto, retornando nenhum dos pares requisitados; c) se o processamento de uma GetBulkRequest PDU necessitar de uma grande quantidade de tempo de processamento pelo agente, ento o agente pode particionar o processamento, retornando resultados parciais.
40
Rede
Fonte: [COH2000] Se o processamento de alguma varivel falhar, por qualquer motivo que no seja endOfMibView, ento nenhum dos pares requisitados retornado. Em vez disso, o agente envia ao gerente uma GetResponse PDU com o campo error-status indicando genErr e o valor do campo error-index apontando para a varivel da lista que gerou o problema. O cdigo de erro tooBig nunca retornado por um agente SNMP pois, como j foi dito, quando a mensagem de resposta muito grande nem todas as variveis requisitadas so retornadas na mesma PDU, diminuindo seu tamanho. 2.10.2.4. SetRequest PDU A SetRequest PDU utilizada por um gerente SNMP na realizao da operao Set, indicando ao agente que o valor de determinada(s) varivel(is) deve(m) ser alterado(s). Este tipo de PDU possui o mesmo formato da GetRequest PDU. No entanto, utilizada para escrever uma varivel na MIB, ao invs de l-la. Diferente da GetRequest PDU e da GetNextRequest PDU, cujo valor das variveis referenciadas na lista (variablebindings) tm valor zero, neste tipo de PDU o valor de cada instncia da lista representa o valor a ser modificado na MIB em questo.
41
PDU type
request-id
variablebindings
Fonte: [ODA1998] Quando um agente recebe uma SetRequest PDU ele efetua, quando possvel, a operao Set, modificando o valor das variveis correspondentes, e retorna ao gerente da NMS emissora uma GetResponse PDU contendo o mesmo request-id. Assim como a operao Get, a operao Set solicitada ou todas as variveis so modificadas/atualizadas ou nenhuma delas o . Se um agente que recebeu uma SetRequest PDU puder alterar o valor de todas as variveis especificadas na lista (variablebindings), ento ele constri uma GetResponse PDU incluindo a mesma lista de variveis, com seus respectivos valores atualizados, enviando-a ao gerente da NMS emissora. Se ao menos um dos valores no puder ser modificado, ento nenhum valor retornado e nem escrito na MIB em questo. As mesmas condies de erro usadas na GetRequest PDU podem ser retornadas (noSuchName, tooBig, genErr). Outro erro que pode ocorrer durante a operao Set o badValue. Esta condio de erro ocorre quando algum dos pares (varivel, valor) contidos na SetRequest PDU estiver inconsistente no que diz respeito ao tipo, tamanho ou valor. Quando algum erro ocorre o agente descarta a GetResponse PDU e constri uma nova com o campo statuserror indicando o tipo de erro que ocorreu durante a operao e com o campo index-error apontando para a varivel da lista que ocasionou o problema.
42
Rede
Fonte: [COH2000] Um curioso cdigo de erro que pode ser retornado por um agente durante a execuo da operao Set o readOnly, que praticamente no implementado. O problema que o readOnly significa que uma determinada varivel na MIB em questo cujo valor deveria ser modificado possui status de apenas leitura (read only), no podendo portanto ser alterado. No entanto, quando um gerente pede a um agente para modificar uma varivel que seja do tipo read only, o agente no podendo executar esta operao, constri e envia uma GetResponse PDU com o cdigo de erro indicando noSuchName e no readOnly. O grande problema desta confuso o fato de que quando um gerente recebe uma GetResponse PDU de uma operao de Set com o cdigo de erro indicando noSuchName, ele no tem como saber se a instncia da varivel realmente no foi encontrada na MIB (o que justifica o noSuchName) ou se o problema, na verdade, que a instncia da varivel possui status read only na MIB em questo. Neste caso, para ter certeza da origem do problema, o gerente teria que enviar uma GetRequest PDU para a varivel que causou o problema a fim de verificar se realmente a varivel no existe na MIB ou se ela apenas possui o status de read only.
43 2.10.2.5. Trap PDU A Trap PDU utilizada pelo agente SNMP na execuo da operao Trap, notificando de forma assncrona eventos extraordinrios que tenham ocorrido no objeto gerenciado. A Trap PDU possui uma estrutura diferente das outras PDU como mostrada na Figura 14. FIGURA 14 - ESTRUTURA DA TRAP PDU - SNMP
PDU type enterprise agent-addr generic-trap specific-trap time-stamp variablebindings
Fonte: [ODA1998] a) PDU type - indica o tipo de PDU, neste caso indica que trata-se de uma Trap PDU; b) enterprise - indica o tipo do objeto que gerou o Trap; este campo preenchido a partir do sysObjectID; c) agent-addr - endereo do objeto que gerou o Trap; d) generic-trap - indica o tipo do Trap; os valores possveis para este campo so: coldStart (0) - Significa que a entidade emissora do Trap est sendo inicializada, de tal modo que a configurao do agente ou da entidade de protocolo podem ser alteradas; warmStart (1) - Significa que a entidade emissora do Trap est sendo reinicializada, de tal modo que nenhuma configurao do agente nem da entidade alterada; linkDown (2) - Significa que a entidade emissora do Trap reconheceu que o estado de alguma de suas linhas de comunicao representadas na configurao do agente est disponvel;
44 linkUp (3) - Significa que a entidade emissora do Trap reconheceu que o estado de uma de suas linhas de comunicao representadas na configurao do agente est disponvel; authentication-Failure (4) - Significa que a entidade emissora do Trap foi o destinatrio de uma mensagem de protocolo que no estava corretamente autenticada. Quando da implementao do gerente, esta propriedade de enviar este tipo de Trap deve ser configurvel, podendo em determinados casos ser desativada; egpNeighborLoss (5) - Significa que um vizinho EGP (Exterior Gateway Protocol) da entidade emissora do Trap foi o mesmo EGP de quem a entidade emissora marcou a queda e cujo relacionamento foi perdido; enterprise-Specific (6) - Significa que a entidade emissora do Trap reconhece que ocorreu algum evento avanado especfico ocorreu; e) specific-trap - possui o cdigo especfico do Trap; f) time-stamp - armazena o tempo decorrido entre a ltima reinicializao da entidade que gerou o Trap e a gerao do Trap; contm o valor de sysUpTime; g) variablebindings - Uma lista de nomes de variveis e seus respectivos valores. Toda vez que uma mquina da rede inicializada, o agente responsvel deve enviar ao gerente um Trap do tipo coldStart (0), indicando que a mquina "entrou" na rede. Outra caracterstica que difere a Trap PDU das outras PDU o fato de que ela no necessita de uma resposta, como mostra a Figura 15.
45
Trap PDU
Rede
Fonte: [COH2000] 2.10.2.5.1. Trap PDU-v2 A Trap PDU-v2 segue as mesmas regras da Trap PDU utilizada na verso bsica do SNMP, mas com um formato diferente. Conforme a Figura 16, este formato o mesmo de todas as outras PDU utilizadas no SNMP, exceto a GetBulkRequest PDU, o que facilita o processamento das mensagens pelo agente SNMP. FIGURA 16 - ESTRUTURA DA TRAP PDU - SNMPV2. PDU type request-id 0 0 variablebindings
Fonte: [ODA1998] 2.10.2.6. InformRequest PDU A InformRequest PDU enviada por um agente SNMP a outro agente SNMP, fornecendo informaes de gerenciamento ao ltimo agente. Esta PDU inclui o campo variablebindings com os mesmos elementos da Trap PDU-v2, como mostra a Figura 17.
46
Fonte: [ODA1998] Ao receber uma InformRequest PDU, o agente determina o tamanho da mensagem de resposta que encapsula uma GetResponse PDU com os mesmos valores dos campos request-id, error-status, error-index e variablebindings da InformRequest PDU recebida. Se este tamanho exceder a limitao local de tamanho ou exceder o tamanho mximo da mensagem de resposta, ento uma GetResponse PDU construda com o cdigo de erro (error-status) indicando tooBig, o ndice de erro (error-index) com valor zero e com a lista vazia de variveis (variablebindings). F IGURA 18 - PASSAGEM DA INFORMREQUEST PDU
Fonte: [SUN1999] Caso o tamanho da mensagem seja aceitvel, seu contedo passado para a aplicao destino e construda e enviada para o agente origem uma GetResponse PDU com o cdigo de erro indicando noError e o ndice de erro com valor zero.
47 2.10.2.7. GetResponse PDU O formato da GetResponse PDU idntico a GetRequest PDU a no ser pela indicao do tipo (PDU Type). Uma GetResponse PDU gerada por uma entidade SNMP sempre que esta recebe uma GetRequest PDU, GetNextRequest PDU ou SetRequestPDU, como descrito anteriormente.
48 Os gerentes SNMP possuem uma configurao de ferramentas. O tipo mais tradicional de ferramenta de gerenciamento SNMP um browser de MIB que permite um usurio inspecionar o MIB cujo objeto seja um dispositivo em particular. Esta freqentemente a interface principal para fixar valores de SNMP de um agente e aplicar mudanas na rede. 2.11.5 COMPILADOR DE MIB O compilador de MIB tem a funcionalidade de adicionar novos objetos na MIB para os equipamentos de rede, dependendo do recurso requerido que a rede est necessitando.
49
3. A PLATAFORMA JDMK
O JDMK uma soluo baseada em Java para construir e distribuir inteligncia de gerenciamento em sistemas, aplicaes e dispositivos de rede. Para o desenvolvimento ele utiliza classes de Java e ferramentas que simplificam o desenvolvimento de agentes dinmicos e extensveis ([SUN1999]). Um agente uma aplicao que oferece um ou mais servios. Os agentes agem como assistentes invisveis, o alertam para problemas potenciais ao longo da rede ou executam tarefas de gerenciamento sem interveno humana. Agentes so inteligentes, autnomos e dinmicos. Eles podem carregar servios de gerenciamento do servidor de rede e podem incluir novos servios para que fiquem disponveis. Isto permite que um novo servio de gerenciamento pode ser iniciado a qualquer hora.
50 entre dispositivos de rede para os servios value-added que podem ser fornecidos aos usurios finais. Com o JDMK, os servios so diretamente incorporados nos agentes. So concedidas permisses aos agentes para executar o gerenciamento da rede e a sua distribuio. Assim, o JDMK abre a porta para novos tipos de aplicaes de gerenciamento que podem ser criadas, desenvolvidas, adicionadas ou eliminadas em tempo de execuo.
51 O JDMK o primeiro produto que implementa a especificao pblica para o JMX. O JMX define uma arquitetura, padres de especificao, APIs, servios para aplicao e gerenciamento de rede, tudo dentro de uma nica especificao. Uma das maiores vantagens do JDMK que permite administrar recursos de uma localizao remota. Assim, pode-se manipular objetos sobre os MBeans em um agente remoto: a) buscando um valor de atributo; b) alterando um valor de atributo. Pode-se ter todo o acesso remoto do JMX aos recursos administrativos: a) chamando uma operao; b) administrativo. O gerente tambm pode adicionar um novo recurso JMX remotamente por: a) usando classes Java existentes j carregadas no agente; b) usando classes novas carregadas em uma localizao arbitrria. O JDMK gradativamente simplifica o desenvolvimento de aplicaes de gerenciamento fornecendo comunicao de multi-protocolo entre o lado do gerente e do agente. Podem ser gerenciados dispositivos ou aplicaes diretamente por um browser ou por uma aplicao SNMP existente. Protocolos adaptadores (por exemplo, HTTP/TCP, RMI, SNMP) permitem ao desenvolvedor adaptar as aplicaes para o ambiente de comunicao local. Para criar novos agentes, usa-se um gerador de objeto de gerenciamento (proxygen) que vem acompanhado com o JDMK. Com esta ferramenta, pode-se criar aplicaes com mdulos gerados de acesso remoto que gerenciam no auxlio da recebendo uma notificao espontnea emitida por um recurso
52 comunicao do protocolo. Pode-se criar um objeto de procura para cada objeto JMX que se deseja administrar remotamente. O JDMK tambm oferece um toolkit para SNMP, para o desenvolvimento de agentes e gerentes, inclusive o compilador de mibgen que encapsula o SNMP nas MIB geradas na forma de MBeans que implementam as MIB.
53
Fonte: SUN[1999]
54
4. MBEANS
O nvel de instrumentao JMX oferece padres para implementar recursos de gerenciamento JMX. A instrumentao de um determinado recurso de gerenciamento fornecido por um ou mais Java Beans de gerenciamento ou MBeans. Um MBean um objeto Java que trabalha com certos padres de especificao para expor atributos e operaes ([SUN1999]). Estes atributos e operaes habilitam qualquer agente JDMK para reconhecer e gerenciar o MBean. Os padres de especificao para MBeans do ao desenvolvedor controle total dos recursos, dispositivos ou aplicaes que sero gerenciados. Por exemplo, padres de atributo que permitem fazer a distino entre as propriedades de somente leitura ou leitura e escrita em um MBean. MBeans implementam uma interface de gerenciamento que define os atributos e operaes acessveis para gerenciamento. MBeans podem gerar e podem propagar eventos espontneos de notificao para aplicaes de gerenciamento remoto. MBeans devem ser desenvolvidos de acordo com as regras especificadas pelo Java Management Extensions (JMX). A arquitetura de JMX permite fazer distintas operaes em um agente, passando pelo seu servidor de MBean, tais como ([ODA1998]): a) listar MBeans; b) habilitar MBean para ter acesso localmente ou remotamente; c) criar novos MBeans; d) executar operaes definidas pelo MBeans; e) receber notificaes emitidas por MBeans; f) mostrar a interface de gerenciamento de um MBean; g) permitir desenvolver um gerente genrico;
55 h) fornecer uma viso do MBean para um protocolo especfico. Um novo MBean pode ser administrado assim que seja registrado dentro do servidor de MBean. Um MBean pode ser criado e pode ser registrado por: a) outro objeto dentro do agente; b) uma aplicao de gerenciamento remoto que conectou ao agente. Os servios de gerenciamento fornecidos com o JDMK so implementados com MBeans. Tambm podem ser escrito os MBeans que representam objetos que se deseja administrar. Estes objetos poderiam incluir os recursos atuais para todos aqueles que queiram administrar e utilizar os servios de administrao de recursos. O JDMK no impe nenhuma restrio quanto ao local onde foi compilado e foram armazenadas as classes MBean. Elas podem ser armazenadas em qualquer localizao especificada no CLASSPATH, varivel de ambiente do agente, ou em um local remoto. Pode-se desenvolver dois tipos de MBeans ([SUN1999]): a) MBean Padro; b) MBean Dinmico.
56 implementar quando se deseja criar novos MBeans de gerenciamento de recursos em que a estrutura de dados previamente definida.
57 identificado com um nome de objeto. O gerente e o agente usam este nome de objeto para identificar qual objeto ir executar uma operao de gerenciamento. possvel ter mltiplos servidores MBean dentro do mesmo agente JDMK.
58 faz com que o PMG seja a soluo perfeita para sistemas de gerenciamento dinmicos em que as propriedades de um MBean podem mudar em tempo de execuo. Segundo [SUN1999], o PMG pode ser usado para administrar qualquer MBean padro ou MBean dinmico.
59 Um cliente do adaptador SNMP um gerente SNMP. Alm disso, o JDMK fornece um toolkit de SNMP que lhe permite gerar MBeans de acordo com MIB padro ou proprietrias, habilitando novos agentes baseados em tecnologia que podem ser integrados em infra-estruturas de redes existentes, incluindo produtos de administrao baseados em SNMP. Conectores e adaptadores de protocolo habilitam aplicaes de administrao para: a) procurar MBeans existente pelos nomes de objetos; b) buscar ou acrescentar atributos de instncias de MBean existentes; c) executar operaes em instncias de MBean existentes; d) instanciar um MBean e registrar a instncia de um novo MBean; e) receber notificaes de MBeans conhecidas (com exceo do adaptador HTML). Segundo [SUN1999], porm, um agente pode incluir qualquer nmero de conectores ou adaptadores de protocolo, possibilitam a administrao remota para muitos gerentes por protocolos diferentes. Proxys so utilizados em MBeans ao lado de gerentes para executar operaes de administrao nos MBeans correspondentes aos agentes. Estes MBeans so registrados com o servidor de MBean que independente de protocolo. Nem conectores nem adaptadores de protocolo so inicializados
60 administrador, aplicaes de administrao e outros objetos registrados que ficarem esperando uma notificao de um broadcast de um MBean. FIGURA 20 - MECANISMO DE NOTIFICAO REMOTA
Fonte: [SUN1999] Tambm pode ser adicionado um ouvinte no servidor de MBean remoto ou em um Proxy MBean. Uma maneira para se adicionar um ouvinte para o gerente pode ser chamando a operao de addNotificationListener apropriada para Proxys MBean. Isto vai transmitir uma chamada para o agente e um ouvinte de protocolo dependente, fazendo com que o agente verifique a chamada recebida, criando no servidor de MBean (Figura 20). No protocolo dependente, o ouvinte gerado administrado pelo servidor. Est a principal rotina, de enviar notificaes ao longo da rede tanto para o agente como para o gerente, que usam um protocolo especificado.
61 conexo reenvia as notificaes para o cliente de conexo assim que eles sejam emitidos pelos MBeans. Quando um MBean, ao lado do agente, emite uma notificao, o HTTP ou o adaptador RMI remete esta notificao para o cliente de conexo ao gerente.
62
63
M IB J D M K
(C o n ju n t o d e M b e a n s )
Im p le m e nta r o a c e s s o d o s M b e a n s a o s r e c u rs o s r e a is d o S is te m a g e re n c ia d o
In c lu ir a M IB J D M K no c d ig o d o g e re n te
In c lu ir a M IB J D M K no M b e a n S e rv e r ( N c l e o d o A g e n te J D M K )
In c lu ir a s fu n c io n a lid a d e s d e g e r n c ia re q u e rid a s e p ro c e s s o d e in te ra o c o m o a g e n te
C o m p ila r o c d ig o fo n te J a v a e e x e c u ta r o g e re n te J D M K r e s u lta n te
Nas prximas sesses ser discutido e detalhado cada um dos procedimentos envolvidos no processo de desenvolvimento de uma aplicao agente utilizando o JDMK como foi representado esquematicamente na Figura 21 (a aplicao gerente desenvolvida de forma equivalente). Ser descrito a seguir o processo de compilao da MIB para convert-la para o formato requerido pelo agente JDMK. Neste processo ser utilizado o subconjunto da MIBII definida por RFC1213. 5.1.1 GERADOR DE MIB MBEANS Para obter o conjunto de MBeans constituintes da MIB JDMK a partir da MIB SNMP utiliza-se a ferramenta Mibgen. Para executar a ferramenta de Mibgen, aps instalar a Plataforma JDMK, devese estar no diretrio onde est o seu arquivo de especificao da MIB e executar o s eguinte comando: $mibgen -d. mib_II_TCC.txt Isto gerar os seguintes arquivos no diretrio atual:
b) o MBean e sua classe metadata para o grupo SNMP: Snmp.Java; SnmpMBean.java; SnmpMeta.Java.
c) o MBean e sua classe metadata para o grupo Sistema: System.Java; SystemMBean.java; SystemMeta.java.
d) o MBean e sua classe metadata para o grupo Interfaces: Interfaces.Java; InterfacesMBean.Java; InterfacesMeta.Java.
e) a classe que representa uma tabela de interface, e o MBean que representa entradas na tabela: entradas: MIB: RFC1213_MIBOidTable.java EnumSnmpEnableAuthenTraps.Java; EnumIfOperStatus.Java; EnumIfAdminStatus.Java; EnumIfType.Java. TableIfTable.Java; IfEntry.Java; IfEntryMBean.Java; IfEntryMeta.Java.
65 O MBean com o nome da MIB apenas a classe administrativa central para administrar os outros MBeans que foram implementados na MIB. Todos os outros MBeans contm as variveis SNMP como atributos da interface de administrao ([SUN1999]). A ferramenta Mibgen gera MBeans padres para a MIB, assim so implementados mtodos individuais como get e set para cada um dos atributos em funo das suas permisses de acesso. necessrio que sejam implementados os mtodos get e set para ler e escrever dados. Considerando que o SNMP no apia aes em MIB, as nicas operaes nestes MBeans so implementaes de checagem do set SNMP solicitando variveis que possam ser alteradas. Operaes podem ser adicionadas, mas o gerente SNMP no poder ter acesso. Porm, outros gerentes podero chamar estas operaes se estiverem conectados por outro protocolo.
notificaes de eliminao: imprime os valores da entrada na nova tabela; IfEntryImpl.java implementa a tabela de entrada e fornece um mtodo
interno para troca de varivel de OperStatus que gera um trap. Este mtodo no est exposto na interface do MBean, assim est s disponvel no cdigo desta aplicao de agente.
66 b) SnmpImpl.java - inicializa e implementa variveis do grupo SNMP, muitas destas so variveis estticas do agente SNMP. Assim chama-se os mtodos de get do objeto adaptador SNMP para retornar as informaes; c) SystemImpl.java - inicializa as variveis de grupo de sistema. O SnmpImpl.java e arquivos do SystemImpl.java fornecem cdigo que pode ser utilizado para implementar posteriormente estes grupos SNMP comuns. 5.2.1 COMPILANDO O MBEANS E AGENTES Para compilar os arquivos .java, o classpath tm que conter o diretrio atual (.), deve-se criar uma pasta patchfiles na pasta atual e copiar o arquivo RFC1213_MIB.java criado para a pasta patchfiles. Em seguida executa-se o seguinte comando: $ javac -classpath classpath -d . *.java
67
":class=HtmlAdaptadorServer,protocol=html,port=" + htmlPort); HtmlAdaptadorServer htmlAdaptador = new HtmlAdaptadorServer(htmlPort); server.registerMBean(htmlAdaptador, htmlObjName); htmlAdaptador.start(); // Cria um adaptador SNMP // snmpObjName = new ObjectName(domain + ":class=SnmpAdaptadorServer,protocol=snmp,port=" + snmpPort); snmpAdaptador = new SnmpAdaptadorServer(snmpPort); server.registerMBean(snmpAdaptador, snmpObjName); snmpAdaptador.start(); // Envia um trap SNMP (porta utilizada = snmpPort+1) // Traps sao definidas no arquivo ACL // snmpAdaptador.setTrapPort(new Integer(snmpPort+1)); snmpAdaptador.sendV1Trap(0, 0, null); // Cria o MIB-II (RFC 1213) e adiciona no MBean Server // mibObjName = new ObjectName("snmp:class=RFC1213_MIB"); RFC1213_MIB mib2 = new RFC1213_MIB(); // O MBean ira registrar todo o grupo e tabela de entradas do MBeans server.registerMBean(mib2, mibObjName); // Une o adaptador SNMP para a MIB mib2.setSnmpAdaptadorName(snmpObjName); [...] } catch (Exception e) { e.printStackTrace(); } } // Chama a referencia get no objeto adaptador SNMP static public SnmpAdaptadorServer getSnmpAdaptador() { return snmpAdaptador; } }
5.3.1 EXECUTANDO O ADAPTADOR SNMP O adaptador SNMP executado da mesma forma que se executa o adaptador Hipertext Markup Language (HTML). Primeiramente cria-se um nome de objeto para o MBean, ento instancia-se a classe com um construtor que permite especificar uma porta no padro, registra-se o MBean como servidor MBean e ento executa-se o adaptador para ativ-lo. Como valor padro, o protocolo SNMP utiliza a porta 161. Considerando que outras aplicaes podem estar usando este porta, o agente utiliza a porta 8085. Quando conecta-se a este agente o gerente SNMP precisar especificar este nmero de porta. 5.3.2 CRIANDO A MIB
68 A aplicao do agente cria e administra uma MIB, o subconjunto de MIB-II. Para isso instancia-se o correspondente RFC1213_MIB com os MBeans que foram gerados pela ferramenta Mibgen. O processo de registro deixa instanciar o MBean e registrar outros MBeans que representam os grupos da MIB e as entradas de suas tabelas. A configurao de todos estes MBeans, ao trmino do registro, compe a representao da MIB na forma de MBeans. 5.3.3 LIGANDO MBEANS DA MIB O MBean principal de uma MIB deve ser ligado explicitamente instncia do adaptador SNMP. O adaptador SNMP no interage com qualquer outro MBean nem com o servidor de MBean ([SUN1999]). Segundo ([SUN1999]), depois que uma MIB for instanciada, deve-se fixar os atributos do SNMPAdaptadorName no MBean principal para que seja ligado ao adaptador SNMP. Este mtodo pode ser chamado diretamente de setSnmpAdaptadorName, se o MBean da MIB foi registrado no servidor de MBean. Deste modo, o adaptador SNMP ter uma referncia de toda as MIB que tem que exibir. No processo que liga o adaptador SNMP e a raiz OID da MIB, o adaptador usa este OID para determinar quais variveis so implementadas na MIB correspondente. Para que o adaptador SNMP solucione um pedido em um determinado OID, as razes OID de todas as MIB devem ser distintas. Isto implica que nenhuma raiz OID pode ser igual a outro ou pode ser uma sub-cadeia de outro. Embora o adaptador SNMP possa ser registrado no servidor de MBean, o adaptador s faz MIB visveis para gerentes SNMP. O gerente SNMP est limitado por seu protocolo, pois no pode tirar total proveito de um agente JDMK pela MIB bsica, e no tem acesso a quaisquer outros MBeans. 5.3.4 TENDO ACESSO AO MBEAN DA MIB Uma vez que o MBean que representa uma MIB foi instanciado e ligou-se com o adaptador SNMP, a MIB passa a ser acessada atravs do adaptador SNMP. Gerentes SNMP podem enviar pedidos para operar os contedos da MIB. O adaptador SNMP interpreta os pedidos de administrao SNMP, executa a operao no MBean
69 correspondente e retorna a resposta SNMP para o gerente. O adaptador de protocolo SNMP compatvel com SNMPv1 e SNMPv2, com a exceo de InformRequest. A vantagem de ter um agente SNMP num JDMK que se pode usar os outros protocolos de comunicaes para interagir com MIB e administrar o adaptador SNMP. No agente, a MIB que foi registrada pode ser visualizada pelo gerente da rede os seus MBeans customizados em um navegador de rede pelo adaptador de protocolo HTML. Se o agente incluir outros conectores nas aplicaes de administrao, poderiam ser conectados ao agente e tambm poderiam administrar a MIB e o adaptador SNMP. Um gerente no-SNMP pode instanciar novos objetos MIB e lig-los ao adaptador SNMP e operar os atributos fornecidos nas operaes da MIB. Os gerentes no-SNMP podem operar as variveis de uma MIB, podem adquirir e podem fixar valores embora qualquer gerente SNMP tambm passa ter este tipo de acesso pelo adaptador SNMP. 5.3.5 ADMINISTRANDO O ADAPTADOR SNMP Gerentes no-SNMP tambm podem controlar o agente SNMP pelo MBean do adaptador SNMP. Como as outras comunicaes do MBean, a porta e outros atributos podem ser modificados pelo adaptador SNMP quando ele estiver parado. Pode-se tambm adquirir informao sobre seu estado, parado ou reiniciado para controlar quando estiver on-line. So definidos estes atributos administrativos e operaes na interface de CommunicatorServerMBean. O Servidor do adaptador SNMP tambm implementa o
SnmpAdaptadorServerMBean que conecta para definir sua informao operacional. O grupo SNMP de MIB-II define certas variveis estticas que os agentes SNMP tem que mostrar. Por exemplo, o adaptador SNMP fornece mtodos para getSnmpInPkts e getSnmpOutBadValues. Gerentes no-SNMP podem ler estas variveis como atributos do adaptador SNMP MBean. Segundo [SUN1999], o adaptador SNMP tambm fornece outra informao operacional que no disponvel aos gerentes SNMP. Por exemplo, o ActiveClientCount e ServedClientCount no qual so relatrio de atributos de somente leitura do gerente SNMP de conexes para este agente. Atributos de leitura e escrita do BufferSize que permite mudar
70 o tamanho da mensagem do buffer quando o adaptador estiver parado. O adaptador MBean tambm fornece operaes para enviar Traps ou implementar sua prpria segurana.
Agora esta criado o acesso ao adaptador de HTML deste agente apontando um navegador de rede para a seguinte URL: http://localhost:8082. Pelo adaptador HTML, pode-se ver os MBeans que representam a MIB (Figura 23): FIGURA 23 ACESSANDO O AGENTE VIA PROTOCOLO HTML
a) a classe RFC1213_MIB MBean do domnio SNMP a classe principal da MIB. Nela h um nome e a informao sobre o adaptador SNMP para o qual o MBean conectado;
71 b) o domnio RFC1213_MIB contm os MBeans de cada grupo; c) o domnio de ifTable contm as entradas das tabelas de interface. Em quaisquer destes MBeans, pode-se escrever novos valores nos campos de texto de atributos fornecidos e ento pode-se selecionar o boto de Apply. Esta configurao fixa a varivel correspondente ao SNMP, e depois disso, os gerentes SNMP vero o novo valor. F IGURA 24 INTERAGINDO COM O AGENTE SNMP
5.4.1 ENVIANDO TRAPS A aplicao de agente SNMP tambm demonstra como o agente pode enviar Traps. Personalizando a classe IfEntryImpl pode-se fornecer um mtodo que troca a varivel de IfOperStatus e enviar um Trap. Alterando o cdigo gerado, pode-se fazer com que uma entidade do agente troque o estado de operao e assim a varivel de MIB ser atualizada e um Trap ser enviada aos gerentes SNMP. O quadro 02 contm o cdigo para enviar um trap pelo adaptador SNMP.
72
value1);
varBindList.addElement(varBind1); try { SNMPAdaptador.sendV1Trap(generic, 0, varBindList); } catch (Exception e) { e.printStackTrace(); } }
Considerando que o mtodo de sendTrap executado em uma linha diferente, ele precisa adquirir uma referncia para a instncia do adaptador SNMP, onde so chamados de mtodos estticos derivados da nossa implementao do agente. Este cdigo especfico destes agentes e apenas um exemplo de como restaurar esta informao. Considerando que nosso programa no tem nenhum status real de operao, ento criou-se a classe LinkTrapGenerator que trocar o estado periodicamente. um MBean que contm uma thread com repetio contnua. O perodo de intervalo entre um trap e outro e o ndice da entrada da tabela pode ser modificado pelos atributos do MBean.
73
Para iniciar o gerador de Traps, a aplicao cria um MBean LinkTrapGenerator, conforme quadro 03. Durante o momento em que ele est sendo registrado, o MBean inicia a thread e envia um Trap num intervalo padro de 2 segundos, conforme Quadro 04. QUADRO 04 - INICIANDO UM TRAP GENERATOR
// Cria um LinkTrapGenerator (especifica o ifIndex no nome do objeto) // String trapGeneratorClass = "LinkTrapGenerator"; int ifIndex = 1; trapGeneratorObjName = new ObjectName("trapGenerator:class=" + trapGeneratorClass + ",ifIndex=" + ifIndex); server.createMBean(trapGeneratorClass, trapGeneratorObjName);
Para que um adaptador SNMP envie Traps aos gerentes remotos, necessrio definir o grupo de Traps no arquivo de lista de controle de acesso (ACL). Este grupo de definies comunitrias lista todos os hosts para os quais o agente enviar todos os Traps ([SUN1999]). Uma definio comunitria associa um nome comunitrio com uma lista de hosts, especificado pelo hostname ou pelo endereo de IP. Todos os hosts recebero os Traps em um pacote identificado pelo nome comunitrio. Segue no quadro 05 um exemplo modelo da especificao do arquivo ACL:
74
So enviados Traps na porta especificada pelo atributo de TrapPort do MBean SnmpAdaptadorServer. No agente foi fixada a porta trap para 8086, mas isto pode ser alterado durante a implementao da MIB ou aplicao de administrao. Se o arquivo de ACL no foi definido ou se o grupo de trap estiver vazio, os Traps sero enviados para o localhost 5.4.2 INTERAGINDO COM O GERADOR DE TRAPS Aps criar o MBean que envia Traps para o adaptador SNMP, segue abaixo uma interao com o gerador de Traps: a) acessando o adaptador HTML deste agente utilizando um navegador
75
objeto do gerador de Traps, podendo modificar seus atributos para alterar a entrada da tabela em que se esta operando e mudar o intervalo entre as Traps. b) mude o intervalo da trap para 10000 de forma que as Traps sejam enviadas a cada 10 segundos; FIGURA 26 INTERAGINDO COM O GERADOR DE TRAPS II
c) volte para a pgina do agente e clique no ifEntry.ifIndex=1 do MBean ifTable. Configure o perodo de recarga para 10, e clique no boto Reload. O gerador de trap deveria trocar o valor da varivel de IfOperStatus, isto acontece devido na implementao da entrada da tabela que envia um trap quando este estado dele alterado; d) volte para a pgina do agente e clique no name=Snmp no MBean RFC1213_MIB. Role a tela para baixo e veja o SnmpOutPkts e variveis do SNMPOutTraps. Estas variveis deveriam ser as nicas com valores diferentes de zero, se nenhum gerente conectou ao agente SNMP. O grupo SNMP apresenta informao sobre o adaptador SNMP e pode-se ver quantos Traps foram enviados desde que o agente foi iniciado.
76
77 Se um arquivo de ACL existir, ser aplicado o acesso restrito definindo para todos os gerentes ou servidores proxy que tm acesso ao agente por seu adaptador SNMP. Se o arquivo de ACL no existir quando os agentes forem inicializados, a todos os gerentes concedido acesso completo ao agente pelo adaptador SNMP. 5.5.1 FORMATO DO ARQUIVO ACL Segundo [SUN1999], um arquivo ACL contm um grupo de acl que define ao gerente os direitos de acesso e um grupo de trap que definem quais hosts podero enviar Traps. 5.5.2 FORMATO DO GRUPO ACL O grupo de acl contm um ou mais listas de configuraes de comunidade. QUADRO 06 FORMATO ARQUIVO ACL acl = { list1 list2 ... listN } Cada lista tem o formato exibido no quadro 07: QUADRO 07 FORMATO ARQUIVO ACL { communities = communityList access = accessRights managers = hostList }
O communityList uma lista comunitria SNMP que nomeia para qual controle de acesso se aplicar. A nomeao comunitria nesta lista est separada atravs de vrgulas. O accessRights especifica os direitos a serem concedidos a todos os gerentes que executam nas mquinas especificadas nos itens dos gerentes. H dois possveis valores: leitura e escrita ou somente de leitura.
78 O artigo de hostList especifica as mquinas hosts dos gerentes que so concedidos os direitos de acesso. O hostList uma lista de hosts separada por vrgulas, em cada um dos quais podem ser expressados como: a)Um nome host; b)Um endereo IP; c)Uma mscara de sub rede. 5.5.3 FORMATO DO GRUPO DE TRAP O grupo de trap especifica os hosts para os quais o agente pode enviar Traps. Este grupo contm um ou mais definies de comunidade de trap. QUADRO 08 ESPECIFICAO DOS HOSTS PARA ACESSO trap = { community1 community2 ... communityN } Cada definio a associao entre uma configurao dos hosts e a cadeia de Traps enviadas no SNMP, de acordo com o formato no quadro 09: QUADRO 09 DEFINIO DOS HOSTS { trap-community = trapCommunityString hosts = trapInterestHostList } O item de trapCommunityString especifica a cadeia SNMP que ser includo nas Traps enviadas aos hosts especificados nos itens hosts. O item de trapInterestHostList especifica uma lista separada por vrgulas dos hosts, onde cada host deve ser identificado por seu nome ou endereo de IP completo.
79
6. CONCLUSO
Hoje, as redes de computadores baseadas no protocolo TCP/IP, como por exemplo, a Internet, crescem assustadoramente. Isto se deve ao fato deste protocolo ser de fcil implementao e manuteno, alm de permitir a interligao de LAN atravs de outras WAN, com um desempenho considervel. Atualmente possvel, inclusive, ter-se uma implementao de rede local utilizando o protocolo TCP/IP, sem conect-la a outras redes, caracterizando uma rede Intranet, hoje muito utilizada na implementao de LAN em empresas ([ODA1998]). Porm necessrio monitorar e controlar o funcionamento, crescimento e parmetros dessas redes, garantindo o seu correto desempenho. A necessidade de gerenciamento de redes evidente e tende a crescer medida que as redes se tornam maiores e mais complexas. Como essas redes esto cada vez mais heterogneas, uma padronizao do protocolo de gerncia garante que estas sejam gerenciadas de maneira uniforme. Entre as atividades bsicas do gerenciamento de redes esto a deteco e correo de falhas, em um tempo mnimo, e no estabelecimento de procedimentos para a previso de problemas futuros. Por exemplo, monitorando linhas cujo trfego esteja aumentando ou roteadores que estejam se sobrecarregando, possvel tomar medidas que evitem o colapso da rede, como a reconfigurao das rotas ou troca do roteador por um modelo mais adequado. O protocolo de gerncia SNMP (Simple Network Management Protocol) constitui atualmente um padro operacional de facto, e grande parte do seu sucesso se deve a sua simplicidade. Outro aspecto importante a sua capacidade de gerenciar redes heterogneas constitudas de diferentes tecnologias, protocolos e sistemas operacionais. Dessa forma, o SNMP capaz de gerenciar redes Ethernet, Token Ring que conectem PCs, Apple Machintosh, estaes SUN e outros tipos de computadores ([COH2000]). No entanto, o SNMP possui algumas limitaes. A maior delas o fato de no ser apropriado para o gerenciamento de redes muito grandes, devido limitao de desempenho da estratgia de pooling utilizada pelo gerente SNMP na comunicao com os agentes SNMP ([CHI1999]). O Simple Network Management Protocol um excelente
80 protocolo para gerenciar dispositivos em uma LAN. A maior parte das LAN disponibilizam a largura de banda necessria para que um gerente SNMP possa efetuar o pooling nos vrios agentes da rede sem que isso afete significativamente o desempenho da mesma. Enquanto que numa WAN a largura de banda massivamente utilizada, alm de ser lenta. Assim, o desenvolvimento de ferramentas de gerncia que implementem o protocolo SNMP torna-se bastante atrativo. Como mostrado neste trabalho, hoje j contamos com plataformas, como o prprio JDMK, que permitem desenvolver essas ferramentas com uma maior independncia do protocolo, tornando o processo de concepo menos complexo. A plataforma JDMK em conjunto com a linguagem Java tornou-se possvel criar um agente SNMP que possa operar em sistemas operacionais diferentes, como por exemplo, Unix e Windows NT, fazendo com que fossem alcanados os objetivos propostos. A linguagem Java tornou possvel a idia de criar um agente que tivesse caractersticas Web e pudesse ser acessado em qualquer local que se tenha acesso a Internet. Umas das maiores dificuldades foi utilizar uma plataforma na qual, a mesma era recente no mercado, onde tinha-se pouca bibliografia e pouco se sabia dela, o JDMK ainda novo no Brasil, sendo que, grande parte das dvidas que vieram a aparecer, foram sanadas via correio eletrnico, por usurios, principalmente dos Estados Unidos e Alemanha, onde concentra-se grande parte dos desenvolvedores que utilizam esta plataforma. necessrio lembrar que estas ferramentas devem facilitar as tarefas de monitorao, anlise e deteco de falhas na rede, porm, associadas a elas devem existir uma estrutura que coordene as atividades de gerenciamento, assegurando sua eficincia e no permitindo que essas atividades se tornem mais um peso na tarefa de operao da rede. Outra tendncia do SNMP sua migrao para a Web, pois a convenincia do gerenciamento neste ambiente possui um apelo muito forte ([SUN1999]). Uma ferramenta de gerenciamento baseado em Web que utilizaria o navegador familiar ao usurio para apresentar as informaes de gerenciamento, tornando a tarefa de gerncia bem mais amigvel do que uma linha de comando. Uma vez que esta ferramenta possa ser utilizada em qualquer PC que possua um navegador, as informaes de gerenciamento passam a estar acessveis de qualquer local. Esta portabilidade permite que apenas com um
81 navegador Web e um ponto de acesso remoto, o gerente possa monitorar e controlar a rede a qualquer hora, em qualquer lugar, enquanto viaja ou at mesmo de casa. Por fim, devemos relembrar que com uma estrutura de gerenciamento adequada e a utilizao das facilidades advindas disto, poderemos garantir o funcionamento adequado dos servios de rede. Para trabalhos futuros interessante implementar mais recursos da MIB utilizada ou ento utilizar a mesma plataforma JDMK para a criao de gerentes SNMP e ainda incrementar o gerenciamento HTML (MIB-Browser) para torn-lo uma aplicao mais amigvel para a gerncia.
82
7. BIBLIOGRAFIA
[CHI1999] CHISANE, Fabrcio. Gerenciamento de redes SNMP. 02/2000. Endereo eletrnico: http://www.inf.ufgrs.br/~chisane [COH2000] COHEN, Yoran. SNMP simple network management protocol. 02/2000. Endereo eletrnico: http://www-
dos.uniinc.msk.ru/tech1/1995/snmp/snmp.htm [FUR1998] FURLAN, Jos Davi. Modelagem de objetos atravs da UML : the unified modeling language. So Paulo : Makron Books, 1998. [LIU1999] LIU, Narayanan J. Enterprise Java Developers Guide. United States of America : McGraw-Hill, 1999. [MAF1999] MAFINSKI, Andr. Prottipo de software de gerncia SNMP para o ambiente Windows NT. Universidade Regional de Blumenau : Trabalho de Concluso de Curso de Cincias da Computao - Bacharelado, 1999. [NAU1996] NAUGHTON, Patrick. Dominando o java. So Paulo : Makron Books, 1996. [NET1990] NETO, Vicente. Redes de dados, teleprocessamento e gerncia de redes. So Paulo : rica, 1990. [ODA1998] ODA, Cybelle Suemi. Gerenciamento de redes de computadores. Endereo Eletrnico: http://www.gt-er.cg.org.br/operacoes/gerencia-redes [SOA1995] SOARES, Luiz Fernando G. Redes de computadores : LANs, MANs e WANs s redes ATM. Rio de Janeiro : Campus, 1995. [STA1996] STALLINGS, W. SNMP, SNMP v2 and RMON. First Edition. Addison Wesley, 1996.
83 [SUN1999] SUN, Microsystems. Java Dynamic Management Kit 4.0 Tutorial. 02/2000. Endereo eletrnico: http://docs.sun.com [TAN1996] TANEMBAUM, A. S. Computer networks. Third Edition. Prentice Hall, 1996. [VOG1999] VOGEL, Andreas. Programming with Enterprise JavaBeans. New York : Wiley, 1999. [WAL1997] WALNUM, Clayton. Java em exemplos. So Paulo : Makron Books, 1997. [WIN1993] WINBLAD, Ann L et al. Software orientado ao objeto. So Paulo : Makron Books, 1993.
84
8. ANEXOS
8.1 ANEXO 1
Cdigo fonte do Agente em Java.
/* * @(#)Arquivo * @(#)Autor * @(#)Data * */ Agente.java Jorge Lucas 06/2000
import javax.management.ObjectName; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import com.sun.jdmk.Trace; import com.sun.jdmk.comm.HtmlAdaptorServer; import com.sun.jdmk.comm.SnmpAdaptorServer;
public class Agente { static SnmpAdaptorServer snmpAdaptor = null; public static void main(String args[]) { MBeanServer server; ObjectName htmlObjName; ObjectName snmpObjName; ObjectName mibObjName; ObjectName trapGeneratorObjName; int htmlPort = 8082; int snmpPort = 161;
try { Trace.parseTraceProperties(); Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente", "main", "Caminho padrao"); } catch(java.io.IOException e) { e.printStackTrace(); } try { server = MBeanServerFactory.createMBeanServer(); String domain = server.getDefaultDomain(); // Cria e inicia o adaptador HTML. //
85
htmlObjName = new ObjectName(domain + ":class=HtmlAdaptorServer,protocol=html,port=" + htmlPort); Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente", "main", "Adicionando adaptador HTML para o servidor MBean como o nomme \n\t" + htmlObjName); java.lang.System.out.println("NOTA: Adaptador HTML esta conectado na porta TCP" + htmlPort); HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer(htmlPort); server.registerMBean(htmlAdaptor, htmlObjName); htmlAdaptor.start(); // // Codigo especifico para o SNMP: // // Cria e inicia o adaptador SNMP. // Especifica a porta de uso na Constructor. // Caso queria utiliar a porta(161) comentar a proxima linha // snmpPort = 8085; // snmpPort = 8085; snmpObjName = new ObjectName(domain + ":class=SnmpAdaptorServer,protocol=snmp,port=" + snmpPort); Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente", "main", "Adicionando adaptador SNMP para o servidor MBean como o nomme \n\t" + snmpObjName); java.lang.System.out.println("NOTa: Adaptador SNMP esta conectado na porta UDP " + snmpPort); snmpAdaptor = new SnmpAdaptorServer(snmpPort); server.registerMBean(snmpAdaptor, snmpObjName); snmpAdaptor.start(); // Inicializa a porta trap SNMP. // Utiliza a porta = snmpPort+1. // java.lang.System.out.print("NOTa: Enviando um trap SNMP para cada destino definido no arquivo ACL ..."); snmpAdaptor.setTrapPort(new Integer(snmpPort+1)); snmpAdaptor.sendV1Trap(0, 0, null); java.lang.System.out.println("Done."); // Cria a MIBCreate II (RFC 1213) e adiciona no Servidor MBean. // mibObjName= new ObjectName("snmp:class=RFC1213_MIB"); Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente", "main", "Adicionando RFC1213-MIB para o Servidor MBean como o nome\n\t" + mibObjName); RFC1213_MIB mib2 = new RFC1213_MIB(); server.registerMBean(mib2, mibObjName); // Conecta o adaptador SNMP na MIB para fazer o acesso da MIB atravs adaptador do protocolo SNMP. // Se o passo nao acontecer, a MIB ainda estara ativa no Agente JDMK: // Os objetos serao acessados atraves do HTML e nao SNMP.
86
// mib2.setSnmpAdaptorName(snmpObj Name); // Cria um LinkTrapGenerator. // Especifica o ifIndex para usar no object name. // String trapGeneratorClass = "LinkTrapGenerator"; int ifIndex = 1; trapGeneratorObjName = new ObjectName("trapGenerator" + ":class=" + trapGeneratorClass + ",ifIndex=" + ifIndex); Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente", "main", "Adicionando " + trapGeneratorClass + " para o Servidor MBean com o nome \n\t" + trapGeneratorObjName); server.createMBean(trapGeneratorClass, trapGeneratorObjName); } catch (Exception e) { e.printStackTrace(); } } static public SnmpAdaptorServer getSnmpAdaptor() { return snmpAdaptor; } }
8.2 ANEXO 2
Cdigo fonte do arquivo de permisso ACL
# # @(#)jdmk.acl # # # accesso: pode ter acesso somente para "read -only" ou "read-write" # # gerents que podem acessar: # - hostname: bla bla bla # - Endereco IP: 123.456.789.12 # - Mascara de Sub-rede: 123.255.255.255 #
acl = { { communities = public, private access = read-only managers = 100.100.100.10 } { communities = public access = read-write
87
managers = 100.100.100.10 } } trap = { { trap-community = public hosts = 100.100.100.10 } { trap-community = private hosts = 100.100.100.10 } }