Typ–längd–värde

Inom kommunikationsprotokoll är TLV ( type-length-value eller tag-length-value ) ett kodningsschema som används för valfria informationselement i ett visst protokoll . En TLV-kodad dataström innehåller kod relaterad till posttypen, postvärdets längd och slutligen själva värdet.

Detaljer

Typen och längden är fasta i storlek (vanligtvis 1–4 byte), och värdefältet är av variabel storlek. Dessa fält används enligt följande:

Typ
A binär kod, ofta helt enkelt alfanumerisk, som anger vilken typ av fält som denna del av meddelandet representerar;
Length
Storleken på värdefältet (vanligtvis i byte);
Värde
Serie av bytes med variabel storlek som innehåller data för denna del av meddelandet.

Några fördelar med att använda en TLV-representationsdatasystemlösning är:

  • TLV-sekvenser är lätta att söka med hjälp av generaliserade parsningsfunktioner;
  • Nya meddelandeelement som tas emot vid en äldre nod kan säkert hoppas över och resten av meddelandet kan tolkas. Detta liknar det sätt som okända XML- taggar säkert kan hoppas över;
  • TLV-element kan placeras i valfri ordning i meddelandetexten;
  • TLV-element används vanligtvis i binärt format och binära protokoll, vilket gör analysen snabbare och data mindre än i jämförbara textbaserade protokoll.

Exempel

Verkliga exempel

Transportprotokoll

Datalagringsformat

Övrig

Andra exempel

Föreställ dig ett meddelande för att ringa ett telefonsamtal. I en första version av ett system kan detta använda två meddelandeelement: ett "kommando" och ett "phoneNumberToCall":

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

Här är command_c , makeCall_c och phoneNumberToCall_c heltalskonstanter och 4 och 8 är längden på "värde"-fälten.

Senare (i version 2) kunde ett nytt fält som innehåller det uppringande numret läggas till:

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

Ett version 1-system som fick ett meddelande från ett version 2-system skulle först läsa kommando_c- elementet och sedan läsa ett element av typen callingNumber_c . Version 1-systemet förstår inte callingNumber_c , så längdfältet läses (dvs. 14) och systemet hoppar framåt 14 byte för att läsa

phoneNumberToCall_c

som den förstår, och meddelandetolkningen fortsätter.

Andra sätt att representera data

Kärn- TCP/IP- protokoll (särskilt IP , TCP och UDP ) använder fördefinierade, statiska fält.

  Vissa applikationslagerprotokoll , inklusive HTTP/1.1 (och dess icke-standardiserade föregångare), FTP , SMTP , POP3 och SIP , använder textbaserade "Field: Value"-par formaterade enligt RFC 2822 . ( HTTP representerar nyttolastens längd med en Content-Length-rubrik och separerar rubriker från nyttolasten med en tom rad och rubriker från varandra med en ny rad.)

ASN.1 specificerar flera TLV-baserade kodningsregler ( BER , DER ), såväl som icke-TLV-baserade ( PER , XER ).

CSN.1 beskriver kodningsregler som använder icke-TLV-semantik.

På senare tid, [ när? ] XML har använts för att implementera meddelanden mellan olika noder i ett nätverk. Dessa meddelanden är vanligtvis prefixerade med radbaserade textkommandon, till exempel med BEEP .

Se även