Тип–длина–значение

Формат данных, используемый в протоколах связи

В протоколах связи TLV ( тип-длина-значение или тег-длина-значение ) — это схема кодирования, используемая для информационных элементов. Поток данных, закодированный с помощью TLV, содержит код, относящийся к типу записи, длине значения записи и, наконец, само значение.

Подробности

Тип и длина имеют фиксированный размер (обычно 1–4 байта), а поле значения имеет переменный размер. Эти поля используются следующим образом:

Тип
Двоичный код, часто просто буквенно-цифровой, который указывает тип поля, которое представляет данная часть сообщения;
Длина
Размер поля значения (обычно в байтах);
Ценить
Последовательность байтов переменного размера, содержащая данные для этой части сообщения.

Некоторые преимущества использования решения системы представления данных TLV:

  • Поиск последовательностей TLV легко осуществляется с помощью обобщенных функций синтаксического анализа;
  • Новые элементы сообщения, которые получены на старом узле, могут быть безопасно пропущены, а остальная часть сообщения может быть проанализирована. Это похоже на то, как неизвестные теги XML могут быть безопасно пропущены;
  • Элементы TLV могут располагаться в любом порядке внутри тела сообщения;
  • Элементы TLV обычно используются в двоичном формате и двоичных протоколах , что ускоряет синтаксический анализ и уменьшает объем данных по сравнению с сопоставимыми текстовыми протоколами.

Примеры

Примеры из реальной жизни

Транспортные протоколы

Форматы хранения данных

Другой

  • ubus используется для IPC в OpenWrt [1]

Другие примеры

Представьте себе сообщение для совершения телефонного звонка. В первой версии системы это может использовать два элемента сообщения: «команда» и «phoneNumberToCall»:

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

Здесь command_c, makeCall_cи phoneNumberToCall_c— целочисленные константы, а 4 и 8 — длины полей «значение» соответственно.

Позже (в версии 2) может быть добавлено новое поле, содержащее номер вызывающего абонента:

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

Система версии 1, получившая сообщение от системы версии 2, сначала прочтет command_cэлемент , а затем прочтет элемент типа callingNumber_c. Система версии 1 не понимает callingNumber_c, поэтому считывается поле длины (т.е. 14), и система пропускает вперед 14 байтов для считывания

phoneNumberToCall_c

который он понимает, и анализ сообщения продолжается.

Другие способы представления данных

Основные протоколы TCP/IP (в частности IP , TCP и UDP ) используют предопределенные статические поля.

Некоторые протоколы прикладного уровня , включая HTTP/1.1 (и его нестандартизированные предшественники), FTP , SMTP , POP3 и SIP , используют текстовые пары «Поле: Значение», отформатированные в соответствии с RFC  2822. ( HTTP представляет длину полезной нагрузки с помощью заголовка Content-Length и отделяет заголовки от полезной нагрузки пустой строкой, а заголовки друг от друга — новой строкой.)

ASN.1 определяет несколько правил кодирования на основе TLV ( BER , DER ), а также не основанных на TLV ( PER , XER ).

CSN.1 описывает правила кодирования с использованием не-TLV-семантики.

Совсем недавно [ когда? ] XML использовался для реализации обмена сообщениями между различными узлами в сети. Эти сообщения обычно имеют префикс в виде строковых текстовых команд, таких как BEEP .

Смотрите также

  • KLV , определенный тип кодирования типа-длины-значения

Ссылки

  1. ^ "Документация OpenWrt по ubus". openwrt.org . 15 апреля 2022 г. Получено 15 апреля 2022 г. .
Получено с "https://en.wikipedia.org/w/index.php?title=Тип–длина–значение&oldid=1184289512"