Type-length-value

通信プロトコルでは、 省略可能な情報がtype-length-value（TLV、tag-length-valueとも）というフォーマットで表現されることがある。type-length-valueは、情報の種類(type)・長さ(length)・値(value)をセットにして表現するフォーマットである。

type（種類）とlength（長さ）は固定長（通常、1～4バイト）である。value（値）のフィールドは可変長である。各フィールドは以下のように用いられる。
type 情報の種類に対応した数値または文字
length valueフィールドのサイズ（数値）
value 可変長のデータ

例
「電話をかける」コマンドを例に説明する。

このシステムの最初のバージョン（バージョン1）では、「電話をかける」コマンドには2つの要素、「コマンド」と「宛先電話番号」が想定される。
command_c/4/makeCall_c/phoneNumberToCall_c/8/"722-4246"

ここで、command_c、makeCall_c、phoneNumberToCall_cは整数値、4、8はvalueフィールドの長さである。

後のバージョン（バージョン2）で、新たな要素「送信元電話番号」を追加しようとすると、以下のようになる。
command_c/4/makeCall_c/callingNumber_c/14/"1-613-715-9719"/phoneNumberToCall_c/8/"722-4246"

バージョン2のシステムから送信されたメッセージをバージョン1のシステムが受信した場合、まずcommand_c要素を読み取り、次にcallingNumber_c要素を読み取る。バージョン1のシステムはcallingNumber_c要素を理解できないので、lengthフィールド(14)を読み取ってそのバイト数だけスキップし、次のphoneNumberToCall_c要素を読み取る。

上記の例はLink Layer Discovery Protocol(LLDP)である。LLDPでは組織特有の情報をTLV形式でパケットに入れることを許容している。

TLV形式は、COPS、IS-IS、RADIUSなどでも使われている。

他の表現の形式
TCP/IPプロトコルの根幹であるIP、TCP、UDPでは、固定長フィールドが使われている。

TCP/IPベースのプロトコル、HTTP、FTP、SMTP、POP3、SIPなどは、文字列による「種類: 値」の形式のフォーマットを採用している
。これはRFC 2822を継承するものである。

ASN.1は、TLV形式(BER, DER)と非TLV形式(PER, XER)のフォーマットを並用している。

関連項目
Common Open Policy Service (COPS)
IS-IS
key-length-value
Link Layer Discovery Protocol
RADIUS
OBEX
tlve, A common TLV parser

データ転送
インターネットのプロトコル
インターネット標準
データシリアライゼーションフォーマット