Тип-длина-значение - Type-length-value

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

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

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

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

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

Примеры

Представьте себе сообщение для телефонного звонка. В первой версии системы может использоваться два элемента сообщения: «команда» и «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 /allingNumber_c / 14 / "1-613-715-9719" / phoneNumberToCall_c / 8 / "722-4246"

Система версии 1, которая получила сообщение от системы версии 2, сначала прочитала command_c element, а затем прочитайте элемент типа callNumber_c. Система версии 1 не понимает;callNumber_c

поэтому считывается поле длины (т.е. 14), и система пропускает 14 байтов вперед для чтения

phoneNumberToCall_c

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

Пример использования - Протокол обнаружения канального уровня что позволяет отправлять информацию, относящуюся к организации, как элемент TLV в пакетах LLDP. Другой пример - протокол RR, используемый в сотовых телефонах GSM, определенный в 3GPP 04.18.

В протоколе RR каждое сообщение определяется как последовательность информационных элементов.

TLV используются во многих протоколах, таких как КОПЫ, IS-IS, и РАДИУС, а также форматы хранения данных, такие как МКФ и QTFF (основа для Контейнеры MPEG-4 ).

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

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

Общий TCP / IP протоколы, такие как HTTP, FTP, SMTP, POP3, и ГЛОТОК используйте текстовые пары "Поле: Значение", отформатированные в соответствии с RFC 2822.

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

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

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

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

  • KLV, для очень похожей схемы "длина-значение"

Рекомендации

внешняя ссылка

  • tlve, Общий анализатор TLV