이 블로그 검색

2012년 4월 4일 수요일

인코딩과 디코딩, 코덱

 인코딩
 - 아날로그 신로를 디지털 신호로 변환
 - 10진수나 알파벳 문자와 같은 정보를 코드화된 형태로 변환시키는 것. 즉, 2진 코드로 변환해주는 것

 디코딩
 - 디지털 신호를 아날로그로 변환
 - 2진수 등의 코드화 된 정보를 10진수와 같은 비코드화 된 형태로 변환시키는 것

 메시지 오브젝트 표현 표준은 ASN.1 이지만, ASN.1은 추상적인 자료 표현 방식이므로 통신 채털로 ASN.1 메시지를 전송할 때는 바이너리 데이터로 변환하여야 하는데 ASN.1의 기본 인코딩 방식은 BER임. BER은 모든 ASN.1 메시지, 구조체 및 변수를 Tag-Length-Value Triple로 인코딩 한다.

 즉, BER로 인코딩 된 데이터는 Tag-Length-Value 형태로 구성된다. 예를 들어 OID 1.3.6.1.2.1.1.1의 BER 인코딩 결과는 06 07 2B 06 01 02 01 01 01 이다. 06은 Universal Class Object Identifier의 Tag이다. 07은 Length Byte이다. 뒤이은 뒤이은 옥텟 열의 길이가 7바이트이기 때문이다. OID의 첫번째 바이트와 두번째 바이트는 40a+b의 규칙에 의해 1바이트로 인코딩되므로 OID 1.3.6.1.2.1.1.1은 옥텟열 2B 06 01 02 01 01 01가 되며 길이는 7바이트이다.
 그런데 BER은 재귀적으로 적용되므로 Value 필드는 또다시 Tag-Length-Value Triple로 인코딩된다. Nesting의 깊이는 제한이 없다. 아래의 예제는 BER 인코딩된 SNMP 메시지의 일부이다. 메시지를 분석해 보면 3단계로 네스팅되어 재귀적인 TLV구조로 인코딩 되어 있음을 알 수 있다.
30 1E ; Sequence (30 Bytes)
| 02 01 00 ; Integer (2 Bytes)
| 04 06 70 75 62 6C 69 63 ; Octet string (6 Bytes)
| 31 11 ; SET (17 Bytes)
| | 02 01 01 ; Integer (2 Bytes)
| | 30 0C ; Sequence (12 Bytes)
| | | 06 07 2B 06 01 02 01 01 01 ; OBJECT_ID (7 Bytes)
| | | 02 01 01 ; Integer (1 Byte) 
[출처] BER|작성자 egrid


댓글 없음:

댓글 쓰기