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
- TLS (och dess föregångare SSL) använder TLV-kodade meddelanden.
- SSH
- COPS
- IS-IS
- RADIE
- Link Layer Discovery Protocol möjliggör sändning av organisationsspecifik information som ett TLV-element inom LLDP-paket
- Media Redundancy Protocol tillåter organisationsspecifik information
- Dynamic Host Configuration Protocol (DHCP) använder TLV-kodade alternativ
- RR-protokoll som används i GSM-mobiltelefoner (definierat i 3GPP 04.18). I detta protokoll definieras varje meddelande som en sekvens av informationselement.
Datalagringsformat
- IFF
- Matroska använder TLV för uppmärkningstaggar
- QTFF (grunden för MPEG-4-behållare )
Ö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
- KLV , specifik typ av typ-längd-värde-kodning
- Binärt protokoll