La notación de control de codificación (ECN) es un lenguaje formal estandarizado que forma parte de la familia de estándares internacionales Abstract Syntax Notation One (ASN.1). [1] ECN está diseñado 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 el UIT-T como por la ISO , y se denomina oficialmente Recomendación UIT-T X.692 | ISO / CEI 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 definiciones de tipo ASN.1, y está diseñado para usarse siempre que sea necesario utilizar codificaciones que difieran de las proporcionadas por las 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. Hay aplicaciones en las que se requieren codificaciones especiales, diferentes de las que se pueden obtener mediante cualquiera de los conjuntos estándar de reglas de codificación ASN.1.
A continuación, se muestran algunos ejemplos de situaciones posibles que requieren desviaciones mayores o menores de las codificaciones estándar:
- un protocolo puede requerir codificaciones extremadamente compactas; aunque las reglas de codificación empaquetadas no alineadas (PER) son generalmente bastante compactas, en ciertos casos se puede lograr una mayor compacidad mediante la explotación de 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 la necesidad de decodificar el mensaje completo con, digamos, un decodificador PER completo; en general, saltar al medio de un mensaje codificado en PER y comenzar a decodificar 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;
- hay algunos protocolos estándar que codifican sus datos en un formato de valor de longitud de etiqueta (TLV) similar a BER; uno podría querer 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;
- hay muchos protocolos estándar que codifican sus datos en un formato binario ad hoc (generalmente especificado con tablas), que pueden diferir significativamente de PER o de cualquier otro conjunto de reglas de codificación ASN.1; uno podría querer 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 anteriores y en muchos otros casos similares, el uso combinado de ASN.1 y ECN hace posible crear una especificación formal completa tanto de la sintaxis abstracta (esquema) como de las codificaciones. Los codificadores y decodificadores se pueden generar automáticamente a partir de las especificaciones combinadas. Este es un factor significativo para reducir tanto la cantidad de trabajo como la posibilidad de errores al hacer que los sistemas interoperables. Otra ventaja significativa de ECN es la capacidad de proporcionar soporte de herramientas automático para pruebas. Estas ventajas están disponibles con ASN.1 solo cuando las reglas de codificación estandarizadas son suficientes, pero ECN proporciona estas ventajas en circunstancias en las que las reglas de codificación estandarizadas no son suficientes.
Descripción general de ECN
Conceptos
Para entender cómo funciona la REC, es útil centrarse en cuatro tipos de elementos del lenguaje ASN.1: tipos integrados (por ejemplo, INTEGER
y UTF8String
), una función de palabras clave constructor (por ejemplo, SEQUENCE
, CHOICE
, SEQUENCE OF
, OPTIONAL
), simple definida por el usuario tipos (por ejemplo, Age ::= INTEGER(0..200)
, Color ::= ENUMERATED { green, yellow, red }
), y tipos complejos definidos por el usuario (por ejemplo, Name ::= SEQUENCE { first UTF8String, middle UTF8String, last UTF8String }
). Hay otros aspectos de ASN.1 que también se reflejan en ECN, pero no los discutiremos aquí.
El lenguaje ECN también tiene tipos incorporados, palabras clave de constructor incorporadas, 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 a #
. Oficialmente se denominan clases de codificación, pero aquí simplemente las llamaremos tipos ECN y palabras clave de constructor ECN . Ejemplos de tipos de ECN son: #INTEGER
(integrado), #UTF8String
(integrado), #Age
(simple definido por el usuario), #Name
(complejo definido por el usuario). Ejemplos de palabras clave ECN constructor son: #SEQUENCE
, #CHOICE
, #SEQUENCE-OF
, y #OPTIONAL
(todo integrado).
A diferencia de ASN.1, ECN permite al usuario del idioma definir sinónimos de palabras clave del constructor ECN (por ejemplo, #InterleavedSequence ::= #SEQUENCE
). Por lo tanto, en ECN hay palabras clave de constructor de ECN definidas por el usuario, así como palabras clave de constructor de ECN integradas.
Desde el punto de vista 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 de ECN oculto se denomina estructura de codificación generada implícitamente, pero aquí simplemente lo llamaremos el tipo de ECN oculto del tipo ASN.1. Los tipos de ECN ocultos son un tipo especial de tipos de ECN definidos por el usuario (su definición de ECN se genera automáticamente a partir de un tipo ASN.1 definido por el usuario en lugar de ser proporcionada por el usuario), pero se comportan como otros tipos de ECN definidos por el usuario.
El tipo ECN oculto de un tipo ASN.1 es casi idéntico al tipo ASN.1 original (pero ligeramente simplificado) y es el punto de partida para un proceso de codificación, especificado en ECN, que finalmente genera la serie de bits que representan cualquier valor dado. del tipo ASN.1 original. Un tipo ASN.1 (o cualquiera de sus partes) no es directamente referenciable con el fin de especificar una codificación en ECN, pero su tipo ECN oculto sí lo es. Los tipos de ECN y las palabras clave del constructor de ECN se pueden hacer referencia explícitamente dentro de una especificación ECN y se codifican aplicando las reglas contenidas en la especificación ECN.
En términos generales, una especificación ECN hace dos cosas: dice cómo modificar un tipo ECN oculto para producir un nuevo tipo ECN oculto (de color ; ver más abajo), y dice cómo un tipo ECN (así como cada uno de sus componentes si es un tipo complejo) debe codificarse. Este último se puede aplicar de forma recursiva, en el sentido de que un paso de codificación para un componente de un tipo ECN puede dar como resultado una modificación in situ adicional de la parte restante del tipo ECN que se está codificando. Este proceso puede continuar a través de cualquier número de ciclos, 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, presentamos 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 es parte de una especificación ECN y se aplica a un tipo ECN o una palabra clave de constructor ECN, ya sea incorporada 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 de ECN ocultos correspondientes a tipos complejos ASN.1 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 por sinónimos. También es posible reemplazar las palabras clave del constructor integrado ECN (por ejemplo #SEQUENCE
, #OPTIONAL
) que aparecen en un tipo ECN oculto por sinónimos. En ECN hay algunos sinónimos incorporados tanto para palabras clave de constructor como para tipos incorporados (por ejemplo, #CONCATENATION
es un sinónimo de #SEQUENCE
, #INT
es un sinónimo de #INTEGER
), pero un usuario del idioma puede definir tanto los tipos definidos por el usuario como los definidos por el usuario. constructor palabras clave 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 del mismo. Palabra clave de constructor ECN presente en el tipo ECN oculto. Por ejemplo, un tipo de ECN oculto complejo puede contener dos listas ( #SEQUENCE-OF
), pero una lista debe codificarse insertando un campo de recuento antes del primer elemento de la lista, y la otra debe codificarse 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-OF
palabra clave en el tipo ECN oculto con, digamos,, #CountBasedRepetition
reemplazando la segunda #SEQUENCE-OF
palabra 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 es la aplicación de un objeto de codificación a un tipo ECN oculto. El valor que se 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 aplicará el objeto de codificación apropiado a eso.
Puede haber pasos adicionales que consisten en la aplicación recursiva de objetos de codificación que funcionan reemplazando un tipo ECN (o parte de él) con otro tipo ECN.
En ECN hay varios tipos de objetos de codificación. Algunos objetos de codificación determinan completamente la codificación real a nivel de bits de 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 por una palabra clave del constructor ECN (pero no especifican su codificación completa). Otros funcionan reemplazando un tipo ECN (o una parte de él) con otro tipo ECN, que luego debe codificarse aplicándole un objeto de codificación diferente.
Los tipos más importantes de objetos de codificación en ECN se enumeran a continuación:
- 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 de 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 anterior o posterior, cualquier alineación con un octeto o límite de 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 de ECN definido por el usuario debe tener un nombre que comience con a
#
, que no debe ser el mismo que el nombre de ningún tipo de ECN oculto.
- El tipo de reemplazo debe especificarse en la especificación ECN, no en la especificación ASN.1. El tipo de ECN definido por el usuario debe tener un nombre que comience con a
- 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 último tipo;
- El tipo de reemplazo debe especificarse en la especificación ECN, no en la especificación ASN.1. El tipo de ECN definido por el usuario debe tener un nombre que comience con a
#
, que no debe ser el mismo que el nombre de ningún tipo de ECN oculto.
- El tipo de reemplazo debe especificarse en la especificación ECN, no en la especificación ASN.1. El tipo de ECN definido por el usuario debe tener un nombre que comience con a
- algunos objetos de codificación especifican cómo representar la presencia o ausencia de un componente de un
#SEQUENCE
tipo declarado#OPTIONAL
; estos objetos de codificación solo se pueden aplicar a tipos ECN que son componentes opcionales de un#SEQUENCE
tipo;
- A continuación, se muestran algunas formas típicas en las que estos objetos de codificación pueden representar la presencia del componente opcional:
- utilizando un campo (típicamente 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;
- confiando en un patrón de bits particular que ocurre en ciertas ubicaciones de bits precisas dentro de las codificaciones de todos los valores posibles del componente opcional pero nunca ocurre dentro de las codificaciones de cualquiera de los tipos que pueden venir después del componente opcional de acuerdo con la especificación ECN;
- confiando en el tamaño de la codificación adjunta para determinar si la codificación del componente opcional encajará en el espacio restante.
- A continuación, se muestran algunas formas típicas en las que estos objetos de codificación pueden representar la presencia del componente opcional:
- 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 son#SEQUENCE-OF
tipos;
- A continuación, se muestran algunas formas típicas en las que estos objetos de codificación pueden representar la longitud de una lista:
- utilizando 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;
- confiando en un patrón de bits particular que ocurre en ciertas ubicaciones de bits precisas dentro de las codificaciones de todos los valores posibles del componente repetido de la lista, pero nunca ocurre dentro de las codificaciones de cualquiera de los tipos que pueden ir después de la lista según la ECN especificación;
- confiando en el tamaño de la codificación adjunta para determinar cuántas instancias de la codificación del componente repetido cabrán en el espacio restante;
- eligiendo una cadena de bits que no coincida con la codificación de ningún valor del componente repetido de la lista e insertando esa cadena de bits después del último elemento de la lista;
- utilizando un campo (normalmente booleano) dentro del componente repetido, cuyo valor indica si ese elemento es el último elemento de la lista.
- A continuación, se muestran algunas formas típicas en las que estos objetos de codificación pueden representar la longitud de una lista:
- algunos objetos de codificación especifican cómo indicar cuál de las alternativas de un
#CHOICE
tipo está presente, y solo se pueden aplicar a tipos ECN que son#CHOICE
tipos;
- Aquí hay algunas formas típicas en las que estos objetos de codificación pueden indicar cuál de las alternativas de a
#CHOICE
está presente:- utilizando un campo que contiene el índice de la alternativa, y que fue agregado al tipo ECN por otro objeto de codificación aplicado en una etapa anterior;
- confiando en un patrón de bits particular que ocurre en ciertas ubicaciones de bits precisas dentro de las codificaciones de todos los valores posibles de cada alternativa y es diferente para cada alternativa.
- Aquí hay algunas formas típicas en las que estos objetos de codificación pueden indicar cuál de las alternativas de a
- 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
- ^ "Rec. UIT-T X.680 / ISO / IEC 8824-1" . Consultado el 28 de agosto de 2008 . CS1 maint: parámetro desalentado ( enlace )
- ^ "Rec. UIT-T X.692 / ISO / IEC 8825-3" . Consultado el 28 de agosto de 2008 . CS1 maint: parámetro desalentado ( enlace )