Pendine 2021. 5. 7. 16:18
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
반응형