# Tipo-comprimento-valor

Nos protocolos de comunicações, tipo/marcação-comprimento-valor (T./M.C.V.) é um esquema de codificação usado para informações opcionais. Um fluxo de dados codificado em tipo/marcação-comprimento-valor (T./M.C.V.) contém código relacionado ao tipo de registro, o comprimento do valor do registro e, finalmente, o próprio valor.

## Detalhes

O tipo e o comprimento são fixos em tamanho (normalmente de 1 a 4 bytes) e o campo do 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éries de bytes de tamanhos variáveis que contêm dados para esta parte da mensagem.
Algumas vantagens de usar uma solução de sistemas de dados de representação tipo/marcação-comprimento-valor (T./M.C.V.) são:
* As sequências tipo/marcação-comprimento-valor (T./M.C.V.) 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 marcações da linguagem de marcação extensível (L.M.X.) desconhecidas podem ser ignoradas com segurança;
* os elementos tipo/marcação-comprimento-valor (T./M.C.V.) podem ser colocados em qualquer ordem dentro do corpo da mensagem e
* os elementos tipo/marcação-comprimento-valor (T./M.C.V.) são normalmente usados em formato binário e protocolos binários [en], o que torna a análise mais rápida e os dados menores do que em protocolos baseados em texto comparáveis.

## Exemplos
### Exemplos do mundo real
#### Protocolos de transporte

* A segurança da camada de transporte (S.C.T.) [en] (e seu antecessor a camada de soquetes seguros (C.S.S.) usa mensagens codificadas por tipo/marcação-comprimento-valor (T./M.C.V.).
* '"Shell seguro (Sh.S.)
* Serviço de política aberta comum (S.P.A.C.) [en]
* Sistema intermediário para sistema intermediário (S.I.-S.I., também escrito S.I.S.I) [en]
* Serviço de autenticação remota de usuário de discagem (S.S.R.U.D)
* O protocolo de descoberta da camada de enlace (P.D.C.E.) [en] permite o envio de informações específicas da organização como um elemento tipo/marcação-comprimento-valor (T./M.C.V.) dentro de pacotes do protocolo de descoberta da camada de enlace (P.D.C.E.).
* O protocolo de redundância de mídia (P.R.M.) [en] permite informações organizacionais específicas
* O protocolo de configuração de host dinâmico (P.C.H.D.) usa opções codificadas tipo/marcação-comprimento-valor (T./M.C.V.)
* O protocolo de gerenciamento de recurso de rádio (R.R.) usado em telefones celulares compatíveis com o sistema global para comunicações móveis (S.G.M.) (definido no projeto de parceria de 3ª geração (P.P.3.G.) 04.18). Neste protocolo cada mensagem é definida como uma sequência de elementos de informação.

#### Formatos de armazenamento de dados

* O formato de arquivo de intercâmbio (F.A.I.) [en]
* O Matroska usa tipo/marcação-comprimento-valor (T./M.C.V.) para marcações
* O formato de arquivo de tempo rápido (F.A.T.R.) [en] (a base para contêineres do grupo de especialistas em imagens em movimento 4 (G.E.I.M.-4) [en]

### Outro

* O sistema de interconexão usado para comunicação entre processos (C.E.P.) no roteador sem fio aberto

### Outros exemplos

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.

## Outras formas de representar dados

Os protocolos principais da suíte de protocolos de Internet (particularmente o protocolo de Internet (P.I.), o protocolo de controle de transmissão (P.C.T.) e o protocolo de datagrama do usuário (P.D.U.) usam campos estáticos predefinidos.
Alguns protocolos da camada de aplicações TCP/IP, incluindo o protocolo de transferência de hipertexto (P.T.Ht.) 1.1 (e seus predecessores não padronizados), o protocolo de transferência de arquivos (P.T.A.), o protocolo de transferência de correio simples (P.T.C.S.), protocolo de correios (P.C.) e protocolo de iniciação de sessão (P.I.S.) usam pares "campo: valor" baseados em texto formatados de acordo com a Solicitação de comentários (S.D.C.) 2822 (em inglês).O protocolo de transferência de hipertexto (P.T.Ht.) representa o comprimento da carga útil com um cabeçalho de comprimento de conteúdo e separa os cabeçalhos da carga útil com uma linha vazia e os cabeçalhos uns dos outros com uma nova linha.
A notação de sintaxe abstrata um (N.S.A.1) especifica várias regras de codificação baseadas em tipo/marcação-comprimento-valor (T./M.C.V.) (regras de codificação básica (R.C.B.), regras de codificação distintas (R.C.D.), bem como aquelas não são baseadas em tipo/marcação-comprimento-valor (T./M.C.V.) (regras de codificação empacotadas (R.C.E.), regras de codificação da L.M.X. (R.C.L.).
A notação de sintaxe concreta um (N.S.C.1) [en] descreve regras de codificação usando semântica que não é tipo/marcação-comprimento-valor (T./M.C.V.).
Mais recentemente, a linguagem de marcação extensível (L.M.X.) 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 o protocolo de troca de blocos extensível (P.T.B.E.) [en].