유형 길이-값
Type–length–value![]() |
통신 프로토콜 내에서, TLV(Type-Length-Value 또는 tag-Length-Value)는 특정 프로토콜의 선택적 정보 요소에 사용되는 인코딩 체계다.TLV 인코딩 데이터 스트림에는 레코드 유형, 레코드 값의 길이, 마지막으로 값 자체에 관련된 코드가 포함되어 있다.
세부 사항
유형과 길이는 크기(일반적으로 1-4바이트)로 고정되어 있으며, 값 필드는 가변 크기(variable size)이다.이 필드는 다음과 같이 사용된다.
- 유형
- 이 부분이 나타내는 필드의 종류를 나타내는 종종 단순한 영숫자로 된 이진 코드;
- 길이
- 값 필드의 크기(일반적으로 바이트 단위)
- 가치
- 메시지의 이 부분에 대한 데이터를 포함하는 가변 크기 바이트 시리즈.
TLV 표현 데이터 시스템 솔루션을 사용할 때의 몇 가지 이점은 다음과 같다.
- 일반화된 구문 분석 기능을 사용하여 TLV 시퀀스를 쉽게 검색할 수 있다.
- 이전 노드에서 수신된 새 메시지 요소를 안전하게 건너뛰고 나머지 메시지를 구문 분석할 수 있다.이는 알려지지 않은 XML 태그를 안전하게 건너뛸 수 있는 방법과 유사하다.
- TLV 요소는 메시지 본문 내부의 모든 순서로 배치될 수 있다.
- TLV 요소는 일반적으로 파싱 속도를 높이고 비교 가능한 텍스트 기반 프로토콜보다 데이터를 더 작게 만드는 이진 형식과 이진 프로토콜로 사용된다.
예
실제 사례
전송 프로토콜
- TLS(및 그 이전 SSL)는 TLV로 인코딩된 메시지를 사용한다.
- SSH
- 캅스
- IS-IS
- 반지름
- 링크 계층 탐색 프로토콜은 LLDP 패킷 내에서 TLV 요소로 조직별 정보를 전송할 수 있도록 허용
- 미디어 이중화 프로토콜로 조직별 정보 허용
- TLV 인코딩 옵션을 사용하는 Dynamic Host Configuration Protocol
- GSM 휴대폰에 사용되는 RR 프로토콜(3GPP 04.18에서 정의됨)이 프로토콜에서 각 메시지는 정보 요소의 시퀀스로 정의된다.
데이터 저장소 형식
기타 예
전화를 걸 수 있는 메시지를 상상해보라.시스템의 첫 번째 버전에서는 "명령"과 "PhoneNumberToCall"이라는 두 가지 메시지 요소를 사용할 수 있다.
- command_c/4/makeCall_c/phoneNumberToCall_c/8/"722-4246"
여기command_c
,makeCall_c
그리고phoneNumberToCall_c
정수 상수와 4와 8은 각각 "값" 필드의 길이입니다.
나중에(버전 2)에 호출 번호가 포함된 새 필드를 추가할 수 있음:
- command_c/4/c/callingNumber_c/14/"1-613-715-9719"/전화번호ToCall_c/8/"722-4246"
버전 2 시스템으로부터 메시지를 받은 버전 1 시스템은 먼저command_c
원소를 읽은 다음 활자의 원소를 읽는다.callingNumber_c
. 버전 1 시스템이 이해하지 못함callingNumber_c
, 따라서 길이 필드가 읽히고(즉, 14) 시스템이 14바이트를 읽으려면 앞으로 건너뛴다.
phoneNumberToCall_c
그리고 메시지 파싱은 계속된다.
데이터를 표시하는 다른 방법
코어 TCP/IP 프로토콜(특히 IP, TCP, UDP)은 미리 정의된 정적 필드를 사용한다.
HTTP/1.1(및 그 비표준화 이전 버전), FTP, SMTP, POP3 및 SIP를 포함한 일부 애플리케이션 계층 프로토콜은 다음에 따라 포맷된 텍스트 기반 "Field: Value" 쌍을 사용한다. RFC2822. (HTTP는 Content-Length 헤더가 있는 페이로드 길이를 나타내며, 비어 있는 라인이 있는 페이로드에서 헤더를 분리하고 새 라인이 있는 헤더를 서로 분리한다.)
ASN.1은 여러 TLV 기반 인코딩 규칙(BER, DER)과 비 TLV 기반 인코딩 규칙(PER, XER)을 지정한다.
CSN.1은 비 TLV 의미론을 사용한 인코딩 규칙을 설명한다.
보다 최근에 XML은 네트워크의 서로 다른 노드들 사이에 메시지를 구현하는 데 사용되었다.[when?]이러한 메시지에는 일반적으로 BUFF와 같은 라인 기반 텍스트 명령이 앞에 붙는다.