# Simple Network Management Protocol

Simple Network Management Protocol (SNMP), em português Protocolo Simples de Gerência de Rede, é um "protocolo padrão da Internet para gerenciamento de dispositivos em redes IP". Dispositivos que normalmente suportam SNMP incluem roteadores, computadores, servidores, estações de trabalho, impressoras, racks modernos e etc. SNMP é usado na maioria das vezes em sistemas de gerenciamento de rede para monitorar dispositivos ligados na rede, assim provendo condições que garantem atenção administrativa. SNMP é um componente do conjunto de protocolos da Internet como definido pela Internet Engineering Task Force (IETF). Ele consiste de um conjunto de padrões de gerenciamento de rede, incluindo um protocolo da camada de aplicação, um esquema de banco de dados, e um conjunto de objetos de dados.
O software de gerência de redes não segue o modelo cliente-servidor convencional, pois para as operações GET e SET, a estação de gerenciamento se comporta como cliente e o dispositivo de rede a ser analisado ou monitorado se comporta como servidor, enquanto que na operação TRAP ocorre o oposto, pois no envio de alarmes é o dispositivo gerenciado que toma iniciativa da comunicação. Por conta disso, os sistemas de gerência de redes evitam os termos 'cliente' e 'servidor' e optam por usar "gerente" para a aplicação que roda na estação de gerenciamento e "agente" para a aplicação que roda no dispositivo de rede.

## Gerência de redes

O programa gerente da rede é a entidade responsável pelo monitoramento e controle dos sistemas de hardware e software que compõem a rede, e o seu trabalho consiste em detectar e corrigir problemas que causem ineficiência (ou impossibilidade) na comunicação e eliminar as condições que poderão levar a que o problema volte a surgir.
A gerência de uma rede pode não ser simples, dada sua heterogeneidade em termos de hardware e software, e de componentes da rede, por vezes incompatíveis. As falhas intermitentes, se não forem detectadas, podem afetar o desempenho da rede. Um software de gerência de redes permite ao gestor monitorar e controlar os componentes da sua rede. Exemplos de softwares que auxiliam no gerenciamento de uma rede utlizando SNMP: Zabbix e SolarWinds.

## Componentes Básicos do SNMP

Uma rede gerida pelo protocolo SNMP é formada por três componentes chaves:
* Dispositivos geridos
* Agentes
* Sistema de Gerenciamento de Redes (NMS - Network-Management Systems)
Um Dispositivo Gerido é um nó de rede que possui um agente SNMP instalado e se encontra numa rede gerida. Estes dispositivos coletam e armazenam informações de gestão e mantém estas informações disponíveis para sistemas NMS através do protocolo SNMP. Dispositivos geridos, também às vezes denominados de dispositivos de rede, podem ser routers, servidores de acesso, impressoras, computadores, servidores de rede, switches, dispositivos de armazenamento, dentre outros.
Um Agente é um módulo de software de gestão de rede que fica armazenado num Dispositivo Gerido. Um agente tem o conhecimento das informações de gestão locais e traduz estas informações para um formato compatível com o protocolo SNMP.
Um sistema NMS é responsável pelas aplicações que monitoram e controlam os Dispositivos Geridos. Normalmente é instalado num (ou mais que um) servidor de rede dedicado a estas operações de gestão, que recebe informações (pacotes SNMP) de todos os dispositivos geridos daquela rede.
O protocolo SNMP opera na porta 161 por padrão. A porta 162 é denominada SNMPTRAP. Um trap SNMP é usado para reportar uma notificação ou para outros eventos assíncronos sobre o subsistema gerido.

## Arquitetura

O framework SNMP consiste de: Agentes Mestres (Master Agents), Sub-agentes (Subagents) e Estações de Gerenciamento (Management Stations).

### Master Agent

O Master Agent em uma rede gerenciada é, na verdade, um software sendo executado em um dispositivo com suporte a SNMP, por exemplo, um roteador, que interage com uma estação de gerenciamento. É o equivalente a um servidor, na comunicação cliente/servidor, ou a um daemon, sob o ponto de vista de sistemas operacionais. Os subagentes são os responsáveis por passarem informações específicas para o Master Agent.

### Subagent

Os subagentes ou subagents são pequenos programas em execução no dispositivo com suporte a SNMP, responsáveis pelo monitoramento de recursos específicos naquele dispositivo, como por exemplo, o status de um link ethernet em um roteador, ou a quantidade de espaço livre em um disco de um servidor. Algumas características dos softwares subagentes são:
* Coletar informações de objetos gerenciados
* Configurar parâmetros destes objetos gerenciados
* Responder a solicitações do software de gerência da rede
* Gerar alarmes ou traps em determinadas situações

