2020コースデザインウィーク1 Asn.1形式の学習
1.はじめに
-
ASN.1(抽象構文記法dotone)、抽象構文記法 1。これは、抽象データ型の形式を定義する標準であり、データの表現、表現、送信、およびエンコードを記述するための表記法です。
-
ASN.1には情報構造のみが含まれ、特定のビジネスデータは処理されません。プログラミング言語ではありません。
-
ASN.1符号化方法が限定されるものではなく、転送構文ASN.1値構文記述抽象データ(特異的発現)、共通の符号化規則であるによって提供される様々なASN.1符号化規則:基本符号化規則(BER) 、Canonicalエンコードルール(CER、CanonicalEncodingルール)、一意のエンコードルール(DER、DistinguishedEncodingルール)、圧縮エンコードルール(PER、PackedEncodingルール)、およびX MLエンコードルール(XER、XMLEncodingルール)。これらのコーディング規則は、ASN.1で定義された値を適切な伝送コードに変換する方法を説明しています。
-
ASN.1は、OSIのISO8824 / ITU X.208(構文の説明)およびISO8825 / ITU X.209(基本的なエンコードルールの説明)で指定されています。
-
いくつかの概念:
- 実際の文法:C、ObjectiveCamlなどの実際のプログラミング言語を指します。
- 抽象構文(AbstractSyntax):ASN.1を参照します。これは、ASN.1仕様を使用するプロトコルによって記述される説明テキストです。データを表すエンコーディングテクノロジーから独立した一般的なデータ構造を示しています。抽象構文を使用すると、データ型を定義し、これらの型の値を指定できます。抽象構文は、データの構造を記述するだけで、特定のエンコード形式とは何の関係もありません。また、これらのデータ構造がコンピューターにどのように格納されるかは関係ありません。
- 転送構文(TransferSyntax):プレゼンテーション層でのデータ交換の表現方法を指します。これは、実際の通信システム間のコードストリームです。2つのプレゼンテーション層エンティティ間でデータが転送される場合、これらのデータの実際のビットパターン表現は転送構文です。
- コーディング:実際の通信システム間で抽象言語メソッドをビットストリームに変換することを指します。
- エンコーディングルール:文法上のルールに続いて、実際の通信システム間で抽象言語メソッドをビットストリームに変換します。
2. ASN.1の基本的な文法規則
- ASN.1はBacosパラダイム(BNF)を使用します。
- 二重引用符で囲まれた単語( "word")は、これらの文字自体を表します。また、double_quoteは二重引用符を表すために使用されます。
- 二重引用符の外の単語(アンダースコアが含まれている場合があります)は、文法部分を表しています。
- 山かっこ(<>)は必須です。
- 大括弧([])はオプションです。
- 中括弧({})には、0から無数の回数まで繰り返すことができる項目が含まれています。
- 縦棒(|)は、左側または右側のいずれかを選択できることを示します。これは「OR」と同等です。
- :: =は「として定義」を意味します。
- ASN.1では、シンボルの定義が見つかる限り、シンボルの定義に順序はありません。
- すべての識別子、参照、およびキーワードは、文字で始まり、その後に文字(大文字と小文字の両方)、数字、またはハイフン "-"(ハイフン "-"または2つの連続する文字で終わることはできません)が続く必要がありますハイフン)、アンダースコア「_」は使用できません。コメントは、行末で始まり、行末または行末で終わります。
- キーワードは通常すべて大文字です。
- 識別子の中では、タイプとモジュール名のみが大文字で始まり、他の識別子は小文字で始まります。
- ASN.1では、実数は実際には、仮数、基数、指数の3つの整数として定義されます。小数表現はありません。
- ASN.1は、スペース、タブ、改行、コメントを変換しません。ただし、定義記号(または割り当て記号) ":: ="に区切り文字があってはなりません。
3. ASN.1のタイプ
タイプは、エンコードして送信できる空でない値のセットです。高水準言語の複雑なデータ構造と比較すると、ASN.1のタイプは主にデータ伝送用です。
ASN.1の型は、基本型(組み込みデータ型)と結合型に分けられ、結合型は1つ以上の基本型で構成されます。
1.基本タイプ
タイプ | 意味 |
---|---|
ビット列 | ビット文字列 |
ブール | ブール |
整数 | 整数 |
ヌル | ヌル値 |
OBJECT IDENTIFIER | オブジェクト識別子 |
オクテット弦 | バイト文字列 |
PrintableString | 印刷可能な文字列 |
UTCTime | 「協定世界時」 |
GeneralizedTime | 世界時 |
2.建設タイプ
- 複雑なものは、単純なコレクションまたはもののシーケンスと見なすことができます。
- コレクションは順序に依存しませんが、シーケンスは順序に依存します。
- 構造タイプは、いくつかのフィールド(単純タイプまたは他の構造タイプ)を含む複雑なものを記述するために使用されます。
- ASN.1は、秩序と無秩序のさまざまな状況を説明する4つの構築方法を定義しています。
2.1シーケンス
-
1つ以上のフィールドの順序付けられたシーケンスを表します。次に例を示します。
ReportEntry ::= SEQUENCE { author OCTET STRING, title OCTET STRING, body OCTET STRING, biblioBook Bibliography }
- ユーザー定義の型名と識別子の大文字の規則
型名は「ReportEntry」の
ようにキャメルの大文字で大文字になり、識別子は「biblioBook」のようにキャメルの大文字で大文字になりました
2.2シーケンス
-
特定のタイプの0個以上のフィールドの順序付けられたシーケンスを表します。次に例を示します。
Report ::= SEQUENCE SIZE (100) OF ReportEntry Report ::= SEQUENCE SIZE (MAX) OF ReportEntry
2.3セット
-
次のように、1つ以上のフィールドの順序付けられていないセットを表します。
Menu ::=SET{ sandwich Food, coke Beverage }
2.4セット
-
特定のタイプの0個以上のフィールドの順序なしセットを表します。次に例を示します。
Class ::= SET SIZE (50) OF Student
2.5 ASN.1を使用してデータ構造を書き込む
-
さまざまな構築方法に基づいて、基本的なデータ型が階層的にネストされ、最終的に任意の抽象的なものを記述できるデータ構造が構築されます。
-
たとえば、次のとおりです。
Bibliography ::= SEQUENCE { author OCTET STRING title OCTET STRING publisher OCTET STRING year OCTET STRING }
3.その他のキーワード
- 選択:いくつかのタイプから1つを選択します
- ANY:構築されたタイプのフィールドは、他のフィールドの値に依存します(ANY DIFINED BY)
- オプション:構築タイプのフィールドはオプションです
- デフォルト:構築タイプのフィールドのデフォルト値を指定します