# Type-length-value

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 :
* Type
** Un code binaire, souvent simplement alphanumérique, qui indique le type de champ représenté par cette partie du message ;
* Longueur
** La taille du champ de valeur (généralement en octets) ;
* 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 :
* les séquences TLV sont facilement analysées à l'aide de fonctions d'analyse généralisées ;
* les nouveaux éléments de message qui ont été reçus sur un nœud plus ancien peuvent être ignorés en toute sécurité et le reste du message peut être analysé. Ceci est similaire à la façon dont les balises XML inconnues peuvent être ignorées en toute sécurité ;
* les éléments TLV peuvent être placés dans n'importe quel ordre à l'intérieur du corps du message ;
* les éléments TLV sont généralement utilisés dans un format binaire et des protocoles binaires, ce qui rend l'analyse plus rapide et les données plus petites que dans des protocoles textuels comparables.

## 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

* IFF
* QTFF (la base des conteneurs MPEG-4 )

#### Autre

* ubus utilisé pour IPC dans OpenWrt

### 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, 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.