Articulo de referencia

Notación de control de codificación

La Notación de Control de Codificación (ECN) es un lenguaje formal estandarizado que forma parte de la familia de estándares internacionales de la Notación de Sintaxis Abstracta...

La Notación de Control de Codificación (ECN) es un lenguaje formal estandarizado que forma parte de la familia de estándares internacionales de la Notación de Sintaxis Abstracta Uno (ASN.1). [ 1 ] ECN está diseñada para usarse junto con ASN.1, y cada especificación ECN (un conjunto coherente de definiciones de codificación) está explícitamente relacionada con una especificación ASN.1 particular (un conjunto coherente de definiciones de tipo).

El estándar ECN es publicado tanto por la UIT-T como por la ISO , y se denomina oficialmente Recomendación UIT-T X.692 | ISO/IEC 8825-3, Tecnología de la información – Reglas de codificación ASN.1: Especificación de la notación de control de codificación (ECN) . [ 2 ]

ECN admite la especificación formal de reglas de codificación no estándar para las definiciones de tipo ASN.1, y está diseñado para usarse siempre que sea necesario utilizar codificaciones que difieran de las proporcionadas por reglas de codificación estandarizadas como BER o PER.

Usos de ECN

Un tipo ASN.1 tiene un conjunto de valores abstractos. Las reglas de codificación especifican la representación de estos valores abstractos como una serie de bits. Existen aplicaciones que requieren codificaciones especiales, distintas de las que se pueden obtener mediante cualquiera de los conjuntos estándar de reglas de codificación ASN.1.

Aquí hay algunos ejemplos de posibles situaciones que requieren desviaciones menores o mayores de las codificaciones estándar:

  • Un protocolo puede requerir codificaciones extremadamente compactas; aunque las Reglas de Codificación Empaquetada No Alineadas (PER) son generalmente bastante compactas, se puede lograr una mayor compacidad en ciertos casos explotando la distribución estadística de los valores de ciertos campos o eliminando otras formas de redundancia;
  • Un protocolo puede requerir que ciertas partes de un mensaje codificado sean fácilmente accesibles sin necesidad de decodificar todo el mensaje con, por ejemplo, un decodificador PER completo; en general, saltar a la mitad de un mensaje codificado en PER y comenzar a decodificarlo desde ese punto no es una práctica recomendada, pero en ciertos casos esto puede ser necesario o útil; en tales casos, el acceso a partes particulares de una codificación puede facilitarse y hacerse confiable especificando una versión modificada de PER;
  • Existen algunos protocolos estándar que codifican sus datos en un formato de etiqueta-longitud-valor (TLV) similar a BER; se podría crear una especificación ASN.1 formal para uno de esos protocolos y especificar una versión modificada de BER que coincida con el formato TLV ad hoc;
  • Existen muchos protocolos estándar que codifican sus datos en un formato binario ad hoc (generalmente especificado con tablas), que puede diferir significativamente de PER o de cualquier otro conjunto de reglas de codificación ASN.1; se podría crear una especificación ASN.1 formal para uno de esos protocolos y especificar una codificación binaria que coincida con el formato ad hoc.

En los casos mencionados y en muchos otros similares, el uso combinado de ASN.1 y ECN permite crear una especificación formal completa tanto de la sintaxis abstracta (esquema) como de las codificaciones. A partir de estas especificaciones combinadas, se pueden generar automáticamente codificadores y decodificadores. Esto supone una reducción significativa tanto del trabajo como de la posibilidad de errores al crear sistemas interoperables. Otra ventaja importante de ECN es la capacidad de proporcionar soporte automático para herramientas de prueba. Estas ventajas están disponibles con ASN.1 cuando las reglas de codificación estandarizadas son suficientes, pero ECN las proporciona en circunstancias en las que dichas reglas no lo son.

Descripción general de ECN

Conceptos

