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