domingo, 3 de noviembre de 2013

Protocolo ASN1 y Protocolo SNMP

Protocolo ASN.1
bstract Syntax Notation One (notación sintáctica abstracta 1, ASN.1) es una norma para representar datos independientemente de la máquina que se esté usando y sus formas de representación internas. Es un protocolo de nivel de presentación en el modelo OSI. El protocolo SNMP usa el ASN.1 para representar sus objetos gestionables.


Descripción de la información
ASN.1 utiliza la notación de Backus-Naur (BNF) para describir la forma en que la información es almacenada.
Tipos de datos
Los tipos de datos se clasifican según si son simples (primitivos), compuestos (construidos a partir de otros, simples o compuestos) o definidos, con una etiqueta de nombre para identificarlos.
Tipos primitivos
Los tipos primitivos son escalares, es decir, almacenan un único valor, como por ejemplo una cadena de texto o un entero. Los tipos primitivos más importantes son:
·         El tipo INTEGER se usa para representar números enteros.
·         El tipo OCTET STRING almacena una secuencia de bytes. De él se derivan tres subtipos:
·         DisplayString (para cadenas de caracteres ASCII)
·         OctetBitString (para cadenas de bits mayores de 32)
·         PhysAddress (para representar direcciones del nivel de enlace).
·         El tipo OBJECT IDENTIFIER para representar los identificadores de los objetos, es decir, la posición de un objeto dentro del árbol de la MIB.
·         El tipo BOOLEAN para valores que sólo pueden ser verdadero o falso.
·         El tipo NULL para representar la ausencia de valor.
Tipos construidos
Los tipos construidos son tipos compuestos. Se usan para crear arrays y tablas. Los más importantes son:
·         El tipo SEQUENCE es una estructura de datos, es decir, una lista ordenada de tipos de datos diferentes. Es el tipo que se usa para almacenar una fila de una tabla.
·         El tipo SEQUENCE OF es una lista ordenada de tipos de datos iguales. Es similar al tipo "SEQUENCE", excepto que todos los tipos han de ser iguales. Es el tipo usado en tablas para almacenar todas las filas.
·         El tipo SET es equivalente al "SEQUENCE", pero la lista no está ordenada. Hay que notar que todos los componentes de la lista SET deben ser diferentes sino la definición sería ambigua.
·         El tipo SET OF es equivalente al "SEQUENCE OF" pero la lista no está ordenada.
·         El tipo CHOICE es un tipo de datos en el que hay que elegir uno de entre los tipos disponibles en una lista. Por ejemplo, un tipo "Animal" podría ser una "CHOICE" entre los tipos "Perro", "Gato" o "Pez".
Tipos Definidos
Son tipos derivados de los anteriores pero con un nombre más descriptivo. Los más importantes son:
·         IpAddress sirve para almacenar una dirección IP. Son 4 bytes y se define como "OCTET STRING (SIZE (4))".
·         Counter representa un contador que únicamente puede incrementar su valor y que cuando llega a su valor máximo, vuelve a cero. Se define como un entero sin signo, que sólo puede tomar valores positivos y el cero.
·         Gauge es como un indicador de nivel. Es un valor que puede incrementar o decrementar. Puede llevar asociadas acciones a tomar en caso de que se superen unos umbrales. Un ejemplo es un medidor del ancho de banda medido en un determinado interfaz. Está definido como un entero de 32 bits.
·         TimeTicks es un tipo de datos usado para medir tiempos. Indica el número de centésimas de segundo que han transcurrido desde un determinado evento temporal. Es un entero de 32 bits.
Macros de ASN.
Podemos crear nuevos tipos de ASN.1 usando macros.
Clases de datos
Existen cuatro clases de datos, que etiquetan al resto de tipos de datos.
·         Universal: Para tipos de datos generales, como "Boolean", "Integer" y "Real".
·         Específica al contexto: Definidos para el contexto local en que se usan estos tipos.
·         Aplicación: Definidos para la aplicación específica.
·         Privada: Definidos por el usuario.
Codificación
La sintaxis de transferencia especifica cómo se codifican los distintos tipos de datos. Define la forma de codificar en el transmisor y decodificar en el receptor los valores expresados con ASN.1.
Este estándar no define cómo se han de codificar esos datos, sino que es una sintáxis abstracta para indicar el significado de los datos. Para la codificación de los datos se usan otras normas como: BER (Reglas de codificación básicas) (BER - X.209), CER (canonical encoding rules), DER (distinguished encoding rules), PER (packed encoding rules) y XER (XML encoding rules).
BER
Artículo principal: Reglas de codificación básicas.
Las Reglas de codificación básicas, o BER (Basic Encoding Rules), es uno de los formatos de codificación definidos como parte del estándar ASN.1. Las reglas, denominadas sintaxis de transferencia en el contexto de ASN.1, especifican las secuencias de octetos exactas para codificar un elemento de datos dado. La sintaxis BER, junto con dos subconjuntos de BER: Canonical Encoding Rules (CER) y Distinguished Encoding Rules (DER), están definidas por el documento de estándares X.690 de la UIT-T, el cual es parte de las series de documentos ASN.1. Cada elemento de datos está codificado usando la codificación tipo-longitud-valor, es decir, por un identificador de tipos, una descripción longitud, los elementos de datos actuales, y donde sea necesario, un marcador de fin-de-contenido. Por ejemplo, cuando codificamos un valor construido (esto es, un valor que está compuesto de múltiples valores ya codificados más pequeños), el emisor puede usar una de las tres formas diferentes para especificar la longitud de los datos. Estas implementaciones confían en la flexibilidad que BER suministra para usar lógica de codificación que es más fácil de implementar, pero redunda en una corriente de datos mayor de lo necesario.
Estándares

