Tipo-comprimento-valor

Origem: Wikipédia, a enciclopédia livre.

Em protocolos de comunicação de dados, TLV (tipo-comprimento-valor ou tag-comprimento-valor) é um esquema de codificação usado para elemento de informações opcionais em um determinado protocolo.[1]

O tipo e o comprimento são fixos em tamanho (normalmente de 1 a 4 bytes) e o campo de valor é de tamanho variável. Esses campos são usados da seguinte maneira:

  • Tipo: Um código binário, simplesmente alfanumérico (geralmente), que indica o tipo de campo que esta parte da mensagem representa,
  • Comprimento: o tamanho do campo de valor (normalmente em bytes) e
  • Valor: série de bytes de tamanho variável que contém dados para esta parte da mensagem.

Algumas vantagens de usar uma solução de sistema de dados de representação TLV são:

  • As sequências TLV são facilmente pesquisadas usando funções de análise generalizadas,
  • Os novos elementos da mensagem recebidos em um nó mais antigo podem ser ignorados com segurança e o restante da mensagem pode ser analisado. Isso é semelhante ao modo como as tags XML desconhecidas podem ser ignoradas com segurança,
  • Os elementos TLV podem ser colocados em qualquer ordem dentro do corpo da mensagem e
  • Os elementos TLV são normalmente usados em formato binário, o que torna a análise mais rápida e os dados menores do que em protocolos baseados em texto comparáveis.

Exemplos[editar | editar código-fonte]

Imagine uma mensagem para fazer uma ligação telefônica. Em uma primeira versão de um sistema, poderíamos usar dois elementos de mensagem: um "command" e um "phoneNumberToCall":

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

Aqui, command_c, makeCall_c e phoneNumberToCall_c são constantes inteiras e 4 e 8 são os comprimentos dos campos "valor", respectivamente.

Posteriormente (na versão 2), um novo campo contendo o número de chamada pode ser adicionado:

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

Um sistema da versão 1 que recebeu uma mensagem de um sistema da versão 2 primeiro leria o elemento command_c e, em seguida, leria um elemento do tipo callingNumber_c. O sistema da versão 1 não entende CallNumber_c, então o campo de comprimento é lido (ou seja, 14) e o sistema avança 14 bytes para ler

phoneNumberToCall_c

que ele entende, e a análise da mensagem continua.

Um exemplo de uso é o LLDP, que permite o envio de informações específicas da organização como um elemento TLV dentro de pacotes LLDP. Outro exemplo é o protocolo RR usado em telefones celulares GSM, definido no 3GPP 04.18.

No protocolo RR, cada mensagem é definida como uma sequência de elementos de informação.

TLVs são usados em muitos protocolos, como COPS (common open policy service - serviço de política aberta comum), IS-IS (intermediate system to intermediate system - sistema intermediário para sistema intermediário) e RADIUS (remote authentication dial-in user service - serviço de usuário de discagem com autenticação remota), bem como formatos de armazenamento de dados como IFF (interchange file format - formato de arquivo de intercâmbio) e QTFF (quicktime file format - formato de arquivo quicktime) (a base para contêineres MPEG-4).

Outras formas de representar dados[editar | editar código-fonte]

Os protocolos principais da suíte de protocolos de internet (particularmente o IP (internet protocol - protocolo de internet), o TCP (transmission control protocol - protocolo de controle de transmissão) e o UDP (user datagram protocol - protocolo de datagrama do usuário)) usam campos estáticos predefinidos.

Protocolos comuns baseados em TCP/IP, como HTTP (hypertext transfer protocol - protocolo de transferência de hipertexto, FTP (file transfer protocol - protocolo de transferência de arquivos, SMTP (simple mail transfer protocol - protocolo de transferência de correio simples, POP3 (post office protocol - protocolo de correio e SIP (session initiation protocol - protocolo de iniciação de sessão usam pares "campo: valor" baseados em texto formatados de acordo com a RFC 2822.

A ASN.1 (abstract syntax notation one - notação de sintaxe abstrata um) especifica várias regras de codificação baseadas em TLV (BER (basic encoding rules - regras de codificação básica), DER (distinguished encoding rules - regras de codificação distintas), bem como aquelas não baseadas em TLV (PER (packed encoding rules - regras de codificação empacotadas), XER (XML encoding rules - regras de codificação XML)).

A CSN.1 (concrete syntax notation one - notação de sintaxe concreta um) descreve regras de codificação usando semântica não-TLV.

Mais recentemente, a XML (extensible markup language - linguagem de marcação extensível foi usada para implementar mensagens entre nós diferentes em uma rede. Essas mensagens são normalmente prefixadas com comandos de texto baseados em linha, como com BEEP (blocks extensible exchange protocol - protocolo de troca de blocos extensível).

Ver também[editar | editar código-fonte]

  • KLV, tipo específico de codificação tipo-comprimento-valor.

Referências

  1. «Tipo-comprimento-valor» (em inglês). Microsoft Academic. Consultado em 28 de março de 2021 

Ligações externas[editar | editar código-fonte]

  • tlve, um analisador TLV comum.