Tipo-longitud-valor

En el ámbito de los protocolos de comunicaciones, se denomina tipo-longitud-valor (del inglés type-length-value, comúnmente simbolizado como TLV) o valores de longitud tipo a un formato de representar información, de forma que haya información que pueda tener presencia opcional y longitud variable.

Hackathon TLV, en Israel, diciembre de 2013

Los tipos (tags) y las longitudes suelen ser de longitud establecida, pero el valor (la información real) es de longitud variable y es determinada por el campo "longitud".

Cada "tupla" de información codificada de esta forma se compone de tres partes:

  • Tipo ('tag): código que indica el dato que se está codificando.
  • Longitud (length): longitud del dato a codificar (Suele estar indicada en bytes).
  • Valor (value): valor a codificar.

Ventajas editar

  • Una secuencia de datos codificada en TLV es fácil de interpretar.
  • Se pueden añadir tags a los mensajes sin hacer que el mensaje sea incompatible hacia atrás.
  • La redudancia de datos al codificar en TLV es muy baja y suele ser menor que en XML.
  • Permite anidar estructuras, de forma que el dato de un TLV puede ser a su vez otro TLV.
  • Es fácil saber si el mensaje ha llegado completamente sin necesidad de carga extra.

Inconvenientes editar

  • No es un formato "amigable a humanos", pues es difícil decodificar un mensaje al verlo, al contrario que en XML.

Usos comunes editar

  • Codificación BER.
  • Codificación DER.
  • Codificación CER.
  • Codificación que utiliza CDP en los mensajes de publicación de Routers CISCO, para proporcionar información acerca de los dispositivos vecinos, es decir, que se encuentran directamente conectados entre sí.

Ejemplo editar

Un ejemplo básico de lo que podría ser un mensaje TLV es el siguiente, aunque no está optimizado para primar la claridad:

Para representar una persona de 30 años, que se casó el 28 de julio de 1900, cuyo nombre Pedro y se casó con Carmen, pueden usarse estos tags:

  • 01 significa "persona" (que contiene una edad, una fecha de casarse, el nombre de la persona y el nombre de la persona con quien se casa).
  • 20 significa "edad" (dos dígitos por byte, en años).
  • 21 significa "fecha de matrimonio" (dos dígitos por byte, codificado DD/MM/AAAA).
  • 22 significa "nombre" (un carácter por byte).
  • 23 significa "nombre de la persona con quien se casa" (un carácter por byte).

El mensaje quedaría en formato binario. Por claridad, se representa aquí un ejemplo de mensaje en ASCII:

01 24 20 01 30 21 04 28 06 19 90 22 05 P e d r o 23 06 C a r m e n

Descomponiéndolo en partes quedaría de la siguiente forma.

TAG LONGITUD VALOR Interpretación
01 24 20 01 30 21 04 28 06 19 00 22 05 P e d r o 23 06 C a r m e n Debe descomponerse más. "Persona" tiene más cosas dentro
20 01 30 Edad: 30 años
21 04 28 06 19 90 Fecha de la boda: día 28, mes 06, año 1990
22 05 P e d r o El nombre de la persona: Pedro
23 06 C a r m e n Nombre de la persona con quien se casa: Carmen

La cadena podría dividirse también en varios TLV para así poder añadir precisión en caso de requerirse (por ejemplo la hora).