Type–length–value: Difference between revisions
Anton.bersh (talk | contribs) Remove double redirect after page move |
m v2.04b - Fix errors for CW project (DEFAULTSORT missing for titles with special letters - Link equal to linktext) |
||
Line 56: | Line 56: | ||
Core [[TCP/IP]] protocols (particularly [[Internet Protocol|IP]], [[Transmission Control Protocol|TCP]], and [[User_Datagram_Protocol|UDP]]) use predefined, static fields. |
Core [[TCP/IP]] protocols (particularly [[Internet Protocol|IP]], [[Transmission Control Protocol|TCP]], and [[User_Datagram_Protocol|UDP]]) use predefined, static fields. |
||
Some [[ |
Some [[application layer]] protocols, including [[Hypertext Transfer Protocol|HTTP/1.1]] (and its non-standardized predecessors), [[File Transfer Protocol|FTP]], [[Simple Mail Transfer Protocol|SMTP]], [[Post Office Protocol|POP3]], and [[Session Initiation Protocol|SIP]], use text-based "Field: Value" pairs formatted according to {{IETF RFC|2822}}. ([[Hypertext Transfer Protocol|HTTP]] represents length of 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 ([[Basic Encoding Rules|BER]], [[Distinguished Encoding Rules|DER]]), as well as non-TLV based ones ([[Packed Encoding Rules|PER]], [[XML Encoding Rules|XER]]). |
[[ASN.1]] specifies several TLV-based encoding rules ([[Basic Encoding Rules|BER]], [[Distinguished Encoding Rules|DER]]), as well as non-TLV based ones ([[Packed Encoding Rules|PER]], [[XML Encoding Rules|XER]]). |
||
Line 68: | Line 68: | ||
*[[Binary protocol]] |
*[[Binary protocol]] |
||
{{DEFAULTSORT:Type-length-value}} |
|||
[[Category:Data transmission]] |
[[Category:Data transmission]] |
||
[[Category:Internet Standards]] |
[[Category:Internet Standards]] |
Revision as of 00:22, 9 August 2021
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
|
Within communication protocols, TLV (type-length-value or tag-length-value) is an encoding scheme used for optional information element in a certain protocol. TLV-encoded data stream contain code of the record type, followed by record value length, and finally the value itself.
Details
The type and length are fixed in size (typically 1-4 bytes), and the value field is of variable size. These fields are used as follows:
- Type
- A binary code, often simply alphanumeric, which indicates the kind of field that this part of the message represents;
- Length
- The size of the value field (typically in bytes);
- Value
- Variable-sized series of bytes which contains data for this part of the message.
Some advantages of using a TLV representation data system solution are:
- TLV sequences are easily searched using generalized parsing functions;
- New message elements which are received at an older node can be safely skipped and the rest of the message can be parsed. This is similar to the way that unknown XML tags can be safely skipped;
- TLV elements can be placed in any order inside the message body;
- TLV elements are typically used in a binary format and binary protocols which makes parsing faster and the data smaller than in comparable text based protocols.
Examples
Real-world examples
Transport protocols
- TLS (and its predecessor SSL) use TLV-encoded messages.
- SSH
- COPS
- IS-IS
- RADIUS
- Link Layer Discovery Protocol allows for the sending of organizational-specific information as a TLV element within LLDP packets
- RR protocol used in GSM cell phones (defined in 3GPP 04.18). In this protocol each message is defined as a sequence of information elements.
Data storage formats
- IFF
- QTFF (the basis for MPEG-4 containers)
Other examples
Imagine a message to make a telephone call. In a first version of a system this might use two message elements: a "command" and a "phoneNumberToCall":
- command_c/4/makeCall_c/phoneNumberToCall_c/8/"722-4246"
Here command_c
, makeCall_c
and phoneNumberToCall_c
are integer constants and 4 and 8 are the lengths of the "value" fields, respectively.
Later (in version 2) a new field containing the calling number could be added:
- command_c/4/makeCall_c/callingNumber_c/14/"1-613-715-9719"/phoneNumberToCall_c/8/"722-4246"
A version 1 system which received a message from a version 2 system would first read the command_c
element and then read an element of type callingNumber_c
. The version 1 system does not understand
callingNumber_c
, so the length field is read (i.e. 14) and the system skips forward 14 bytes to read
phoneNumberToCall_c
which it understands, and message parsing carries on.
Other ways of representing data
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 RFC 2822. (HTTP represents length of 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).
CSN.1 describes encoding rules using non-TLV semantics.
More recently,[when?] 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.
See also
- KLV, specific type of type-length-value encoding
- Binary protocol