Para comprender cómo funciona ECN, es útil centrarse en cuatro tipos de elementos del lenguaje ASN.1: tipos integrados (por ejemplo, INTEGERy UTF8String), palabras clave de constructores integrados (por ejemplo, SEQUENCE, CHOICE, SEQUENCE OF, OPTIONAL), tipos simples definidos por el usuario (por ejemplo, , ) y tipos complejos definidos por el usuario (por ejemplo, ). Existen otros aspectos de ASN.1 que también se reflejan en ECN, pero no los trataremos aquí.Age::=INTEGER(0..200)Color::=ENUMERATED{green,yellow,red}Name::=SEQUENCE{firstUTF8String,middleUTF8String,lastUTF8String}

El lenguaje ECN también tiene tipos integrados, palabras clave de constructor integradas, tipos simples definidos por el usuario y tipos complejos definidos por el usuario. Estos elementos del lenguaje ECN son similares a los de ASN.1, pero sus nombres siempre comienzan con un # . Oficialmente se llaman clases de codificación , pero aquí simplemente los llamaremos tipos ECN y palabras clave de constructor ECN . Ejemplos de tipos ECN son: #INTEGER(integrado), #UTF8String(integrado), #Age(simple definido por el usuario), #Name(complejo definido por el usuario). Ejemplos de palabras clave de constructor ECN son: #SEQUENCE, #CHOICE, #SEQUENCE-OF, y #OPTIONAL(todos integrados).

A diferencia de ASN.1, ECN permite al usuario del lenguaje definir sinónimos de las palabras clave del constructor ECN (por ejemplo, ). Por lo tanto, en ECN existen palabras clave del constructor ECN definidas por el usuario, así como palabras clave del constructor ECN integradas.#InterleavedSequence ::= #SEQUENCE

Desde la perspectiva de ECN, cada tipo ASN.1 definido por el usuario que aparece en una especificación ASN.1 tiene un tipo ECN oculto asociado implícitamente. Oficialmente, este tipo ECN oculto se denomina estructura de codificación generada implícitamente, pero aquí simplemente lo llamaremos tipo ECN oculto del tipo ASN.1. Los tipos ECN ocultos son un tipo especial de tipos ECN definidos por el usuario (su definición ECN se genera automáticamente a partir de un tipo ASN.1 definido por el usuario, en lugar de ser proporcionada por este), pero se comportan como otros tipos ECN definidos por el usuario.

El tipo ECN oculto de un tipo ASN.1 es casi idéntico al tipo ASN.1 original (aunque ligeramente simplificado) y constituye el punto de partida para un proceso de codificación, especificado en ECN, que genera la serie de bits que representan cualquier valor del tipo ASN.1 original. Un tipo ASN.1 (o cualquiera de sus partes) no es directamente referenciable para especificar una codificación en ECN, pero su tipo ECN oculto sí lo es. Los tipos ECN y las palabras clave del constructor ECN pueden referenciarse explícitamente dentro de una especificación ECN y se codifican aplicando las reglas contenidas en dicha especificación.

En términos generales, una especificación ECN cumple dos funciones: indica cómo modificar un tipo ECN oculto para generar un nuevo tipo ECN oculto ( con color ; véase más abajo), y especifica cómo codificar un tipo ECN (así como cada uno de sus componentes si se trata de un tipo complejo). Esto último puede aplicarse de forma recursiva, de modo que un paso de codificación para un componente de un tipo ECN puede dar lugar a una modificación adicional in situ de la parte restante del tipo ECN que se está codificando. Este proceso puede repetirse varias veces hasta que el tipo ECN final se haya codificado por completo, es decir, se hayan generado todos los bits que representan el valor del tipo ASN.1 original.

Por último, introducimos el concepto de objeto de codificación . Este es un elemento muy importante del lenguaje ECN y se refiere a cada regla de codificación individual que forma parte de una especificación ECN y se aplica a un tipo ECN o a una palabra clave de constructor ECN, ya sea integrada o definida por el usuario, que aparece en la especificación.

Mecanismos

