Tipo-longitud-valor

De Wikipedia, la enciclopedia libre
Hackathon TLV, en Israel, diciembre de 2013

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.

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