Articulo de referencia

Tipo-longitud-valor

En los protocolos de comunicación , TLV ( tipo-longitud-valor o etiqueta-longitud-valor ) es un esquema de codificación utilizado para elementos informativos. Un flujo de datos ...

En los protocolos de comunicación , TLV ( tipo-longitud-valor o etiqueta-longitud-valor ) es un esquema de codificación utilizado para elementos informativos. Un flujo de datos codificado en TLV contiene código relacionado con el tipo de registro, la longitud del valor del registro y, finalmente, el valor en sí.

Detalles

El tipo y la longitud tienen un tamaño fijo (normalmente de 1 a 4 bytes) o pueden analizarse sin conocer el tamaño (véase: LEB128 , cantidad de longitud variable ), y el campo de valor es de tamaño variable. Estos campos se utilizan de la siguiente manera:

Tipo
Un código binario, a menudo simplemente alfanumérico, que indica el tipo de campo que representa esta parte del mensaje;
Longitud
El tamaño del campo de valor (normalmente en bytes);
Valor
Serie de bytes de tamaño variable que contiene datos para esta parte del mensaje.

Algunas ventajas de utilizar una representación TLV son:

  • Las secuencias TLV se pueden buscar fácilmente utilizando funciones de análisis sintáctico generalizadas;
  • Los nuevos elementos de mensaje que se reciben en un nodo anterior se pueden omitir de forma segura, y el resto del mensaje se puede analizar. Esto es similar a la forma en que se pueden omitir de forma segura las etiquetas XML desconocidas;
  • Los elementos TLV se pueden colocar en cualquier orden dentro del cuerpo del mensaje;
  • Los elementos TLV se utilizan normalmente en formato binario y con protocolos binarios , lo que hace que el análisis sea más rápido y los datos más pequeños que en protocolos similares basados ​​en texto.

Ejemplo ilustrativo

Imagina un mensaje para realizar una llamada telefónica. Una primera versión del sistema define la siguiente estructura:

struct mensaje { uint16_t etiqueta ; uint16_t longitud ; char valor [ longitud ]; } /* Etiquetas */ #define T_COMMAND 0x00 #define T_PHONE_NUMBER_TO_CALL 0x10 /* Valores de comando */ #define C_MAKE_CALL 0x20

Cuando realiza una llamada, envía los siguientes datos:

00 00 T_COMANDO 00 04 longitud = 4 00 00 00 20 C_MAKE_CALL 00 10 NÚMERO DE TELÉFONO PARA LLAMAR 00 08 longitud = 8 37 32 32 ASCII 2D para "722-" 34 32 34 36 ASCII para "4246"

Un sistema receptor entendería entonces que el mensaje le indica que llame al "722-4246".

Posteriormente (en la versión  2) se podría añadir un nuevo campo que contuviera el número de llamada:

#define T_CALLER_NUMBER 0x11

Enviaría un mensaje como este:

00 00 T_COMANDO 00 04 longitud = 4 00 00 00 20 C_MAKE_CALL 00 11 NÚMERO_DE_LLAMADA 00 0c longitud = 12 36 31 33 ASCII 2D para "613-" 37 31 35 ASCII 2D para "715-" 39 37 31 39 ASCII para "9719" 00 10 NÚMERO DE TELÉFONO PARA LLAMAR 00 08 longitud = 8 37 32 32 ASCII 2D para "722-" 34 32 34 36 ASCII para "4246"

Un  sistema de versión 1 que recibiera un mensaje de un  sistema de versión 2 primero leería el T_COMMANDelemento y luego leería un elemento de tipo T_CALLER_NUMBER. El  sistema de versión 1 no entiende T_CALLER_NUMBER, por lo que se lee el campo de longitud (es decir, 12) y el sistema salta 12 bytes para leer T_PHONE_NUMBER_TO_CALL, que sí entiende, y el análisis del mensaje continúa.

Ejemplos del mundo real

protocolos de transporte

formatos de almacenamiento de datos

Otro

Otras formas de representar datos

Los protocolos TCP/IP principales (en particular IP , TCP y UDP ) utilizan campos estáticos predefinidos.

Algunos protocolos de capa de aplicación , incluidos HTTP/1.1 (y sus predecesores no estandarizados), FTP , SMTP , POP3 y SIP , utilizan pares de texto "Campo: Valor" formateados según la RFC 2822. ( HTTP representa la longitud de la carga útil con un encabezado Content-Length y separa los encabezados de la carga útil con una línea en blanco y los encabezados entre sí con una nueva línea). 

ASN.1 especifica varias reglas de codificación basadas en TLV ( BER , DER ), así como otras que no se basan en TLV ( PER , XER , reglas de codificación JSON). Las reglas basadas en TLV se pueden analizar sin conocer los posibles miembros del mensaje, mientras que las reglas PER (estáticas/no basadas en TLV) no. XER utiliza XML, lo que también permite el análisis sin conocer los posibles miembros del mensaje; lo mismo se aplica a las reglas de codificación JSON.

CSN.1 describe las reglas de codificación utilizando semántica no TLV.

Más recientemente, XML se ha utilizado para implementar mensajería entre diferentes nodos en una red. Estos mensajes suelen ir precedidos de comandos de texto basados ​​en líneas, como por ejemplo BEEP .

Véase también

  • KLV , tipo específico de codificación tipo-longitud-valor

Referencias

  1. "Documentación de OpenWrt en ubus" . openwrt.org . 15 de abril de 2022. Consultado el 15 de abril de 2022 .