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
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 프로토콜이라고 예를 들 수 있다.
'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 |
댓글