### Management Station

O Gerente da Rede ou Estação de Gerenciamento ou ainda Management Station é o componente final da arquitetura de uma solução SNMP. Funciona como um cliente em uma comunicação cliente/servidor. Realiza requisições de informações aos dispositivos gerenciados, que podem ser temporárias ou através de comandos a qualquer tempo. E ainda é o responsável por receber alarmes gerados pelos agentes e gerar saídas para estes alarmes, tais como, alterar (SET) o valor de um determinado parâmetro gerenciado no equipamento, enviar mensagem para o celular do administrador da rede, dentre outras.

## O SNMP e o ASN.1

O SNMP é um protocolo padrão usado para gerência de redes, que define os formatos dos pedidos que o Gerente envia para o Agente e os formatos das respostas que o agente retorna, assim como o significado exato de cada pedido e resposta. Uma mensagem SNMP é codificada com um padrão designado de ASN.1 (do inglês: Abstract Syntax Notation.1).
Para permitir a transferência de grandes pacotes, sem desperdiçar espaço em cada transferência, o ASN.1 usa uma combinação de tamanho e valor para cada objeto a ser transferido.

## Comandos do SNMP

O SNMP não define um grande número de comandos, no lugar disso define duas operações básicas:
* GET, para obter um valor de um dispositivo
* SET, para colocar um valor num dispositivo
O comando que especifica uma operação de GET ou SET deve especificar o nome do objeto, que é único.
Podemos definir objetos. No caso de um contador de erros de CRC e uma vez que o SNMP não inclui comandos específicos para fazer reset do contador, uma forma simples é colocar zero no contador. Neste caso, o Gerente faz o GET (leitura) do parâmetro desejado para determinar o estado do dispositivo. As operações que controlam o dispositivo são definidas como efeitos secundários de SET (alterar/gravar valores) em objetos.
Especifica (na versão 1) quatro pacotes de unidades de dados (PDU):
* GET, usado para retirar um pedaço de informação de gerenciamento.
* GETNEXT, usado interativamente para retirar sequências de informação de gerenciamento.
* GETBULK, usado para retirar informações de um grupo de objetos.
* SET, usado para fazer uma mudança no subsistema gerido.
* TRAP, usado para reportar uma notificação ou para outros eventos assíncronos sobre o subsistema gerido.

## Nomes de objetos e MIB

Todos os objetos acedidos pelo SNMP devem ter nomes únicos definidos e atribuídos. Além disso, o Gerente e o Agente devem acordar os nomes e significados das operações GET e SET. O conjunto de todos os objetos SNMP é coletivamente conhecido como MIB (do inglês: Management Information Base). O standard SNMP não define o MIB, mas apenas o formato e o tipo de codificação das mensagens. A especificação das variáveis MIB, assim como o significado das operações GET e SET em cada variável, são especificados por um padrão próprio.
A definição dos objetos do MIB é feita com o esquema de nomes do ASN.1, o qual atribui a cada objeto um prefixo longo que garante a unicidade do nome, a cada nome é atribuído um número inteiro. Também, o SNMP não especifica um conjunto de variáveis, e como a definição de objetos é independente do protocolo de comunicação, permite criar novos conjuntos de variáveis MIB, definidos como standards, para novos dispositivos ou novos protocolos. Por isso, foram criados muitos conjuntos de variáveis MIB que correspondem a protocolos como UDP, IP, ARP, assim como variáveis MIB para hardware de rede como Ethernet ou FDDI, ou para dispositivos tais como bridges, switches ou impressoras.

## Aspectos de segurança

O SNMP, até a sua versão 2, não suportava qualquer tipo de autenticação, o que o tornava vulnerável a uma série de ameaças de segurança. Tais ameaças incluíam o acesso e modificação não autorizados de dados nas MIBs dos dispositivos gerenciados.
Essa vulnerabilidade do protocolo fez com que diversos fabricantes não implementassem a operação Set, reduzindo o SNMP a uma ferramenta de monitoração apenas.

## SNMPv2 e SNMPv3

A versão 2 do SNMP é uma evolução do protocolo inicial. O SNMPv2 oferece uma boa quantidade de melhoramentos em relação ao SNMPv1, incluindo operações adicionais do protocolo, melhoria na performance, segurança, confidencialidade e comunicações Gerente-para-Gerente. A SNMPV3 inclui implementação na segurança ao protocolo como privacidade, autenticação e controle de acesso.
Na prática, as implementações do SNMP oferecem suporte para as múltiplas versões (RFC 3584), tipicamente SNMPv1, SNMPv2c e SNMPv3.