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.
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
|
|||||||
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).