·         Estándares que describen la notación ASN.1:
·         ITU-T Rec. X.680 | ISO/IEC 8824-1
·         ITU-T Rec. X.681 | ISO/IEC 8824-2
·         ITU-T Rec. X.682 | ISO/IEC 8824-3
·         ITU-T Rec. X.683 | ISO/IEC 8824-4
·         Estándares que describen las reglas de codificación de ASN.1:
·         ITU-T Rec. XProtocolo ASN.1 Protocolo SNMP..690 | ISO/IEC 8825-1 (BER, CER y DER)
·         ITU-T Rec. X.691 | ISO/IEC 8825-2 (PER)
·         ITU-T Rec. X.693 | ISO/IEC 8825-4 (XER)
·         ITU-T Rec. X.694 | ISO/IEC 8825-5 (mapeado XSD)
·         RFC 3641 (GSER)


Protocolo SNMP



Simple Network Management Protocol


Simple Network Management Protocol (SNMP)
Familia
Función
facilita el intercambio de información de administración entre dispositivos de red
Última versión
SNMPv3
Puertos
161/UDP, 162/UDP (Trap)
Ubicación en la pila de protocolos
Estándares
RFC 1157 (SNMP, 1990)
RFC 3410 (SNMPv3, 2002)
El Protocolo Simple de Administración de Red o SNMP (del inglés Simple Network Management Protocol) es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. Permite a los administradores supervisar el funcionamiento de la red, buscar y resolver sus problemas, y planear su crecimiento.
Las versiones de SNMP más utilizadas son SNMP versión 1 (SNMPv1) y SNMP versión 2 (SNMPv2).
SNMP en su última versión (SNMPv3) posee cambios significativos con relación a sus predecesores, sobre todo en aspectos de seguridad, sin embargo no ha sido mayoritariamente aceptado en la industria.



Componentes básicos

Una red administrada a través de SNMP consiste de tres componentes claves:
·         Dispositivos administrados;
·         Agentes;
·         Sistemas administradores de red (Network Management Systems, NMS’s).
Un dispositivo administrado es una computadora que se conecta a la red que contiene un agente SNMP y reside en una red administrada. Estos recogen y almacenan información de administración, la cual es puesta a disposición de los NMS’s usando SNMP. Los dispositivos administrados, a veces llamados elementos de red, pueden ser routers, servidores de acceso, switches, bridges, hubs, computadores o impresoras.
Un agente es un módulo de software de administración de red que reside en un dispositivo administrado. Un agente posee un conocimiento local de información de administración (memoria libre, número de paquetes IP recibidos, rutas, etcétera), la cual es traducida a un formato compatible con SNMP y organizada en jerarquías.
Un sistema administrador de red (NMS) ejecuta aplicaciones que supervisan y controlan a los dispositivos administrados. Los NMS’s proporcionan el volumen de recursos de procesamiento y memoria requeridos para la administración de la red. Uno o más NMS’s deben existir en cualquier red administrada.

Comandos básicos

