Type-length-value

Hackathon TLV dans un campus informatique de Tel Aviv (2013)

Dans les protocoles de communication, « type-length-value » ou « tag-length-value » (abrégé en TLV), ou type-longueur-valeur en français, est un schéma de codage utilisé pour les éléments d'information facultatifs dans un certain protocole. Un flux de données codé TLV contient du code lié au type d'enregistrement, à la longueur de la valeur d'enregistrement et enfin à la valeur elle-même.

Détails

Le type et la longueur sont de taille fixe (généralement de 1 à 4 octets) et le champ « valeur » est de taille variable. Ces champs sont utilisés comme suit :

  1. Type
    • Un code binaire, souvent simplement alphanumérique, qui indique le type de champ représenté par cette partie du message ;
  2. Longueur
    • La taille du champ de valeur (généralement en octets) ;
  3. Valeur
    • Série d'octets de taille variable qui contient des données pour cette partie du message.

Les principaux atouts d'une solution de système de données de représentation TLV sont :

Exemples

Exemples concrets

Protocoles de transport

  • TLS (et son prédécesseur SSL) utilise des messages codés TLV
  • SSH
  • COPS
  • IS-IS
  • RAYON
  • Le protocole Link Layer Discovery permet l'envoi d'informations spécifiques à l'organisation en tant qu'élément TLV dans les paquets LLDP
  • Le protocole de redondance des médias permet d'obtenir des informations spécifiques à l'organisation
  • Le protocole DHCP ( Dynamic Host Configuration Protocol ) utilise des options codées TLV
  • Protocole RR utilisé dans les téléphones portables GSM (défini dans 3GPP 04.18). Dans ce protocole, chaque message est défini comme une séquence d'éléments d'information.

Formats de stockage des données

Autre

Autres exemples

Imaginez un message pour passer un appel téléphonique. Dans une première version d'un système, cela pourrait utiliser deux éléments de message : une «commande» et un «phoneNumberToCall» (ou: « NuméroÀAppeler »):

command_c/4/makeCall_c/phoneNumberToCall_c/8/"722-4246"

Ici command_c, makeCall_c et phoneNumberToCall_c sont des constantes entières et 4 et 8 sont respectivement les longueurs des champs de «valeur».

Plus tard (dans la version 2) un nouveau champ contenant le numéro appelant pourrait être ajouté :

command_c/4/makeCall_c/callingNumber_c/14/"1-613-715-9719"/phoneNumberToCall_c/8/"722-4246"

Une version 1 système qui a reçu un message d'une version 2 lirait d'abord l'élément command_c, puis lirait un élément de type callingNumber_c. La version 1 système ne comprend pas callingNumber_c, donc le champ de longueur est lu (c'est-à-dire 14) et le système avance de 14 octets pour lire

phoneNumberToCall_c

qu'il comprend, pour poursuivre l'analyse des messages.

Autres façons de représenter les données

Les principaux protocoles TCP/IP (en particulier IP, TCP et UDP ) utilisent des champs statiques prédéfinis.

Certains protocoles de couche application, y compris HTTP/1.1 (et ses prédécesseurs non standardisés), FTP, SMTP, POP3 et SIP, utilisent des paires textuelles "Champ : Valeur" formatées selon. (HTTP représente la longueur de la charge utile avec un en-tête Content-Length et sépare les en-têtes de la charge utile avec une ligne vide et les en-têtes les uns des autres avec une nouvelle ligne.)

ASN.1 spécifie plusieurs règles de codage basées sur TLV (BER, DER), ainsi que des règles non basées sur TLV (PER, XER).

CSN.1 décrit les règles de codage utilisant une sémantique non TLV.

Plus récemment,[Quand ?] XML a été utilisé pour implémenter la messagerie entre différents nœuds d'un réseau. Ces messages sont généralement précédés de commandes textuelles basées sur des lignes, telles que BEEP.

Voir aussi

Références

  1. ↑ « OpenWrt documentation on ubus », openwrt.org, (consulté le )