Восьмая часть тут.
Формат Type Length Value (TLV) является еще одним широко используемым решением проблемы маршалинга данных. На рисунке 1 показан пример протокола маршрутизации от промежуточной системы к промежуточной системе IS-IS.
На рисунке 1 пакет состоит из заголовка, который обычно имеет фиксированную длину, а затем из набора TLV. Каждый TLV форматируется на основе своего типа кода. В этом случае показаны два типа TLV (в IS-IS есть много других типов; два используются здесь для иллюстрации). Первый тип - 135, который несет информацию о версии 4 протокола IP (IPv4). Этот тип имеет несколько полей, некоторые из которых имеют фиксированную длину, например, метрика. Другие, однако, такие как префикс, имеют переменную длину; длина поля зависит от значения, размещенного в каком-либо другом поле в TLV. В этом случае поле длины префикса определяет длину поля префикса. Существуют также суб-TLV, которые имеют аналогичный формат и несут информацию, связанную с этой информацией IPv4. Тип 236 аналогичен 135, но он несет информацию по IPv6, а не IPv4.
По существу, TLV можно рассматривать как полный набор автономной информации, переносимой в более крупном пакете. TLV состоит из трех частей:
- Тип кода, который описывает формат данных
- Длина, которая описывает общую длину данных
- Значение или сами данные
Форматы на основе TLV менее компактны, чем форматы фиксированной длины, поскольку они содержат больше метаданных в самом пакете. Информация о типе и длине, содержащаяся в данных, предоставляет информацию о том, где искать в словаре информацию о форматировании, а также информацию о грамматике для использования (как каждое поле отформатировано и так далее). Форматы TLV компенсируют возможность изменять форматирование информации, передаваемой протоколом, не требуя обновления каждого устройства или позволяя некоторым реализациям выбирать не поддерживать все возможные TLV по сравнению с дополнительными метаданными, передаваемыми по проводам.
TLV обычно считаются очень гибким способом маршалинга данных в протоколах.
Словари общих объектов
Одной из основных проблем с полями фиксированной длины является фиксированность определений полей; если вы хотите изменить протокол поля фиксированной длины, вам нужно увеличить номер версии и изменить пакет, или вы должны создать новый тип пакета с различными кодировками для полей. Форматирование TLV решает эту проблему путем включения встроенных метаданных с передаваемыми данными за счет передачи большего количества информации и уменьшения компактности. Общие скомпилированные словари пытаются решить эту проблему, помещая словарь в общий файл (или библиотеку), а не в спецификацию. Рисунок 2 иллюстрирует процесс.
Этот вид системы сочетает в себе гибкость модели на основе TLV с компактностью протокола фиксированного поля. Хотя поля имеют фиксированную длину, определения полей задаются таким образом, чтобы обеспечить быстрое и гибкое обновление при необходимости изменения формата маршалинга. Пока общая библиотека отделена от приложения, использующего данные, словарь и грамматика могут быть изменены путем распространения новой версии исходной структуры данных.
Потребуется ли «День флага», если будет распространена новая версия структуры данных? Необязательно. Если номер версии включен в структуру данных, чтобы получатель мог сопоставить полученные данные с правильной структурой данных, то в системе одновременно может существовать несколько версий структуры данных. Как только отправитель не найден с использованием более старого формата данных, старая структура может быть безопасно отброшена по всей системе.
Важно: в то время как системы фиксированного формата и TLV рассчитывают на то, что разработчики читают спецификации и пишут код как форму совместного использования грамматики и словаря, системы общей структуры данных, описанные в этих лекциях, рассчитывают на то, что общий словарь будет распространяться каким-то другим способом. Есть много различных способов сделать -это, например, новая версия программного обеспечения может быть распространена среди всех отправителей и получателей, или некоторая форма распределенной базы данных может использоваться для обеспечения того, чтобы все отправители и получатели получали обновленные словари данных, или некоторая часть приложения, которая специально управляет маршалингом данных, может быть распределена и сопряжена с приложением, которое генерирует и потребляет данные. Некоторые системы такого рода передают общий словарь как часть первоначальной настройки сеанса.