Los dispositivos administrados son supervisados y controlados usando cuatro comandos SNMP básicos: lectura, escritura, notificación y operaciones transversales.
El comando de lectura es usado por un NMS para supervisar elementos de red. El NMS examina diferentes variables que son mantenidas por los dispositivos administrados.
El comando de escritura es usado por un NMS para controlar elementos de red. El NMS cambia los valores de las variables almacenadas dentro de los dispositivos administrados.
El comando de notificación es usado por los dispositivos administrados para reportar eventos en forma asíncrona a un NMS. Cuando cierto tipo de evento ocurre, un dispositivo administrado envía una notificación al NMS.
Las operaciones transversales son usadas por el NMS para determinar qué variables soporta un dispositivo administrado y para recoger secuencialmente información en tablas de variables, como por ejemplo, una tabla de rutas.

Base de información de administración SNMP (MIB)

Una Base de Información de Administración (Management Information Base, MIB) es una colección de información que está organizada jerárquicamente. Las MIB’s son accedidas usando un protocolo de administración de red, como por ejemplo, SNMP.
Un objeto administrado (algunas veces llamado objeto MIB, objeto, o MIB) es uno de cualquier número de características específicas de un dispositivo administrado. Los objetos administrados están compuestos de una o más instancias de objeto, que son esencialmente variables.
Existen dos tipos de objetos administrados: Escalares y tabulares. Los objetos escalares definen una simple instancia de objeto. Los objetos tabulares definen múltiples instancias de objeto relacionadas que están agrupadas conjuntamente en tablas MIB.
Un ejemplo de un objeto administrado es atInput, que es un objeto escalar que contiene una simple instancia de objeto, el valor entero que indica el número total de paquetes AppleTalk de entrada sobre una interfaz de un router.
Un identificador de objeto (object ID) identifica únicamente a un objeto administrado en la jerarquía MIB. La jerarquía MIB puede ser representada como un árbol con una raíz anónima y los niveles, que son asignados por diferentes organizaciones.

El árbol MIB ilustra las variadas jerarquías asignadas por las diferentes organizaciones
Los identificadores de los objetos ubicados en la parte superior del árbol pertenecen a diferentes organizaciones estándares, mientras los identificadores de los objetos ubicados en la parte inferior del árbol son colocados por las organizaciones asociadas.
Los vendedores pueden definir ramas privadas que incluyen los objetos administrados para sus propios productos. Las MIB’s que no han sido estandarizadas típicamente están localizadas en la rama de los árboles.
El objeto administrado atInput podría ser identificado por el nombre de objeto iso.identified-organization.dod.internet.private.enterprise.cisco.temporary.AppleTalk.atInput o por el descriptor de objeto equivalente 1.3.6.1.4.1.9.3.3.1.
El corazón del árbol MIB se encuentra compuesto de varios grupos de objetos, los cuales en su conjunto son llamados mib-2. Los grupos son los siguientes:
·         System (1);
·         Interfaces (2);
·         AT (3);
·         IP (4);
·         ICMP (5);
·         TCP (6);
·         UDP (7);
·         EGP (8);
·         Transmission (10);
·         SNMP (11).
Es importante destacar que la estructura de una MIB se describe mediante el estándar Notación Sintáctica Abstracta 1 (Abstract Syntax Notation One).

Mensajes SNMP

Para realizar las operaciones básicas de administración anteriormente nombradas, el protocolo SNMP utiliza un servicio no orientado a la conexión (UDP) para enviar un pequeño grupo de mensajes (PDUs) entre los administradores y agentes. La utilización de un mecanismo de este tipo asegura que las tareas de administración de red no afectarán al rendimiento global de la misma, ya que se evita la utilización de mecanismos de control y recuperación como los de un servicio orientado a la conexión, por ejemplo TCP.
Los puertos comúnmente utilizados para SNMP son los siguientes:
Número
Descripción
161
SNMP
162
Los paquetes utilizados para enviar consultas y respuestas SNMP poseen el siguiente formato:
Versión
Comunidad
SNMP PDU
·         Versión: Número de versión de protocolo que se está utilizando (por ejemplo 1 para SNMPv1);
·         Comunidad: Nombre o palabra clave que se usa para la autenticación. Generalmente existe una comunidad de lectura llamada "public" y una comunidad de escritura llamada "private";
·         SNMP PDU: Contenido de la unidad de datos del protocolo, el que depende de la operación que se ejecute.
Los mensajes GetRequest, GetNextRequest, SetRequest y GetResponse utilizan la siguiente estructura en el campo SNMP PDU:
Tipo
Identificador
Estado de error
Índice de error
Enlazado de variables
·         Identificador: Es un número utilizado por el NMS y el agente para enviar solicitudes y respuesta diferentes en forma simultánea;
·         Estado e índice de error: Sólo se usan en los mensajes GetResponse´(en las consultas siempre se utiliza cero). El campo "índice de error" sólo se usa cuando "estado de error" es distinto de 0 y posee el objetivo de proporcionar información adicional sobre la causa del problema. El campo "estado de error" puede tener los siguientes valores:
·         0: No hay error;
·         1: Demasiado grande;
·         2: No existe esa variable;
·         3: Valor incorrecto;
·         4: El valor es de solo lectura;
·         5: Error genérico.
·         Enlazado de variables: Es una serie de nombres de variables con sus valores correspondientes (codificados en ASN.1).

