В протоколах связи , ТДЗ ( тип-длина-значение или тег длиной значение ) представляет собой схема кодирования , используемая для дополнительного информационного элемента в определенном протоколе. Поток данных в кодировке TLV содержит код типа записи, за которым следует длина значения записи и, наконец, само значение.
Подробности
Тип и длина имеют фиксированный размер (обычно 1–4 байта), а поле значения имеет переменный размер. Эти поля используются следующим образом:
- Тип
- Двоичный код, часто просто буквенно-цифровой, который указывает тип поля, которое представляет эта часть сообщения;
- Длина
- Размер поля значения (обычно в байтах);
- Значение
- Серия байтов переменного размера, содержащая данные для этой части сообщения.
Некоторые преимущества использования решения системы представления данных TLV:
- Последовательности TLV легко найти с помощью обобщенных функций синтаксического анализа;
- Новые элементы сообщения, полученные на более старом узле, можно безопасно пропустить, а остальную часть сообщения можно проанализировать. Это похоже на способ безопасного пропуска неизвестных тегов XML ;
- Элементы TLV можно размещать в теле сообщения в любом порядке;
- Элементы TLV обычно используются в двоичном формате и двоичных протоколах, что ускоряет синтаксический анализ, а объем данных меньше, чем в сопоставимых текстовых протоколах.
Примеры
Примеры из реального мира
Транспортные протоколы
- TLS (и его предшественник SSL) используют сообщения в кодировке TVL.
- SSH
- КОПЫ
- IS-IS
- РАДИУС
- Протокол обнаружения канального уровня позволяет отправлять информацию, относящуюся к организации, в виде элемента TLV в пакетах LLDP.
- Протокол RR, используемый в сотовых телефонах GSM (определен в 3GPP 04.18). В этом протоколе каждое сообщение определяется как последовательность информационных элементов.
Форматы хранения данных
- МКФ
- QTFF (основа для контейнеров MPEG-4 )
Другие примеры
Представьте себе сообщение для телефонного звонка. В первой версии системы для этого могут использоваться два элемента сообщения: «команда» и «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
элемент, а затем элемент типа 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 , особый тип кодирования типа-длины-значения
- Бинарный протокол