Campo Descriçãoversion Versão SNMP; RFC 1157 é versão 1.
community Uma PAIring de um agente SNMP com alguns conjuntos
arbitrários de entidades de aplicação SNMP.
request-id Usados para distinguir entre requests OUStanding provendo
cada request com um ID único.
error-status Usados para indicar que uma exceção ocorreu
enquanto processava um request.
error-index Quando um error-status é não 0, error-index pode
prover informações adicionais indicando qual
variável na lista causou a exceção.
variable-bindings Uma lista de nomes de variáveis e valores correspondentes.
enterprise Tipo do objeto gerador do trap.
generic-trap Tipo genérico do trap.
specific-trap Código específico do trap.
time-stamp Tempo ocorrido entre a última (re)inicialização da entidade da rede e a geração do trap.
A estrutura é descrita na figura 1 e os campos que a constituem estão definidos na Tabela 2. Nota-se que o GetRequest, GetNextRequest e SetRequest PDU tem o mesmo formato que o GetResponse PDU.
b) Este PDU é então passado para um serviço de autenticação, junto com o endereço de origem e destino e o nome da comunidade. O serviço de autenticação realiza qualquer transformação para esta troca, assim como criptografia ou a inclusão de um código de autenticação e retorna o resultado.
c) A entidade do protocolo então constrói a mensagem, consistindo de um campo versão, nome da comunidade, e o resultado do passo2.
d) O novo objeto ANS.1 é representado usando as regras básicas de codificação, e passado ao serviço de transporte.
RFC1157-SNMP DEFINITIONS ::= BEGINFigura 2 Formatos SNMP (RFC 1157)IMPORTS
ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks
FROM RFC1155-SMI;
--top-level message
Message = SEQUENCE{version INTEGER{version-1 (0)}, -- for this RFC
community OCTET STRING, -- community name
data ANY} --e.g., PDUs if trivial authentications is being used
--protocol data units
PDUs ::= CHOICE {get-request-PDU GetRequest-PDU,
get-next-request GetNextRequest-PDU,
get-response GetResponse-PDU,
set-request SetRequest-PDU,
trap Trap-PDU}
--PDUs
GetRequest-PDU, [0]IMPLICIT PDU
GetNextRequest-PDU [1] IMPLICIT PDU
GetResponse-PDU [2] IMPLICIT PDU
SetRequest-PDU [3] IMPLICIT PDU
PDU ::= SEQUENCE {request-id INTEGER,
error-status INTEGER { --sometimes ignored
noError (0),
tooBig (1),
noSuchName (2),
badValue (3),
readOnly (4),
genError (5),
error-index INTEGER, --sometimes ignored
variable-binding VarBindList} --values are sometimes ignored
Trap-PDU ::= [4] IMPLICIT SEQUENCE {
enterprise OBJECT IDENTIFIER, --type of object generating trap
agent-addr NetwokAddress, --address of object generating trap
generic-trap INTEGER { --generic trap type
coldStart (0),
warmStart (1),
linkDown (2),
lindUp (3),
authenticationFailure (4),
egpNeighborLoss (5),
enterpriseSpecific (6)},
specific-trap INTEGER,
time-stamp TimeTicks,
variable-bindings VarBindList}
--variable binding
VarBind ::= SEQUENCE {name ObjectName,
value ObjectSyntax}
VarBindList ::= SEQUENCE OF VarBind
END
a) Se a autenticação falha, o serviço de autenticação avisa a entidade do protocolo SNMP, que descarta a mensagem;
b) Se a autenticação tem sucesso, o serviço de autenticação retorna na forma de um objeto ANS.1.
Tipo PDU: indicando que este é um GetRequest PDU;
Variable-bindings: uma lista de instâncias de objetos cujos valores são requeridos.
Um objeto especializado no campo ligação de variáveis podem não igualar um identificador de objetos na MIB, ou um objeto especificado pode ser de um tipo agregado e portanto não ter um valor de instância apropriado.
A entidade de resposta pode estar habilitada para fornecer valores para todas as variáveis na lista, mas o tamanho do resultado GetResponse PDU podem exceder a limitação local. Neste caso, a entidade de resposta retorna o GetResponse PDU com um erro de status.
A entidade de resposta pode estar habilitada para fornecer um valor para o último dos objetos por algum motivo. Neste caso, a entidade de reposta retorna um GetResponse PDU com um status de erro de genErr e um valor no campo índice de erro.
Uma estação de gerenciamento pode recuperar toda linha de uma tabela em certo momento simplesmente incluindo cada instância de objeto da tabela da lista de ligação de variáveis.
GetRequest ((udpInDatagrams.0, udpNoPorts.0, udpInError.0, udpOutDatagrams.0)Se a MIB VIEW para esta comunidade suporta todos esses objetos, então o GetResponse PDU deveria ser retornado com valores para todos os quatro objetos:
GetResponse ((udpInDatagrams.0 = 100), (udpNoPorts.0 = 1), (udpInError.0 = 2), (udpOutDatagrams.0 = 200))
onde 100, 1, 2 e 200 são os valores corretos para as quatro instâncias de objetos. Porém, se um dos objetos não for suportado, então o GetResponse PDU com um código de erro de noSuchName seria retornado, mas não seriam retornados valores. Na ordem para assegurar a obtenção de todos valores com o GetRequest PDU, a estação de gerenciamento deveria ter para emitir quatro PDUs separados.
Consideremos o uso de GetNextRequest PDU:
GetNextRequest (udpInDatagrams, udpNoPorts, udpOutDatagrams)Neste caso, o agente retornará o valor lexicográfico da próxima instância de objetos para cada identificador na lista. Suponha agora que todos os quatro objetos são suportados. O identificador para UDP InDatagrams é 1.3.4.1.2.1.7.1. O próximo identificador de instância na ordem lexicográfica é udpInDatagrams.0, ou 1.3.4.1.2.1.7.1.0. Similarmente, o próximo identificador após udpNoPorts.0 e assim por diante. Desta maneira, se todos valores estão disponíveis, o agente retorna um GetResponse PDU, desta forma:
GetResponse ((udpInDatagrams.0 = 100), (udpNoPorts.0 = 1), (udpInError.0 =2), (udpOutDatagrams.0 = 200))
Agora supondo que udpNoPorts não é visível , e o mesmo GetNextRequest PDU é emitido, a resposta é:
GetResponse ((udpInDatagrams.0 = 100), (udpNoPorts.0 = 2), (udpInError.0 = 2), (udpOutDatagrams.0 = 200))
Quando um agente emite um GetNextRequest PDU com o identificador de objeto de um conjunto de objetos, o resultado inclui o valor da requerida instância de objetos que estão disponíveis. Para aqueles que não estão, o próximo valor da instância de objetos em ordem é retornado.
Uma estação de gerenciamento pode usar o GetNextRequest PDU para sondar uma MIB e descobrir sua estrutura. Se a estação de gerenciamento emitir um GetNextRequest, a resposta será o GetResponse (udpInDatagrams.0=100).
ipRouteDest ipRouteMetric1 ipRouteNextHop9.1.2.3 3 99.0.0.3
10.0.0.51 5 89.1.1.42
10.0.0.99 5 89.1.1.42
Supondo que a estação de gerenciamento queira retornar a tabela inteira e não conhece seu conteúdo ou mesmo o número de linhas da tabela. A estação de gerenciamento poderia emitir um GetNextRequest com os nomes de todos objetos colunares:
GetNextRequest (ipRouteDest, ipRouteMetric1, ipRouteNextHop)A figura 3 revela que o agente quer responder com os valores da primeira linha da tabela:
GetResponse ((ipRouteDest.9.1.2.3 = 9.1.2.3), (ipRouteMetric1.9.1.2.3 = 3), (ipRouteNextHop.9.1.2.3 = 99.0.0.3))A estação de gerenciamento pode então armazenar estes valores e retornar a segunda linha com:
GetNextRequest (ipRouteDest.9.1.2.3, ipRouteMetric1.9.1.2.3, ipRouteNextHop.9.1.2.3)O agente SNMP responde:
GetResponse ((ipRouteDest.10.0.0.51 = 10.0.0.51), (ipRouteMetric1.10.0.0.51 = 5), (ipRouteNextHop.10.0.0.51 = 89.1.1.42))Então, a seguinte troca ocorre:
GetResponse (ipRouteDest.10.0.0.51), (ipRouteMetric1.10.0.0.51),(ipRouteNextHop.10.0.0.51)
GetResponse ((ipRouteDest.10.0.0.99=10.0.0.99), (ipRouteMetric1.10.0.0.99 = 5), (ipRouteNextHop.10.0.0.99 = 89.1.1.42))
A estação de gerenciamento não conhece que este é o fim da tabela e procede assim com:
GetNextRequest (ipRouteDest.10.0.0.99, ipRouteMetric1.10.0.0.99, (ipRouteNextHop.10.0.0.99)Entretanto, não há novas linhas na tabela, assim que o agente responda com aqueles objetos são
os próximos na ordem lexicográfica dos objetos na MIB:
GetResponse(((ipRouteMetric1.9.1.2.3 = 1.9.2.3),(ipRouteNextHop.9.1.2.3 = 3),Onde o exemplo assume que a próxima instância do objeto é a mesma mostrada na terceira entrada da resposta. Uma vez que os objetos estão listados na resposta(Figura 3).(ipNetMediaIfIndex.1.3 = 1))
A entidade SNMP de recebimento responde a um SetRequest PDU com um GetResponse PDU contendo o mesmo request-id. Se a entidade de resposta é capaz de estabelecer valores para todas as variáveis listadas na entrada da lista de variáveis, então o GetResponse PDU inclui o campo variáveis de ligação com um valor são fornecidos para cada variável.
O efeito desta troca é a atualização do valor de ipRouteMetric, na primeira linha. Supondo que a estação de gerência pede para adicionar uma nova linha na tabela, com valores para ipRouteDest, ipRouteMetric1 e ipRouteNextHop de 11.3.12, 9 e 91.0.0.5. A estação de gerenciamento emitiria o seguinte:
SetRequest ((ipRouteDest.11.3.3.12 = 11.3.3.12), (ipRouteMetric1.11.3.3.12 = 9), (ipRouteNextHop.11.3.3.12 = 91.0.0.5))O objeto colunar ipRouteDest x é sempre x uma vez que o valor de ipRouteDest é o índice APPENED para todos identificadores de objetos colunares. Se o valor de 11.3.12 é determinado por um objeto colunar ipRouteDest, então o nome do objeto é ipRouteDest 11.3.12. O RFC1212 indica três maneiras nas quais o agente poderia manobrar este pedido. O agente poderia:
SetResponse ((ipRouteDest.11.3.3.12 = 11.3.3.12), (ipRouteMetric1.11.3.3.12 = 9), (ipRouteNextHop.11.3.3.12 = 91.0.0.5))
SetRequest (ipRouteType.7.3.5.3 = invalid)
A resposta apropriada seria:
GetResponse (ipRouteDest.7.3.5.3 = invalid)
Esta troca elimina a linhada tabela indexada por um valor ipRouteDest de 7.3.5.3.
- Se para um objeto mencionado no campo variable-bindings não está disponível para operações set na MIB relevante, então a entidade receptora envia para o originador da mensagem recebida, o GetResponse PDU de forma idêntica, exceto que o valor do campo status de erro é noSuchName, e o valor do campo índice do mencionado.
Esta regra significa o seguinte: