Within communication protocols, TLV (type-length-value or tag-length-value) is an encoding scheme used for informational elements. A TLV-encoded data stream contains code related to the record type, the record value's length, and finally the value itself.
The type and length are fixed in size (typically 1âÂÂ4 bytes) or can be otherwise parsed without knowledge of the size (see: LEB128, variable-length quantity), and the value field is of variable size. These fields are used as follows:
Some advantages of using a TLV representation are:
Imagine a message to make a telephone call. A first version of the system defines the following structure:
When it makes a call, it sends the following data: 00 00 T_COMMAND 00 04 length = 4 00 00 00 20 C_MAKE_CALL 00 10 T_PHONE_NUMBER_TO_CALL 00 08 length = 8 37 32 32 2D ASCII for "722-" 34 32 34 36 ASCII for "4246"
A receiving system would then understand that the message tells it to call "722-4246".
Later (in version 2) a new field containing the calling number could be added:
It would send a message like: 00 00 T_COMMAND 00 04 length = 4 00 00 00 20 C_MAKE_CALL 00 11 T_CALLER_NUMBER 00 0c length = 12 36 31 33 2D ASCII for "613-" 37 31 35 2D ASCII for "715-" 39 37 31 39 ASCII for "9719" 00 10 T_PHONE_NUMBER_TO_CALL 00 08 length = 8 37 32 32 2D ASCII for "722-" 34 32 34 36 ASCII for "4246"
A version 1 system which received a message from a version 2 system would first read the <code>T_COMMAND</code> element and then read an element of type <code>T_CALLER_NUMBER</code>. The version 1 system does not understand <code>T_CALLER_NUMBER</code>, so the length field is read (i.e., 12) and the system skips forward 12 bytes to read <code>T_PHONE_NUMBER_TO_CALL</code>, which it understands, and message parsing carries on.
Core TCP/IP protocols (particularly IP, TCP, and UDP) use predefined, static fields.
Some application layer protocols, including HTTP/1.1 (and its non-standardized predecessors), FTP, SMTP, POP3, and SIP, use text-based "Field: Value" pairs formatted according to . (HTTP represents the length of the payload with a Content-Length header and separates headers from the payload with an empty line and headers from each other with a new line.)
ASN.1 specifies several TLV-based encoding rules (BER, DER), as well as non-TLV based ones (PER, XER, JSON Encoding Rules). The TLV-based rules can be parsed without knowing the possible members of the message, while the non-TLV/static PER cannot. XER uses XML, which also allows for parsing without knowing the possible members of the message; the same applies to the JSON encoding rules.
CSN.1 describes encoding rules using non-TLV semantics.
More recently, XML has been used to implement messaging between different nodes in a network. These messages are typically prefixed with line-based text commands, such as with BEEP.