본문 바로가기
Programming/ASN.1

ASN.1

by Pendine 2021. 5. 7.
728x90

ASN.1 은 패킷통신에 있어 JSON과 같은 방식이라고 생각하면 된다

 

다만 패킷 통신에 있을때 이해를 할때 JSON과 같은방식일뿐

다른 방식으로 동작하기 때문에 오해하지말것.

 

기본적으로 TCP/IP통신에서는 프로토콜 문서에 따라

정해진 규칙에 정해진 형식의 데이터를 넣으면된다.

 

예를들어, 총 10바이트를 이용하여 통신을 할 때 다음과 같은 규칙을 따른다.

 

1. 기본 전제조건으로 엔디안은 빅엔디안

패킷 번호 송신자 수신자 opcode data 1 data 1-2 data 2 data 2-2 data 2-3 crc
1 byte 1byte 1byte 1byte 2byte   3byte     1byte

 

라는 형식으로 TCP/IP 통신을 한다고 프로토콜 문서상으로 정의되어있다.

 

===========================================================================

 

JSON의 형태와 비슷하다고 파악했고, 설명하기 위해 JSON의 설명을 먼저 하겠다.

 

 

그리고 JSON은 웹에서 사용하는 데이터 전송 방식으로써

Key 값과 Value(Data) 로 엮여있는, HashMap방식과 동일한 방식으로 데이터를 송수신하는 프로토콜이다.

----------------------------------------------------------

json : { title : "example" ,

          contents : "this is contents " , 

          array-length : 4 ,

          inner-json-array : { inner_1 : "" ~~~

                                 }

         }

----------------------------------------------------------

json의 형식은 대체로 위와 같다.

가장 최상위 키값으로 이 json의 값이 어떤 종류의 데이터들이 들어있는지를 나타내는데

현재 위에서 확인할 수 있는 부분 중 "json" 이라고 적힌 키 값이 그 예로 들 수 있다.

 

그리고 그 안에서 내부에 들어있는 데이터들은 원시데이터(문자열 or 숫자 등) 이 될 수 있고

또 다른 json의 구조가 그 내부에 들어가 있을 수 도 있다. ( 예 : inner-json-array )

 

필요없는 이야기 일 수 있지만

하나의 JSON에서 다루는 데이터들은 동일한 구조를 이루고 있지만, 모든 데이터를 항상 취급하지 않을 수 있다.

간단하게 말을 한다면

위의 json의 데이터에서 키 : title, 값 : "example" 이라는 데이터가 에초에 포함되지 않은 형태로

----------------------------------------------------------

json : { contents : "this is contents " , 

          array-length : 4 ,

          inner-json-array : { inner_1 : "" ~~~

                                 }

         }

----------------------------------------------------------

 위와 같이 전송이 될 수 도 있다.

이또한 통신 프로토콜로써 해당 JSON에 대한 설명을 해주는 문서를 확인하고 잘 봐야한다.

 

 

===========================================================================

 

JSON의 형태와 비슷하다고 파악했고, ASN.1 을 설명하기 위해 JSON의 설명을 먼저 하였다.

 

참고자료 : luca.ntop.org/Teaching/Appunti/asn1.html

 

A Layman's Guide to a Subset of ASN.1, BER, and DER

Supersedes June 3, 1991 version, which was also published as NIST/OSI Implementors' Workshop document SEC-SIG-91-17. PKCS documents are available by electronic mail to . Copyright (C) 1991-1993 RSA Laboratories, a division of RSA Data Security, Inc. Licens

luca.ntop.org

 

ASN.1은 TCP/IP에서 사용하는 JSON이라고 이해하였다.

 

데이터의 구조 형식은

Tag  Length  Value 의 형식으로 나타나있고 이를 줄여서

T L V 라고 하겠다.

 

T L V 중

T는 태그의 형식을 나타내는데 이는 유니버셜에서 사용하는 태그인지 혹은 직접 정의해서 사용하는 사설(커스텀) 태그인지를 정의하고 확인할때 사용 한다.

 