El primer paso del proceso de codificación es la generación automática de tipos ECN ocultos a partir de todos los tipos ASN.1 presentes en la especificación ASN.1. Los tipos ECN ocultos correspondientes a tipos ASN.1 complejos definidos por el usuario pueden modificarse mediante un mecanismo llamado coloración , que consiste en reemplazar los nombres de los tipos de algunos de sus componentes con sinónimos. También es posible reemplazar las palabras clave de constructor integradas de ECN (por ejemplo, #SEQUENCE, #OPTIONAL) que aparecen en un tipo ECN oculto con sinónimos. En ECN hay algunos sinónimos integrados tanto para palabras clave de constructor como para tipos integrados (por ejemplo, #CONCATENATIONes sinónimo de #SEQUENCE, #INTes sinónimo de #INTEGER), pero un usuario del lenguaje puede definir tanto tipos definidos por el usuario como palabras clave de constructor definidas por el usuario como sinónimos de otros. El propósito del paso de coloración es preparar un tipo ECN oculto para el siguiente paso, que es la codificación de sus componentes, en caso de que sea necesario codificar de manera diferente diferentes ocurrencias del mismo tipo ECN o diferentes ocurrencias de la misma palabra clave de constructor ECN presente en el tipo ECN oculto. Por ejemplo, un tipo ECN oculto complejo podría contener dos listas ( #SEQUENCE-OF), pero una lista se codificará insertando un campo de conteo antes del primer elemento de la lista, y la otra se codificará insertando un patrón de terminación después del último elemento de la lista. Esto se puede hacer, por ejemplo, reemplazando la primera #SEQUENCE-OFpalabra clave en el tipo ECN oculto con, digamos, #CountBasedRepetition, reemplazando la segunda #SEQUENCE-OFpalabra clave con, digamos, #TerminatingPatternBasedRepetition, y declarando estos dos nombres como sinónimos definidos por el usuario de la palabra clave del constructor ECN #SEQUENCE-OF. Una vez que estas dos palabras clave de constructor diferentes se han incluido en el tipo ECN oculto, cada una de las dos listas se puede codificar con un objeto de codificación diferente.

El segundo paso del proceso de codificación consiste en la aplicación de un objeto de codificación a un tipo ECN oculto. El valor que se va a codificar será uno de los valores posibles de un tipo ASN.1 definido en la especificación ASN.1, y el proceso de codificación seleccionará el tipo ECN oculto de ese tipo ASN.1 y le aplicará el objeto de codificación adecuado.

Puede haber pasos adicionales que consistan en la aplicación recursiva de objetos de codificación que funcionan reemplazando un tipo ECN (o parte de él) por otro tipo ECN.

En ECN existen varios tipos de objetos de codificación. Algunos determinan por completo la codificación a nivel de bits de los tipos ECN simples y son los más fáciles de entender. Otros se aplican a las palabras clave del constructor ECN en lugar de a los tipos ECN, y determinan algunos aspectos estructurales de la codificación del tipo ECN complejo (o parte de él) construido mediante una palabra clave del constructor ECN (pero no especifican su codificación completa). Otros funcionan reemplazando un tipo ECN (o parte de él) por otro tipo ECN, que luego debe codificarse aplicándole un objeto de codificación diferente.

A continuación se enumeran los tipos más importantes de objetos de codificación en ECN:

  • Algunos objetos de codificación especifican la codificación a nivel de bits del tipo ECN;
Estos objetos de codificación se aplican principalmente a tipos ECN simples y tienen varios parámetros que especifican la codificación a nivel de bits de un valor, el tamaño de la codificación, cualquier relleno precedente o final, cualquier alineación a un límite de octeto o palabra, cualquier inversión de bits, etc.
  • Algunos objetos de codificación especifican que el tipo ECN debe ser reemplazado por un tipo ECN definido por el usuario que contenga el tipo ECN anterior como uno de sus componentes;
El tipo de reemplazo debe especificarse en la especificación ECN, no en la especificación ASN.1. El tipo ECN definido por el usuario debe tener un nombre que comience con una letra #, que no debe ser igual al nombre de ningún tipo ECN oculto.
  • Algunos objetos de codificación especifican que el tipo ECN debe ser reemplazado por un tipo ECN definido por el usuario, y especifican cómo asignar cada valor del primer tipo a un valor del segundo tipo;
El tipo de reemplazo debe especificarse en la especificación ECN, no en la especificación ASN.1. El tipo ECN definido por el usuario debe tener un nombre que comience con una letra #, que no debe ser igual al nombre de ningún tipo ECN oculto.
  • Algunos objetos de codificación especifican cómo representar la presencia o ausencia de un componente de un #SEQUENCEtipo declarado #OPTIONAL; estos objetos de codificación solo se pueden aplicar a tipos ECN que son componentes opcionales de un #SEQUENCEtipo;
A continuación se muestran algunas formas típicas en que estos objetos de codificación pueden representar la presencia del componente opcional:
  1. mediante la utilización de un campo (normalmente booleano) cuyo valor indica la presencia o ausencia del componente opcional, y que fue insertado en el tipo ECN por otro objeto de codificación aplicado en una etapa anterior;
  2. al basarse en un patrón de bits particular que aparece en ciertas ubicaciones de bits precisas dentro de las codificaciones de todos los valores posibles del componente opcional, pero que nunca aparece dentro de las codificaciones de ninguno de los tipos que pueden venir después del componente opcional según la especificación ECN;
  3. basándose en el tamaño de la codificación contenedora para determinar si la codificación del componente opcional cabe en el espacio restante.
  • Algunos objetos de codificación especifican cómo representar el número de elementos de una lista ( #SEQUENCE-OF); estos objetos de codificación solo se pueden aplicar a tipos ECN que sean #SEQUENCE-OFtipos;
A continuación se muestran algunas formas típicas en que estos objetos de codificación pueden representar la longitud de una lista:
  1. mediante la utilización de un campo que contiene la longitud de la lista, y que fue insertado en el tipo ECN por otro objeto de codificación aplicado en una etapa anterior;
  2. al basarse en un patrón de bits particular que aparece en ciertas ubicaciones de bits precisas dentro de las codificaciones de todos los valores posibles del componente repetitivo de la lista, pero que nunca aparece dentro de las codificaciones de ninguno de los tipos que pueden venir después de la lista según la especificación ECN;
  3. basándose en el tamaño de la codificación contenedora para determinar cuántas instancias de la codificación del componente repetitivo cabrán en el espacio restante;
  4. eligiendo una cadena de bits que no coincida con la codificación de ningún valor del componente repetitivo de la lista, e insertando esa cadena de bits después del último elemento de la lista;
  5. mediante la utilización de un campo (normalmente booleano) dentro del componente repetitivo, cuyo valor indica si ese elemento es el último de la lista.
  • Algunos objetos de codificación especifican cómo indicar cuál de las alternativas de un #CHOICEtipo está presente, y solo se pueden aplicar a tipos ECN que sean #CHOICEtipos;
Aquí se muestran algunas formas típicas en que estos objetos de codificación pueden indicar cuál de las alternativas de a #CHOICEestá presente:
  1. mediante la utilización de un campo que contiene el índice de la alternativa, y que fue añadido al tipo ECN por otro objeto de codificación aplicado en una etapa anterior;
  2. al basarse en un patrón de bits particular que aparece en ciertas ubicaciones de bits precisas dentro de las codificaciones de todos los valores posibles de cada alternativa y que es diferente para cada alternativa.
  • Algunos objetos de codificación especifican que el tipo ECN debe codificarse aplicándole un conjunto estándar de reglas de codificación (por ejemplo, PER).

Referencias

  1. "Recomendación ITU-T X.680 / ISO/IEC 8824-1" . Consultado el 28 de agosto de 2008 .
  2. "Recomendación ITU-T X.692 / ISO/IEC 8825-3" . Consultado el 28 de agosto de 2008 .
  • Descarga pública gratuita del estándar ECN desde el sitio web de la UIT.