GetRequest

A través de este mensaje el NMS solicita al agente retornar el valor de un objeto de interés mediante su nombre. En respuesta el agente envía una respuesta indicando el éxito o fracaso de la petición. Si la petición fue correcta, el mensaje resultante también contendrá el valor del objeto solicitado. Este mensaje puede ser usado para recoger un valor de un objeto, o varios valores de varios objetos, a través del uso de listas.

GetNextRequest

Este mensaje es usado para recorrer una tabla de objetos. Una vez que se ha usado un mensaje GetRequest para recoger el valor de un objeto, puede ser utilizado el mensaje GetNextRequest para repetir la operación con el siguiente objeto de la tabla. Siempre el resultado de la operación anterior será utilizado para la nueva consulta. De esta forma un NMS puede recorrer una tabla de longitud variable hasta que haya extraído toda la información para cada fila existente.

SetRequest

Este tipo de mensaje es utilizado por el NMS para solicitar a un agente modificar valores de objetos. Para realizar esta operación el NMS envía al agente una lista de nombres de objetos con sus correspondientes valores.

GetResponse

Este mensaje es usado por el agente para responder un mensaje GetRequest, GetNextRequest, o SetRequest. En el campo "Identificador de Request" lleva el mismo identificador que el "request" al que está respondiendo.

GetBulkRequest

Este mensaje es usado por un NMS que utiliza la versión 2 ó 3 del protocolo SNMP típicamente cuando es requerida una larga transmisión de datos, tal como la recuperación de largas tablas. En este sentido es similar al mensaje GetNextRequest usado en la versión 1 del protocolo, sin embargo, GetBulkRequest es un mensaje que implica un método mucho más rápido y eficiente, ya que a través de un solo mensaje es posible solicitar la totalidad de la tabla.

InformRequest

Un NMS que utiliza la versión 2 ó 3 del protocolo SNMP transmite un mensaje de este tipo a otro NMS con las mismas características, para notificar información sobre objetos administrados.

Otros protocolos

·         CMIP
·         CMOT

RFCs

Los RFCs (Petición de comentarios en español) son propuestas oficiales para protocolos de red.
·         RFC 1155 - Structure and Identification of Management Information for the TCP/IP-based Internets (en inglés).
·         RFC 1156 - Management Information Base for Network Management of TCP/IP-based internets (en inglés).
·         RFC 1157 - Simple Network Management Protocol (SNMP) (en inglés)
·         RFC 1213 - Management Information Base for Network Management of TCP/IP-based internets: MIB-II (en inglés).
·         RFC 1441 - Introduction to version 2 of the Internet-standard Network Management Framework (en inglés O español).
·         RFC 3410 - Introduction and Applicability Statements for Internet Standard Management Framework. Informativo (en inglés).
·         RFC 3411 (estándar 62) - An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks (en inglés).
·         RFC 3412 (estándar 62) - Message Processing and Dispatching for the Simple Network Management Protocol (SNMP) (en inglés).
·         RFC 3413 (estándar 62) - Simple Network Management Protocol (SNMP) Application (en inglés).
·         RFC 3414 (estándar 62) - User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3) (en inglés).
·         RFC 3415 (estándar 62) - View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP) (en inglés).
·         RFC 3416 (estándar 62) - Version 2 of the Protocol Operations for the Simple Network Management Protocol (SNMP) (en inglés).
·         RFC 3417 (estándar 62) - Transport Mappings for the Simple Network Management Protocol (SNMP) (en inglés).
·         RFC 3418 (estándar 62) - Management Information Base (MIB) for the Simple Network Management Protocol (SNMP) (en inglés).
·         RFC 3584 (Best current practice) - Coexistence between Version 1, Version 2, and Version 3 of the Internet-standard Network Management Framework (en inglés).
·         RFC 3826 (propuesto para estándar) - The Advanced Encryption Standard (AES) Cipher Algorithm in the SNMP User-based Security Model (en inglés).