참고한 사이트는 다음과 같습니다.
http://girlsy7.tistory.com/129
https://support.microsoft.com/ko-kr/kb/252648
http://fly32.net/446
ITU-T에서 정의한 네트워크상의 데이터 교환을 정의한 프로토콜로 데이터 구조를 기술하는데 사용되는 표현 기법을 의미합니다.
특정 장치, 데이터 표현방식, 언어, 플랫폼에 종속되지 않습니다.
인코딩/디코딩 규칙까지 규정합니다.
좀 더 구체적으로 다음을 정의합니다.
- "형식" 정의
- "모듈" 정의 및 표시 방법
- INTEGER 정의
- BOOLEAN 정의
- "구조체 형식" 정의
- 특정 키워드(예: BEGIN, END, IMPORT, EXPORT, EXTERNAL) 의 의미
- 적절히 인코딩할 수 있도록 형식을 "태그"하는 방법
이를 이용하여 서로 다른 환경을 가진 시스템끼리 통신하기에 적합합니다.
이 부분에 대해서 좀 더 설명을 하자면, 동일한 Data라고 해도 Window와 Sun Application에서의 해석은 다를 수 있습니다.
32 bit integer를 기준으로 '100'이라는 값은 Little Endian 으로 [64 00 00 00] 으로 인식되지만, Big Endian으로는 [00 00 00 64] 로 인식됩니다.
때문에 어떻게 인코딩을 해야 하는지도 확실히 정해줘야하는데 이것을 정의한 것이라고 생각하면 됩니다. (기술한 것과 같이 인코딩 이외에도 정의하는게 많습니다)
Abstract Syntax와 Transfer Syntax의 개념에 대한 이해가 필요한데,
Abstract Syntax는 C에서의 Type으로 이해하면 쉽고, Transfer Syntax는 위에 기술한 예제와 같이 어떻게 인코딩을 하는지를 기술하는 것으로 이해하면 됩니다. 이런 Transfer Syntax에는 BER(Basic Encoding Rules), PER(Packing Ending Rules), CER(Canonical Encoding Rules)등이 있습니다.
ITU-T 권고안 X.209, 부록 I의 예제를 바탕으로 BER과 ASN.1을 비교하겠습니다.
다음의 '직원 데이터 레코드'가 있습니다.
Name: John P Smith Date of Birth: 17 July 1959 (other data)
이를 ASN.1 설명으로 기술하면 이렇습니다.
PersonnelRecord ::= [APPLICATION 0] IMPLICIT SET { Name, title [0] VisibleString, dateOfBirth [1] Date, (other types defined) } Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { givenName VisibleString, initial VisibleString, familyName VisibleString }
응용 프로그램은 직원 데이터를 직원 레코드 구조(ASN.1 데이터 형식)에 매핑한 다음 ASN.1 데이터에 BER(Basic Encoding Rules)를 적용합니다. 이름이 ASCII로 변환되는 것을 제외하면 다음과 같이 표시됩니다.
Personnel Record Length Contents 60 8185 Name Length Contents 61 10 VisibleString Length Contents 1A 04 "John" VisibleString Length Contents 1A 01 "P" VisibleString Length Contents 1A 05 "Smith" DateofBirth Length Contents A0 0A Date Length Contents 43 08 "19590717"
모든 것이 표현되고 완료되면 실제 전송되는 데이터 부분은 다음과 같습니다.
60 81 85 61 10 1A 04 .... .... 0A 43 08 19 59 07 17
댓글 없음:
댓글 쓰기