L은 데이터인 V의 총 길이를 나타내는데 사용하는 데이터이며, ASN.1의 프로토콜에서는 최대길이가 정의되지 않은 무한 길기를 취급할 수 있기 때문에 L에서 표현 할 수 있는 최대길이는 파악하지 못했다.

 하지만, 데이터의 취급길이가 실제로 무한인 경우는 존재하지 않기 때문에 이또한 각 ASN프로토콜의 문서를 잘 살펴봐야한다.

 

V는 원시데이터가 들어올 수 도 있으며, T L V의 구조를 가진 데이터가 들어 올 수 도 있다.

 

예를 들어 데이터가 들어올 때 받은 구조체를 다음과 같이 표현될 수 있다.

 

T  L  V

       T  L  V

              T  L  V

              T  L  V

              T  L  V

       T  L  V

T  L  V

 

맨 위에서 확인했던 부분에서 TCP / IP 통신에서 다른점은 실제 패킷을 확인하고 디코딩할때 확인할때, 복잡해진다는 것, 좋은 점은 세세하게 나눠서 확인이 가능해진다는점. 이다.

 

위에서 간단하게 T L V로 나누어 간단하게 설명했지만

실제로 이 데이터들을 취급할때 제약조건은 ASN 문서 내에 정의가 어떻게 되어있는지에 따라

하나의 V에 여러가지의 T L V의 구조체가 들어갈 수 있는지, 여러 구조체의 순서가 중요한지, 중요하지 않은지 또한

정해저있다.

 

 

===========================================================================

 

 

패킷 확인시 실제 요령의 차이.

(TCP/IP | 일반적인 프로토콜과 ASN.1 프로토콜)

 

일반 

프로토콜

STX 송신자 수신자 opcode data 1 data 1-2 data 2 data 2-2 data 2-3 tail
1 byte 1byte 1byte 1byte 2byte   3byte     1byte

예시패킷 : 1102010EAAAABBBBBB99

 

디코딩시 확인 방법

STX 송신자 수신자 opcode data 1 data 1-2 data 2 data 2-2 data 2-3 tail
11 02 01 0E AA AA BB BB BB 99

----------------------------------------------------------------------------------------------------------------------------

 

ASN.1

기본 형식 

T L V

예시패킷 : 80 12 80 01 22 81 02 01 02 82 01 03 84 05 01 02 03 04 05 89 01 99

 

디코딩시 확인 방법

T   L   V

80 11

         81 01 22

         82 02 01 02

         83 01 03

         85 05 01 02 03 04 05

89 01 99

 

=> V의 안의 값이 T L V 의 구조를 가진 데이터인지를 확인하기 위해서는 태그 정보를 알아야 하며

위에서 확인 할 수 있는 태그 정보는 설명을 위해 임의로 만든것에 불과하므로 참고로만 할 것.

 

===========================================================================

 

 

 이를 컴파일하여 C 소스 파일, 자바 소스 파일이나 파이썬 소스 파일로 변환할 수 있는 컴파일러가 있으나 이는 해당 제품을 사용하기위해 제품과 라이센스를 구매하기 위한 비용이 꽤 나가므로 이론과 예시로 만들어본

상상으로만 설명 및 요약을 하였다.

 

 

===========================================================================

 

ASN.1 프로토콜을 사용하며 가질 수 있는 장점은 데이터를 취급함에 있어서 각각의 기기별 프로토콜을 맞출 필요없이

ASN.1프로토콜에만 맞추면 된다.

 

사람과 사람끼리 이야기를 할 때도 각 국가에 따라서 각 나라의 언어를 의사소통을 하는것이 일반적인 프로토콜이라고 예를 들 수 있다면,

 사람과 사람끼리 이야기를 할 때, 여러 국가의 사람들이 영어만으로 의사소통이 가능한 것이 ASN.1 프로토콜이라고 예를 들 수 있다.

 

 

728x90

'Programming > ASN.1' 카테고리의 다른 글

ASN 패킷 BER 디코딩 뷰어 개편2  (0) 2021.12.16
ASN 패킷 BER 디코딩 뷰어 개편  (1) 2021.11.02
ASN.1 정리 ㄱㄱ  (2) 2021.09.30
DSRC 분석중  (0) 2021.06.30
ASN.1 BER 허겁지겁 만든 디코딩 뷰어  (1) 2021.05.25

댓글