2022年12月20日火曜日

【ASN.1】ASN.1(Abstract Syntax Notation One)とは

ASN.1とは携帯やパソコン間通信等の電気通信で良く使用されるデータ構造の記述方法です。

この記法を送受側合わせておくことでより少ないデータ量で情報の送受信が可能になります。

これにはどんなメリットがあるかというと大きく以下2点です。

低コスト(少ないパケット代ですむ。運営側は帯域が多少狭くても大丈夫になる)

高速(送りたいデータ量が少ない=データサイズが小さい=送り終わるまでの時間が速い=高速)


■ASN.1の送受信イメージ

例えば、対戦格闘ゲームで有名な手からビームがでるコマンド「↓\→+P」を通信で相手に送るとします。

↓\→+Pで手からビームが出るイメージ

この時にルールとして

↑:0x00

↓:0x01

←:0x02

→:0x03

\:0x04(左上)

\:0x05(右下)

/:0x06(左下)

/:0x07(右上)

+:0x08

P:0x09

K:0x0a

とすると「↓\→+P」を表現するのに普通は「01 05 03 08 09」の5Byteを相手に送る必要があります。


これをASN.1(PER)で表現すると

まずは以下のルールを送受信側で用意しておきます。

Key_Command ::= SEQUENCE {
	command SEQUENCE(SIZE(1..10)) OF Command
}

Command ::= ENUMERATED {
	ue,
	shita,
	hidari,
	migi,
	hidariue,
	migishita,
	hidarishita,
	migiue,
	plus,
	p,
	k
}

そうすると「41 53 89」の3Byteだけ送るだけで済みます。

そして受信側は受け取った「41 53 89」をデコードし、

HEX |Bits|Value
----+-----------------------------------|-----+--------
    |    |Key_Command SEQUENCE Data     |     |command
  41|0100|command SEQUENCE_OF DataLength|    4|4+1=5
    |    |command SEQUENCE_OF Data      |     |Command
    |0001|Command ENUMERATED Data       |    1|Shita
    |    |command SEQUENCE_OF Data      |     |Command
  53|0101|Command ENUMERATED Data       |    5|migishita
    |    |command SEQUENCE_OF Data      |     |Command
    |0011|Command ENUMERATED Data       |    3|migi
    |    |command SEQUENCE_OF Data      |     |Command
  89|1000|Command ENUMERATED Data       |    8|plus
    |    |command SEQUENCE_OF Data      |     |Command
    |1009|Command ENUMERATED Data       |    9|p

こんな感じの情報を受け取ることになります。

Key_Command
	command
		shita
	command
		migishita
	command
		migi
	command
		plus
	command
		p
このように、定型文など決まった情報を使用する際にはASN.1を使用してやり取りを行うことで、低コスト・高速な通信が可能になります。

↓よろしければクリックをお願いします!

TOPページに戻る


■関連ページ

【ASN.1】PER(Packed Encoding Rules)コーディングとは

【ASN.1】ASN.1の型とPERのデコード


0 件のコメント:

コメントを投稿